我正在关注gentoo安装指南。但我坚持在更新世界集部分原因是我无法使用 emerge 安装 dbus。它无法更改其二进制文件的 SUID 权限,日志输出如下:
chmod 4750 /var/tmp/portage/sys-apps/dbus-1.10.18/image//usr/libexec/dbus-daemon-launch-helper;
...
chmod: changing permissions of '/var/tmp/portage/sys-apps/dbus-1.10.18/image//usr/libexec/dbus-daemon-launch-helper': Permission denied
例如:
我以 root 用户身份挂载文件系统:
mount /dev/sdb3 /mnt/gentoo
之后我 chroot 到它(也是 root 用户):
chroot /mnt/gentoo /bin/bash
source /etc/profile
并创建一个文件并尝试更改其权限
touch /hello
chmood 4750 /hello
没有说“权限被拒绝”。
然而,chmod 4750 /mnt/gentoo/hello
从外部来看,文件系统工作正常。
为什么许可被拒绝?我也尝试过安装,-o suid
但似乎也不起作用。
那么如何chmod 4750
在不同的文件系统上工作呢?
更新: 当我在我的 linux mint 上做同样的事情时,它就可以工作了。从 gentoo livecd 失败。
答案1
您使用的 Gentoo livecd 可能正在引导强化的内核。如果是这样,您就会遇到强化内核施加的限制,这些限制会缩短从chroot
环境内访问和修改内容的时间。我想到了 Setuid、GRUB 和 EFI。四位数表示法中的第一个数字 4chmod 4750
指的是设置 setuid 位。该错误消息报告尝试被拒绝,因为它具有安全隐患。在三位数表示法中chmod 750
设置这些权限是有效的,因为不涉及 setuid。
这个答案归功于 toralf、Hu 和 gengreen 在一次密切相关的讨论中的回答在 gentoo 论坛上。
那么按照以下步骤您可能会发现有用:
检查当前运行的内核是否是“hardenend”,通常
uname -r
会返回一个字符串4.8.17-hardened-r2
或类似的内容。# uname -r 4.8.17-hardened-r2
检查你的内核配置是否允许 sysctl 本地配置,执行
# zgrep GRKERNSEC_SYSCTL /proc/config.gz
- 这样的结果就可以了:CONFIG_GRKERNSEC_SYSCTL=y CONFIG_GRKERNSEC_SYSCTL_ON=y
请务必在实际 chroot 环境之外执行此操作以及下一步。添加几行
/etc/sysctl.conf
- 考虑到您可能处于临时 chroot 环境中,无论如何这似乎没问题,如果不将这些添加到/etc/sysctl.d/local.conf
:kernel.grsecurity.chroot_deny_chmod = 0 kernel.grsecurity.chroot_caps = 0 kernel.grsecurity.chroot_deny_mount = 0
最后一步,你运行
# sysctl -p
这些更改;它将重复步骤 3 中配置中设置的任何规则:# sysctl -p net.ipv4.ip_forward = 0 kernel.grsecurity.chroot_deny_chmod = 0 kernel.grsecurity.chroot_caps = 0 kernel.grsecurity.chroot_deny_mount = 0
然后,再次跳入 chroot 环境(screen -x
如果您像我一样,则通过)并发现emerge
需要使用 SUID 更改权限可以正常工作。
(顺便说一句,由于补丁可用性有限,Gentoo 停止提供这些内容,请参阅LWN.net 上的文章。因此,那些配备 GUI 的现场环境需要谨慎使用,而且从来都不是一刀切的。)
答案2
听起来好像mount
正在采用主机环境(livecd)的不可写状态。mount
使用以下内容显式指定读/写:
mount -o rw /dev/sdb3 /mnt/gentoo
一定要先做到umount
这一点。