问题的原因
我打算在隐藏文件(如.hgignore)上添加组写入权限,如下所示:
#pwd /select #sudo chmod -R g + w。*
问题是'..'匹配了这个模式,现在整个RHEL文件系统都有g + w设置。 眼前的问题如下:
题
为了重新获得远程login的能力,需要指导有权访问服务器的人员如何修复系统。
现在的问题是:为了恢复ssh
和sudo
function,哪些重要的文件和目录需要恢复权限?
请注意“closures为重复”
问题为什么“chmod -R 777 /”具有破坏性? 提供了recursion扩展权限可以产生什么效果的详细解释。 这个问题旨在回答如何通过ssh重新获得远程访问的问题,以便可以执行更广泛的恢复和修复。
对于作为软件包一部分的文件,您可以找出干扰的内容
rpm –verify“包名”
其中packagename是一个单独的包,或者您可以循环输出“rpm -qa”
那么你应该可以使用rpm来修复它们
rpm –setperm“包名”
与ssh有关的问题大多数不仅限于/ etc下,还与用户尝试连接的.ssh文件夹有不正确的权限有关。 一般来说,用户的.ssh文件夹应该是700,私钥应该是600,其他的可以是644。
/ etc / ssh文件夹应该是755,在/ etc / ssh下,私钥应该是600,其他的都应该是644。
如何从/ etc中错误的权限恢复服务器?
可能最简单的方法之一是从备份恢复。 你做备份和testing恢复过程是正确的吗? 🙂
如果您没有可用于执行还原的备份,则可能需要在VM中设置一个完全相同的干净系统,然后通过比较两者来根据您的服务器修复主机上的权限。
如果你有一个已知的好的服务器,在好的服务器上运行如下的内容可能会帮助你恢复它。 (假设recursion通配能力(zsh),可以使用find和-exec / xargs代替):
for i in /etc/**/*; do perm=$(stat "$i" -c "%a") ssh root@badServerHostName "chmod $perm $i" done
可能是几个子目录排除其他可能会添加… Rsync会更好,如果它只能做权限,但我不认为它可以。
如果你有一个备份,你有LVM和足够的空间,你可以做到以下几点:
1.备份到一个新的,临时的lv(挂载在/ oldperm下)
2.做下面的伪代码:
foreach oldfile in /oldperm/* { newf = strip "/oldperm" from oldfile chmod --reference=oldfile newf }
你可以部分恢复,就像/ etc下的所有东西一样,万一你有空间问题。 这个技巧依赖于chmod的标志–reference,它把另一个文件作为模板,并且使得参数在权限上是匹配的。
这样你只能恢复旧的烫发而不改变文件的内容。