我刪庫跑路失敗了

程式設計師魚皮發表於2021-07-08

一個 “實用” 的好命令,我不得試試?

大家好,我是魚皮。

在程式設計屆,有一個家喻戶曉的實用 Linux 命令:rm -rf /

據說,此命令一旦執行成功,就會給人帶來快樂,是一個善良的好命令,所以我喜歡叫它 快樂命令

好吧,不裝了,其實這個命令的作用是 刪除伺服器上所有的檔案 !是一個極度危險的命令!

之前我們可能也聽說過很多刪資料跑路事件,其中一部分元凶正是這個命令。

記得前兩週,我剛買了一臺全新的雲伺服器,在給大家演示如何搭建應用開發環境。結果沒想到,一些小夥伴竟然慫恿我當場輸入 “快樂命令”,想看看會出現什麼效果。

這麼刺激的事情,我不得試試?

於是,我開啟終端,連線伺服器,輸入快樂命令。而且,要做就要做得絕一點,我甚至同時開了 三個 客戶端,打算同時輸入命令,三倍快樂!

OK,起飛 ?!

但結果呢,資料並沒有被刪除,而是彈出了一個警告,禁止刪除!

對不起,結果讓大家失望了~

其實在敲這行命令之前,我就一點兒也不擔心,因為我相信騰訊雲伺服器不可能連這點安全保障都沒有。

那問題來了,如何防止快樂命令帶來的惡劣影響呢?

下面就簡單分享下我瞭解到的方法吧~

如何防止 rm -rf 命令?

方法還是挺多的,我簡單整理了一個大綱:

防止 rm -rf 大法

好習慣

首先,使用伺服器最多的人肯定是我們自己,因此我們要先養成良好的使用習慣,保護伺服器,從我做起。

定期備份

為了防止伺服器上的資料(資料庫、使用者檔案、配置檔案等)被誤刪除,可以定期將伺服器上重要的檔案下載到本地或同步到其他儲存空間上,一般使用定時指令碼(crontab 命令等)或工具自動定時同步。

替代命令

為了防止意外 rm 命令帶來的不利影響,我們可以儘量少用該命令,使用一些其他的命令來替代刪除。

比如 mv 命令,作用是移動檔案或改名,可以自己新建一個類似回收站的目錄,然後把要刪的檔案扔進去。

# 新建回收站目錄
mkdir trash
# 移動檔案到回收站
mv file.txt trash

針對日後可能還需要的檔案,可以給檔案增加 .bak 字尾,表示備份:

mv file.txt file.txt.bak

但是,即使養成了好習慣,有時候可能也會疏忽,不小心打出了 rm 命令,意外刪除了檔案。

莫慌,還有其他更保險的方法。

Alias 別名

Linux 中的 alias 命令用於為指令設定別名,有點類似物件的引用。

舉個例子,本來可以用 mkdir 命令建立目錄,如果我覺得這個命令背不下來,那可以給他起個別名:

alias md=mkdir

然後,我們就可以使用 md 命令來建立目錄了。

同理,我們可以把 rm 命令設定為其他命令的別名,從而阻止原本的刪除功能。

其實很多伺服器已經預設為我們設定了一些保護系統檔案安全的別名,讓我們開啟 .bashrc 檔案:

cat /root/.bashrc

可以看到如下程式碼:

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

系統已經為 rm 命令配置了別名,當我們輸入 rm 時,實際執行的是 rm -i,通過 -i 引數來詢問我們是否要刪除,只有輸入 y 確認後,才會執行刪除操作。

是否確認刪除

手動回收站

基於 alias 命令,我們可以自動將 rm 命令重定向為將檔案放入回收站目錄,操作如下:

首先修改 .bashrc 檔案(Linux 下環境配置檔案,用於儲存一些個性化配置):

vim ~/.bashrc

在檔案末尾追加如下程式碼:

# 建立一個.trash 隱藏目錄
mkdir ~/.trash
# 使用別名 del 代替 rm  
alias rm=del
# 將 rm 命令改為 mv 
del()               
{  
  mv $@ ~/.trash/  
}

儲存退出,然後輸入下列命令使修改生效:

source ~/.bashrc

大功告成,然後再執行 rm 命令,就會自動移動到回收站目錄啦!

trash

除了自己手動編寫回收站指令碼外,還可以使用現成的開源專案 trash,Mac 使用者可以直接用一行命令安裝,就可以愉快地使用了。

專案地址:https://github.com/ali-rantakari/trash

許可權管理

以上的方式對於個人伺服器使用者來說,一般就足夠了,但如果是團隊開發,多人同時在一臺伺服器上操作,就很難說誰突然刪檔案跑路了對吧。

所以,最好還是對伺服器上的檔案進行合理的許可權設定,常用的幾種方式如下。

修改檔案許可權

最直接的方式,直接用 chmod 命令修改指定檔案的讀、寫、執行許可權,比如下列命令:

chmod 700 file.txt

作用是設定僅建立該檔案的使用者可讀寫,其他使用者無權訪問。

chattr

Linux 系統自帶的 chattr 命令是 Change Attribute 的縮寫,意為改變檔案的屬性,能夠用來防止檔案和目錄被意外刪除或修改。

比如下列命令:

sudo chattr +i file.txt

通過 +i 引數給檔案追加了 “不可修改” 的屬性,該不能被刪除、改名、設定連結關係,同時不能寫入或新增內容。該引數可謂是提高系統安全的神器!

讓我們試下效果:

果然刪除失敗了,提示操作不被允許。

如果要保護目錄,只需要加個 -R 引數就行了:

sudo chattr -R +i myDir

設定 sudo 許可權

sudo 是 Linux 的常用命令,可以臨時以 root 使用者(超級管理員)的身份執行命令。

如果給了一個普通使用者超級管理員的身份,他將能做任何事情,這是非常危險的啊!

所以可以使用 visudo 命令,修改普通使用者使用 sudo 命令時的許可權。

輸入 visudo,將自動進入 /etc/sudoers 檔案的編輯,嘗試追加一行:

dog localhost=/bin/rm /file/*

這就意味著,使用者 dog 只能刪除 /file 目錄下的檔案,而不能隨意刪除。

Lshell

再提一個開源的 Linux 安全神器 Lshell,可以用於構建一個受限的 Linux 指令碼執行環境。

專案地址:https://github.com/ghantoos/lshell

一行命令安裝後,可以通過修改它的配置檔案 /etc/lshell.conf,來管理使用者的行為。

比如下列配置,禁止使用者 yupi 使用 rm 命令,防止這貨刪檔案跑路:

 [yupi] allowed = 'all' - ['rm']

一般情況下,以上那麼多種措施就足夠防護了,也比較簡單。

但最後,還是要提醒大家,不要輕易嘗試這個命令哈哈。一時好奇一時爽,明天要睡垃圾場!

我是如何通過自學,拿到騰訊、位元組等大廠 offer 的,可以看這篇文章,不再迷茫!

我學計算機的四年,共勉!

我是魚皮,點贊 還是要求一下的,祝大家都能心想事成、發大財、行大運。

相關文章