Linux内核支持可执行二进制文件的setuid、setgid权限。
是否可以构建一个没有这些功能的内核?
如果没有这些,管理员就是唯一可以篡改系统的用户。
答案1
可能可以从内核中删除此功能,也可以使用该nosuid
选项挂载没有 suid 的文件系统。我觉得这更简单,而且可以达到相同的效果。
但它打破了很多/usr/
功能。这是Ubuntu 18.04 上 setuid 的 `/bin/中的命令列表:
$ find /usr /bin -perm -4000
/usr/bin/pkexec
/usr/bin/gpasswd
/usr/bin/traceroute6.iputils
/usr/bin/newgrp
/usr/bin/arping
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/passwd
/usr/bin/sudo
/usr/lib/xorg/Xorg.wrap
/usr/lib/eject/dmcrypt-get-device
/usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0
/usr/lib/s-nail/s-nail-privsep
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/openssh/ssh-keysign
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/sbin/pppd
/bin/ping
/bin/mount
/bin/umount
/bin/su
/bin/fusermount
用户将无法再更改自己的密码。他们将无法挂载 USB 设备。他们将无法提升权限。他们将无法 ping 删除主机。可能还会有更多意想不到的后果。
简而言之,如果您的目标是保护您的系统,那么您可能选错了三个。更好的方法可能是研究 AppArmomur 或 SELinux,它们试图以比标准 Linux 内核更严格的方式强制执行用户权限。但它的代价是:增加了复杂性。
如果你对原生 Ubuntu 系统执行此操作,你可能会看到各种有趣的行为。