用户可以使用“sudo sudo su -”成为root

Kum*_*ohn 0 linux sudo bash ubuntu centos-7

我在 sudoers 文件中授予了以下权限。

Cmnd_Alias      SUROOT=/bin/su "",\
                       /bin/su -,\
                       /bin/su - root,\
                       /bin/su root,\
                       /usr/bin/su "",\
                       /usr/bin/su -,\
                       /usr/bin/su - root,\
                       /usr/bin/su root
kj ALL = (ALL) ALL, !SUROOT
Run Code Online (Sandbox Code Playgroud)

当我尝试访问sudo su -其被阻止时

kj@u1804-1:~$ sudo su -
[sudo] password for kj:
Sorry, user kj is not allowed to execute '/bin/su -' as root on u1804-1.
Run Code Online (Sandbox Code Playgroud)

但是当我尝试访问sudo sudo su -它时允许。

kj@u1804-1:~$ sudo sudo su -
[sudo] password for kj:
root@u1804-1:~#
Run Code Online (Sandbox Code Playgroud)

我需要阻止对 root 用户的访问如何阻止sudo sudo命令

use*_*686 10

您无法通过阻止单个命令来实现此目的。人们可以使用数十个(如果不是数百个)命令来成为 root 用户sudo

sudo -s
sudo -i
sudo bash
sudo env su
sudo /bin/sh
sudo env sudo
sudo busybox sh
sudo unshare
sudo chroot /
sudo systemd-run --shell
sudo nvim -c ":terminal"
sudo perl -e 'exec("bash")'
sudo git -c protocol.ext.allow=always ls-remote ext::"bash -c sh<&2>&2"
Run Code Online (Sandbox Code Playgroud)

他们可以重命名被阻止的命令:

sudo cp -a /sbin/su /sbin/really-not-su && sudo really-not-su
Run Code Online (Sandbox Code Playgroud)

他们可以简单地更改您设置的规则:

sudo nano /etc/sudoers
Run Code Online (Sandbox Code Playgroud)

希望已经说明了这一点 - 如果您授予人们 root 访问权限,那么您就是在授予他们 root 访问权限。唯一的选择是拥有一个允许的命令列表并阻止其他所有命令——即便如此,其中一半的命令仍将有办法获得完全的 root 访问权限。

(AppArmor 或 SELinux 可能会有所帮助。)