我不小心通过命令更改了“/usr/bin”目录及其文件的权限:
$chmod 775 /usr/bin -R
首先,sudo 有问题,但我修复了它。现在我怀疑某些程序可能因为更改了权限而无法运行。
我想知道是否可以撤销之前的许可?
我正在使用 Debian/测试。
答案1
幸运的是,这些权限并不是完全破坏性的,但没有“撤消”。
如果您无法从备份恢复并且尚未从源代码安装任何内容,/usr/bin
则可以使用包管理器来恢复正确的权限:
对于基于 RPM 的发行版(Red Hat Enterprise Linux、Fedora、CentOS 等),这样做相当简单:
rpm -a --setperms
对于基于 dpkg 的发行版(例如 Debian 和 Ubuntu),它会出现稍微不那么琐碎...
答案2
中的大多数程序/usr/bin
应具有权限 755 — 所有人都可读和可执行,只有其所有者(即 root)可写。几个程序是setuid 或 setgid:他们有额外的权限,这些权限是由权限中的 setuid 或 setgid 位授予的。/usr/bin/sudo
是其中之一;它需要 setuid root:chmod 4755 /usr/bin/sudo
恢复它。
如果您只有 Debian 的官方软件包(而不是从 Debian 或其他来源派生的发行版中的软件包),那么您可以通过查看哪些软件包包含 setuid/setgid 二进制文件林田报告:设置用户标识,设置gid,两个都。原则上,所有这些包都应该附带一个/usr/share/lintian/overrides
声明 setxid 二进制文件的文件(这些页面上的标签“overridden”表明存在这样的声明),但有些包不符合要求(包括无处不在的包,例如at
和xserver-xorg
) 。
以下脚本打印出一个 shell 脚本,该脚本执行chmod
命令以将文件恢复/usr/bin
为其默认权限(如果文件的默认权限包括 setuid 或 setgid 位)。
wget -q -O - https://lintian.debian.org/tags/set{uid,gid,uid-gid}-binary.html |
sed -n 's~^.*> *\(usr/bin/[^ ]*\) \([0-7][0-7][0-7][0-7]\).*~[ -e /\1 ] \&\& chmod \2 /\1~p'
另外,一些权限可以在本地配置。这些权限已注册`dpkg-stat 覆盖。您可以列出它们
dpkg-statoverride --list '/usr/bin/*'
您可以使用以下命令重新应用这些权限
dpkg-statoverride --list '/usr/bin/*' |
awk 'system("chmod " $3 " " $4)'
如果您的软件包不是来自 Debian,确保获得正确权限的唯一方法是使用.apt-get --reinstall install PACKAGE-NAME