使用 chmod -R 777 ./*
命令在更改某个目录下文件的权限时,由于操作失误,误用为 chmod -R 777 /*
,在零点几秒的反应过后,果断 ctrl + c
,奈何电脑反应更快,一切为时已晚(切记不要关闭该终端)。若何?
查看当前根目录权限,如下:
1 | [root@hadoop-centos-03` /]# ll |
由于 /etc
目录已经被更改,显示如下:
1 | [root@hadoop-centos-03` etc]# ll | head |
故已无法通过ssh连接该节点,提示如下:
1 | Session stopped |
ssh 登录相关的文件信息在/etc/ssh
目录下,相关文件可能还有passwd、group、shadow等,查找另外一台正常机器该目录的权限及相关文件的权限,根据其修改当前出错机器/etc/ssh
目录下的文件及相关文件的权限,我试着将/etc/ssh
目录下的文件更改为600,即执行chmod 600 /etc/ssh
,发现通过ssh可以连接,示例如下:
1 | # 未修改前 |
最头疼的问题(登陆问题)已经解决,只要能进去,剩下的就要慢慢折腾喽。
导出系统文件权限
如果你是在集群中出现上述情况,可以找一个相似的机器,如果你是单机模式,那就找一个比较干净(没有安装过多的额外应用)的机器,导出系统各目录层级的文件权限。
导出命令:
1 | getfacl -R /* > /home/chmod.bak # 存储路径及文件名可以自定义 |
修改出错机器系统文件权限
命令:
1 | setfacl --restore=/home/chmod.bak |
上述命令执行完后:
1 | [root@hadoop-centos-03` /]# ll |
到目前为止,一切看似已恢复正常,如果重启方便,建议重启。
总结
- 操作失误后,切记不要关闭该终端,或许还可以回到从前;
- 更改/etc/ 目录下的 passwd、group、shadow、ssh等文件可恢复ssh远程登陆;
- 导出系统文件对应的权限可通过
getfacl -R /* > /home/chmod.bak
命令实现; - 更新系统文件的权限可通过
setfacl --restore=/home/chmod.bak
命令实现。
参考
传送门