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

通过创建软链接运行 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

这表示我无法运行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.

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

ln -s /usr/sbin/visudo myvi`

我尝试通过调用此软链接来访问 sudoers 文件,效果很好。

user_sree@sel8585:~> sudo /home/user_sree/myvi
myvi: /etc/sudoers.tmp unchanged

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

如果我要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,

相似地:

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.

现在符号链接mybash链接到/bin/bash:(在我的系统中/usr/bin/sh是链接到/bin/bash

user_sree@sel8585:~> sudo /home/user_sree/mybash -c 'ls'

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

附:

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

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

答案1

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

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

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

相关内容