我不知何故弄乱了 Ubuntu 22.04.2 LTS 系统(私人使用的计算机,而不是服务器)上许多文件的权限,这已经引起了一些问题。最近,我注意到我无法Users and Groups
通过 GUI 启动。
结果出现错误消息:
The configuration could not be loaded. An unknown error occurred.
通过调查,我发现当我将权限/usr/lib/dbus-1.0/dbus-daemon-launch-helper
从-rwsr-xr--
(4744)更改为-rwsr-xr-x
(4755)时,程序会再次运行。
我用于ls -l /usr/lib/dbus-1.0/dbus-daemon-launch-helper
调查权限和sudo chmod +x /usr/lib/dbus-1.0/dbus-daemon-launch-helper
更改权限。
这安全吗?如果没有,我有什么选择可以让程序再次运行?
答案1
帮助程序是可以期望具有改进的权限的工具,可以帮助用户或用户的进程使用某个功能,而无需直接执行该操作。因此,归还特权以恢复其功能也就不足为奇了。
然而。某些权限不需要 root(因此 setuid root)即可获得:能力,这些是完整 root 用户可以执行的操作的子集,有时就足够了,但是当所有权更改时,它们在文件上的标志将被删除。帮助器上的某些权限仅保留给访问权限有限的用户或进程子集。
后者就是这种情况/usr/lib/dbus-1.0/dbus-daemon-launch-helper
。
这后置脚本dbus
(提供此文件)更改其权限和所有权,如下所示:
MESSAGEUSER=messagebus
LAUNCHER=/usr/lib/dbus-1.0/dbus-daemon-launch-helper
(如果不存在,也会创建用户/组)
dpkg-statoverride --update --add root "$MESSAGEUSER" 4754 "$LAUNCHER"
将其使用限制为具有该组的进程,messagebus
而不是像当前OP的情况那样限制为任何进程。
因此,既然系统可以正常运行,最简单的方法就是重新安装dbus
软件包,以修复权限:
apt-get reinstall dbus
或者手动:
chown root:messagebus /usr/lib/dbus-1.0/dbus-daemon-launch-helper
chmod 4754 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
您可能必须检查所有其他受影响的文件,尤其是涉及辅助工具时。
有关包元数据文件的附加说明postinst
:
查找哪个包:
dpkg -S /usr/lib/dbus-1.0/dbus-daemon-launch-helper
应该回答:
dbus: /usr/lib/dbus-1.0/dbus-daemon-launch-helper
包的元数据在哪里?
对于 FOO 包,到目前为止,它们始终位于各种
/var/lib/dpkg/info/FOO.*
文件中(对于多架构包(通常是库),它们也可能包含:amd64
或提供任何其他架构/var/lib/dpkg/info/FOO:amd64.*
)。要检查的脚本
postinst
如下:/var/lib/dpkg/info/dbus.postinst
没有安装该软件包:
cd /tmp apt-get download dbus dpkg --raw-extract dbus_*.deb /tmp/somewhere less /tmp/somewhere/DEBIAN/postinst
这种文件通常是自动生成的,但dbus
它是在源中提供的。这是 Debian 存储库文件的链接(它甚至包括一些较旧的 Ubuntu 标签,无论如何它的内容大致相同):debian/dbus.postinst