我可以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
条目,定义允许的内容并仅授予对那些允许的命令的访问权限。