如何在 etc 目录上恢复 chmod -R +x ?

如何在 etc 目录上恢复 chmod -R +x ?

我正在运行 Ubuntu 20.04.5 LTS,但我搞砸了chmod -R命令!

我在运行 chmod 时输错了目录,而不是chmod -R +x ./etc写了chmod -R +x /etc.

所以现在 /etc 中的所有内容以及每个子文件夹和文件都具有 +x 权限。

我能够通过从 /etc/ssh 中删除 x 权限来修复与服务器的 SSH 连接,到目前为止其他服务似乎运行良好,但迟早某些其他服务会因此而失败,我想防止那。知道该怎么做才能尽快修复它吗?

答案1

根据我的经验,最好的处理权限问题的方法是从备份重新安装。

至少,如果没有备份,我们可能只能对哪些文件应该具有哪些权限做出最好的猜测。

话虽这么说,在探索我的系统之后,我想我已经找到了一个非常好的最佳猜测,您可以使用它作为开始。

考虑使用当前权限对当前 /etc 进行备份,以防出现问题。

sudo cp -R /etc /etc.bak

首先,我将获取 /etc 下所有文件的列表

sudo find /etc -type f > allfiles.txt

我最好的猜测:任何带有“shebang”的东西都是可执行脚本,并且应该保持可执行状态

sudo find /etc -type f -exec grep --files-with-matches --binary-files=without-match '#!' {} + > shebang.txt

现在,我需要找到 /etc 中但不包含 shebang 的文件列表。我们可以通过运行来做到这一点

cat allfiles.txt shebang.txt | sort | uniq -u > nonexecutable.txt

此时进行完整性检查并查看每个文件中有多少行。

wc -l *.txt

就我而言,etc 中有大约 4000 个文件的列表,大约 125 个包含 shebangs,nonexecutable.txt 中有大约 3900 个文件

如果您对计数感到满意(如果没有备份进行比较,很难判断),您最终可以修改所有不可执行文件以删除可执行位。

cat allfiles.txt shebang.txt | sort | uniq -u | xargs -n1 chmod -x

xargs 获取不可执行文件的列表,将它们一一分解(使用标志-n1),并将每个文件传递给命令chmod -x


已知问题:

1. 我在 /etc 中有一个可执行文件没有被此方法捕获。由于某种原因,我的 /etc 中有一个可执行文件 returned 不包含 shebang。

在运行其他所有命令后,修复此问题的命令是

find /etc -iname 'resolved' -exec chmod +x {} +

但我无法判断您在权限更改之前可能拥有哪些其他可执行文件。

2.我不知道如何修复目录权限。有些目录不是世界可读的,并且不应该具有可执行位。希望这些目录下的敏感文件已禁用读取权限。

3. shebang 搜索不会捕获二进制可执行文件。我在 /etc 目录中没有看到任何二进制可执行文件,因此这可能风险较低。

4. 我的系统上有几个带有 shebangs 的文件无法执行。这包括几个 ufw .init 脚本。


以下是我发现的一些可执行文件的概述。我想这些都是在寻找shebang时发现的。

  • /etc/init.d 下的所有文件
  • /etc/kernel 下的所有文件
  • /etc/update-motd.d 下的所有文件
  • /etc/pm/sleep.d下的所有文件
  • /etc/grub.d 下的大多数文件(README 除外)
  • /etc/cron.* 下的大多数文件(cron.d 目录除外)
  • /etc/console-setup/*.sh
  • /etc/X11/Xsession
  • /etc/X11/Xreset

答案2

如果备份(或快照)可用,我会从中恢复。如果由于某种原因检查点不可用,那么您可以尝试以下操作

$ aptitude --reinstall install '~i'

这将重新安装已安装的软件包并将其权限重置为默认值。

答案3

没有办法恢复chmod或为了争论,任何其他命令,因为没有保存所做的一切记录。人们能做的最好的事情就是“跟踪 chmod 命令并将其附加到一个文件中,并查找每个目录、文件以及受该命令影响的任何其他内容的先前和当前模式,但可能有大约七个人在世界上谁愿意经历这种单调乏味。

在这种情况下,最好的办法是从备份中恢复,并且假设备份存在。如果没有,最好重新安装操作系统。人们可以从 Live CD 或 Live USB 复制所有内容,但这只会影响上述媒体上的内容,而不会考虑安装后所做的更改。可以研究现有所有内容的权限并将其设置为正常状态,但重新安装操作系统和其他包含数据的软件所花费的时间/etc比前者要少得多。任何其他方法都需要大量猜测,由于我给出的原因,这是不可行的。

答案4

如果服务器不是公共服务器,我认为最好复制你的数据“备份”并重新安装Ubuntu。否则你可以尝试使用一些命令来纠正权限。但我永远不会像以前那样了。 root 用户应该是数据的所有者,并且由于众所周知,服务器上的大多数文件应具有 644 权限,而目录应具有 755 权限,因此我建议按照 ubuntu wiki 中的讨论进行以下操作:

$ sudo su
______________
chown -R root:root /etc    # this will chnage the owner to root
__________________
find /etc -type f -exec chmod 644 {} +    # this will search all exec files and change the permisson to 644

______________________
find /etc -type d -exec chmod 755 {} +      # this will search all exec dirs and change the permisson to 755
__________________
chmod 755 /etc/init.d/* /etc/rc.local /etc/network/* /etc/cron.*/*
_____________________
chmod 400 /etc/ssh/ssh*key

相关内容