1. 背景描述
误操作执行了chmod -R 777 /
,导致普通用户无法执行sudo
,root
用户又无法正常登陆成功。
2. 排查发现
- 普通用户尚未退出,但是已经无法修复权限,因为无法执行
sudo
,报错:sudo: /bin/sudo must be owned by uid 0 and have the setuid bit set
- SSH无法启动,因为文件权限too open 。
3. 解决方法
使用修复盘引导启动或者采用单用户模式,两者选其一
3.1.1 登录单用户模式
- 重启服务器,在选择内核界面使用上下箭头移动
- 选择内核并按
e
进入编辑界面 - 找到
linux16 vmlinuz…
那行, 按end
移动到最后, 空一格加入init=/bin/bash,删除
rhgb quiet` - 按
Ctrl + x
开机,即可进入单用户模式。 - 将根目录挂载为读写模式:
mount -o remount,rw /
。
3.1.2 修复盘挂盘修复
mount /dev/vda1后修改如下几个文件权限
- chmod 600 /mnt/etc/securetty
- chmod 600 /mnt/etc/ssh/ssh_host*
- chmod -R 600 /mnt/var/empty/sshd
重启后可以解决SSH无法启动和root 用户登录问题
3.2 恢复默认权限设置
方式一: 利用rpm包的默认权限设置来恢复
推荐
for i in `rpm -qa`; do rpm --setperms $i; done
for i in `rpm -qa`; do rpm --setugids $i; done
方式二:利用acl权限恢复
通过系统自带的getfacl命令来拷贝和还原系统权限,修复的方法如下:
# 通过一台权限正常的Linux(最好内核版本和故障服务器相同)来获取系统权限列表
getfacl -R / > systemp.bak
将systemp.bak拷贝至目标机
# 异常服务器中执行恢复权限命令
setfacl --restore=systemp.bak
# 重启系统
reboot