天天看點

一個讓rm -rf 都頭大的指令

大家好,我是高勝寒,一個在教培行業不忘初心的人

作為運維,我們都有一個删根情節,不爽了随時删根跑路,但從未實施過。

運維經常用rm -rf / 來調侃自己,但事實上現在的安全機制下,rm -rf / 并不起作用,你看:

[root@zmedu-17 ~]# rm -rf /
rm: 在"/" 進行遞歸操作十分危險
rm: 使用 --no-preserve-root 選項跳過安全模式
           

我們需要加上後面的 --no-preserve-root 跳過安全模式才能删除/

不過我們想删除/上的部分不在使用中的檔案還是可以的比如 /*

[root@zmedu-17 ~]# rm -rf /*
rm: 無法删除"/boot/efi": 裝置或資源忙
rm: 無法删除"/dev/hugepages": 裝置或資源忙
rm: 無法删除"/dev/mqueue": 裝置或資源忙
rm: 無法删除"/dev/pts/2": 不允許的操作
rm: 無法删除"/dev/pts/1": 不允許的操作
rm: 無法删除"/dev/pts/0": 不允許的操作
rm: 無法删除"/dev/pts/ptmx": 不允許的操作
rm: 無法删除"/dev/shm": 裝置或資源忙

           

但如果是普通檔案可就沒有這麼好運了,普通檔案被删除了,在ext4檔案系統上我們可以借助工具基于Inode号,把檔案找回來,但是裡面的空檔案卻無法在恢複。

雖然我們很小心,但依舊有删除檔案的可能,這就像男人之于女人,帶着作案工具,就總有做案的可能,除非變成公公。

今天我就給大家介紹一個指令,他的出現相當于給重要的檔案在你備份的同時又加了一把鎖,確定檔案不會被誤删除或者修改。

祭出指令: chattr: 鎖定檔案,鎖定後,不能删除也不能修改

參數:

+a 隻能給檔案添加内容,但是删除不了

-d: 不能删除

+i : 加鎖,檔案不能删除,不能修改,也無法移動

檢視加鎖: lsattr

解鎖 : -i 在這裡的減号表示接觸

我們來對/etc/passwd來使用

[root@zmedu-17 ~]# lsattr /etc/passwd #檢視原始權限
---------------- /etc/passwd
[root@zmedu-17 ~]# chattr +i /etc/passwd   #加鎖
[root@zmedu-17 ~]# lsattr /etc/passwd    #檢視加鎖後權限
----i----------- /etc/passwd
[root@zmedu-17 ~]# rm -rf /etc/passwd #删除測試
rm: 無法删除"/etc/passwd": 不允許的操作
[root@zmedu-17 ~]# mv /etc/passwd /root/  #移動測試
mv: 無法将"/etc/passwd" 移動至"/root/passwd": 不允許的操作
[root@zmedu-17 ~]# echo aaa >> /etc/passwd  #修改檔案内容測試
-bash: /etc/passwd: 權限不夠
 

           

是不是成功的阻止了你誤删除檔案的操作。 當然你說按照下面的操作來做,然後說自己是誤操作删除了檔案,我也信:

[root@zmedu-17 ~]# lsattr /etc/passwd  #檢視是否加鎖
----i----------- /etc/passwd     
[root@zmedu-17 ~]# chattr  -i /etc/passwd  #去掉加鎖權限
[root@zmedu-17 ~]# lsattr /etc/passwd   #檢視是否已經去掉
---------------- /etc/passwd
[root@zmedu-17 ~]# rm -rf /etc/passwd  #特意誤删除一下

           

隻要想删掉,總會有辦法的。還有沒有方法更安全一點呢? 當然

我們可以隐藏掉chattr

[root@zmedu-17 ~]# which chattr   #檢視指令目錄
/usr/bin/chattr
[root@zmedu-17 ~]# mkdir /opt/yc  #建立yc目錄
[root@zmedu-17 ~]# mv /usr/bin/chattr /opt/yc/ #把指令拷貝
[root@zmedu-17 ~]# cd /opt/yc/     #進入yc目錄
[root@zmedu-17 yc]# mv chattr h   #使用别名把指令隐藏
[root@zmedu-17 ~]# /opt/yc/h +i /etc/passwd  #h就是chattr指令
[root@zmedu-17 ~]# lsattr /etc/passwd
----i----------- /etc/passwd
           

想要恢複的話,拷貝回去就可以了

[root@zmedu-17 yc]# mv h /usr/bin/chattr
[root@zmedu-17 yc]# chattr -i /etc/passwd
           

結語