![我不小心执行了 chmod 777 -R /](https://linux22.com/image/1441028/%E6%88%91%E4%B8%8D%E5%B0%8F%E5%BF%83%E6%89%A7%E8%A1%8C%E4%BA%86%20chmod%20777%20-R%20%2F.png)
我知道这是一个巨大的安全问题等。但我觉得这真的很奇怪,我的很多服务都停止工作了(MySQL、SSH、Node),最重要的是 sudo 可能还有其他服务也停止工作了。我不想重新安装整个服务器,我也没有 ubuntu 备份。我并不真正关心安全问题,我只想让服务尤其是 MySQL 再次运行,因为无论如何这都是一个测试服务器。
为什么 chmod 会使这些服务不可用?我该如何修复至少 MySQL 和 sudo?
答案1
要回答你的问题“为什么”,答案是许多二进制文件(最明显的ssh
是和sudo
)都需要设置 setuid 位,而你却清除了它。
答案2
编写良好的程序需要以特权执行权限进行安装,因此应验证它们未在不安全的配置下启动,以防止它们被用作破坏系统的途径,并且不会以不正确的权限或所有权运行。确保此行为是代码的一部分,这是许多大型软件项目(包括开源和闭源软件)发布期间执行的安全审计的一部分。
答案3
这是一个可能让你再次跑步的丑陋技巧:
1)查找或安装与有问题的系统尽可能相似的系统。
2)在该服务器上执行命令,输出每个文件的完整路径及其权限。例如:
find / | while read F; do ls -lad ${F}; done | cut -f 1,9 -d " " | tee /tmp/log
3)将该脚本的输出复制到受损系统。
4) 将其导入设置这些权限的脚本。忽略由于文件不存在而导致的错误。例如:
cat /tmp/log | while read F; chmod ${F}; done