通过创建软链接运行 sudo 受限命令

Cit*_*ght 3 security sudo

我可以sudo访问我们的一台测试机器,以下是对我限制的命令:

user_sree@sel8585:~> sudo -l
user_sree's password:
User user_sree may run the following commands on this host:
    (ALL) ALL, (ALL) !/bin/sh, !/bin/bash, !/bin/ksh, (ALL) !/bin/su, (ALL) !/usr/bin/passwd, !/usr/sbin/useradd, !/usr/sbin/userdel, !/usr/sbin/usermod,
    !/usr/sbin/visudo
Run Code Online (Sandbox Code Playgroud)

这说我不能运行visudo/usr/sbin/visudo. 我证实了这一点:

user_sree@sel8585:~> sudo /usr/sbin/visudo
Sorry, user user_sree is not allowed to execute '/usr/sbin/visudo' as root on sel8585.
Run Code Online (Sandbox Code Playgroud)

现在,出于好奇,我创建了一个符号链接/usr/sbin/visudo

ln -s /usr/sbin/visudo myvi`
Run Code Online (Sandbox Code Playgroud)

我尝试通过调用这个软链接来访问 sudoers 文件,它工作正常。

user_sree@sel8585:~> sudo /home/user_sree/myvi
myvi: /etc/sudoers.tmp unchanged
Run Code Online (Sandbox Code Playgroud)

同样,我能够通过创建软链接来运行其他受限制的命令。

如果我要sudo为他人配置,如何阻止他人这样做?我不想限制他们创建软链接。

user_sree@sel8585:~> sudo -l | grep bash
    (ALL) ALL, (ALL) !/bin/sh, !/bin/bash, !/bin/ksh, (ALL) !/bin/su, (ALL) !/usr/bin/passwd, !/usr/sbin/useradd, !/usr/sbin/userdel, !/usr/sbin/usermod,
Run Code Online (Sandbox Code Playgroud)

相似地:

user_sree@sel8585:~> sudo sh -c 'ls'
Sorry, user user_sree is not allowed to execute '/usr/bin/sh -c ls' as root on sel8585.
Run Code Online (Sandbox Code Playgroud)

现在使用mybash链接到/bin/bash: (在我的系统中/usr/bin/sh是一个链接到/bin/bash)

user_sree@sel8585:~> sudo /home/user_sree/mybash -c 'ls'
Run Code Online (Sandbox Code Playgroud)

bin mybash myvi sudoers.back test.pp

user_sree@sel8585:~> ll my*
lrwxrwxrwx 1 user_sree users  9 Jul 16 14:10 mybash -> /bin/bash
lrwxrwxrwx 1 user_sree users 16 Jul 16 14:13 myvi -> /usr/sbin/visudo
Run Code Online (Sandbox Code Playgroud)

PS:

Cmnd_Alias   NSHELLS = /bin/sh,/bin/bash,/bin/ksh
Cmnd_Alias   NSU = /bin/su
Cmnd_Alias   NCMDS = /usr/bin/passwd,/usr/sbin/useradd,/usr/sbin/userdel,/usr/sbin/usermod,/usr/sbin/visudo

user_sree ALL=(ALL) ALL, !NSHELLS, !NSU, !NCMDS
Run Code Online (Sandbox Code Playgroud)

以上是/etc/sudoers文件中的条目。

mjt*_*ner 11

老实说,如果您要允许用户运行除少数命令之外的所有内容,您将遇到问题。

例如,您不允许访问user*命令,但用户仍然可以运行vipw,甚至可以使用文本编辑器编辑密码和影子文件。如果您锁定vi对例如的访问权限,是什么阻止他们安装不同的文本编辑器并使用它?甚至使用cat或 shell 内置echo来添加新用户?

您永远无法sudo访问“除了这几个命令之外的所有内容”。相反,删除ALL条目,定义允许的内容并仅授予对那些允许命令的访问权限。