程序員都想,卻不敢做的事?我來!
本文轉載自微信公眾號「程序員魚皮」,作者魚皮。轉載本文請聯系程序員魚皮公眾號。
大家好,我是魚皮。
在編程屆,有一個家喻戶曉的實用 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']
一般情況下,以上那么多種措施就足夠防護了,也比較簡單。
但最后,還是要提醒大家,不要輕易嘗試這個命令哈哈。一時好奇一時爽,明天要睡垃圾場!