開發人員的一條命令導致服務器差點崩潰!

有一天,我正在午休,有一位同事急匆匆的過來找我,說他不小心執行錯了一條命令,然後就怎麼也連不上了開發服務器,而且他之前設置的每分鐘執行的定時任務好像也沒有生效。


我連了一下開發服務器,確實連不上。然後我問他剛才執行的是什麼命令,他告訴我。。。

<code>他執行了  chmod -R 777 /    

完蛋 !!!

系統上的很多文件權限如果太大會報錯,

比如秘鑰文件 authorized_keys

而且系統上有一些特殊的權限,比如 setuid ,粘滯位(t)等等
/<code>

唉! 一般開發人員是沒有root權限的,即使是開發服務器也不會給root權限,

但這個同事是剛來的項目經理,老大說先給他一下root權限,他要裝一下自己的環境。。。

既然出了事就得解決, 可是服務器現在已經連不上去了,

幸好我們使用 saltstack 統一管理的服務器,

我用 saltstack 執行下面的命令看下能否連上那臺服務器


開發人員的一條命令導致服務器差點崩潰!


很好,saltstack 正常執行命令就好辦了, 要不然我只能用鏡像恢復服務器了。


1、首先得想辦法恢復ssh相關文件的權限,能連上那臺服務器就好辦很多。


我連到salt-master服務器上 ,開始執行恢復操作:

<code># 把下面一些命令放到一個腳本里 

cat /srv/salt/acl.sh

chmod 644 /etc/passwd
chmod 644 /etc/group
chmod 644 /etc/shadow
chmod 400 /etc/gshadow


chmod 644 /etc/ssh/ssh_config

chmod 644 /etc/ssh/ssh_host_ecdsa_key.pub

chmod 644 /etc/ssh/ssh_host_ed25519_key.pub

chmod 644 /etc/ssh/ssh_host_rsa_key.pub

chmod 644 /etc/ssh/moduli

chmod 640 /etc/ssh/ssh_host_ecdsa_key

chmod 640 /etc/ssh/ssh_host_ed25519_key


chmod 640 /etc/ssh/ssh_host_rsa_key

chmod 600 /etc/ssh/sshd_config

chmod 711 /var/empty/sshd

########################

/<code>


然後在salt-master 上開始執行 腳本恢復ssh的權限 :


開發人員的一條命令導致服務器差點崩潰!

ok,執行完了,我連了一下那臺服務器,哈哈! 可以連上了。


現在離成功越來越近了 !


2、 開始恢復系統的權限

<code>就是把一臺正常的服務器上的權限恢復到那臺被誤操作的服務器! 

要求服務器的系統版本相同,內核版本相同,我這個salt-master 就符合條件

開始 備份 ,在salt-master 服務器執行下面命令:

getfacl -R / > /srv/salt/acl.bak

/<code>


備份好系統權限就該恢復了,我先用saltstack 把 文件發送到誤操作的服務器


開發人員的一條命令導致服務器差點崩潰!

ok,發送完之後,登陸到誤操作的服務器上執行:

<code>#在salt-master 遠程執行setfacl命令有問題,需要到誤操作那臺服務器上去執行 

cd /
setfacl --restore=/tmp/acl.bak

# 注意,要先進入到 根目錄下,因為備份的時候是從 根目錄開始備份的,
#acl.bak 裡面的文件路徑也是相對根目錄的/<code>


大功告成,現在權限已經恢復了!


亡羊補牢的錯誤:

1、不允許開發人員有root權限! 即使 是開發服務器也不行!有需要root操作的可以讓運維代勞

2、把history 實時的同步到遠程服務器或elk,防止背鍋!


分享到:


相關文章: