如何通过在整个文件系统上设置扩展权限来恢复对RHEL系统的远程访问?

问题的原因

我打算在隐藏文件(如.hgignore)上添加组写入权限,如下所示:

 #pwd
 /select
 #sudo chmod -R g + w。*

问题是'..'匹配了这个模式,现在整个RHEL文件系统都有g + w设置。 眼前的问题如下:

  • / etc / sudoers需要设置为440,而不是460,所以现在用户不能使用sudo。
  • 一些类似的机制,以上不允许SSH访问。 (远程SSH客户端收到消息“ssh_exchange_identification:由远程主机closures的连接”错误)

为了重新获得远程login的能力,需要指导有权访问服务器的人员如何修复系统。

现在的问题是:为了恢复sshsudofunction,哪些重要的文件和目录需要恢复权限?

请注意“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,它把另一个文件作为模板,并且使得参数在权限上是匹配的。

这样你只能恢复旧的烫发而不改变文件的内容。