开发人员的一条命令导致服务器差点崩溃!

有一天,我正在午休,有一位同事急匆匆的过来找我,说他不小心执行错了一条命令,然后就怎么也连不上了开发服务器,而且他之前设置的每分钟执行的定时任务好像也没有生效。


我连了一下开发服务器,确实连不上。然后我问他刚才执行的是什么命令,他告诉我。。。

<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,防止背锅!