这是一个脚本:
#!/bin/bash
user='my_sudo_user'
sudo -lU $user
我试图限制我non_sudo_user
运行这个脚本的能力。使用visudo
,我尝试过:
non_sudo_user ALL=(ALL) NOPASSWD: /bin/bash /full/path/script.sh
non_sudo_user ALL=(ALL) NOPASSWD: /usr/bin/sudo -lU
non_sudo_user ALL=(ALL) NOPASSWD: /usr/bin/sudo -lU * # unsafe
它们都不起作用。我收到这条消息:
Sorry, user non_sudo_user is not allowed to execute 'list' as my_sudo_user on host123.
但我在sudoer
文件中提供了 -l 。
我能做什么?顺便说一下,这是 Ubuntu。
编辑:
我实际上运行这个脚本:
for u in $(awk -F'[/:]' '{if($3>=1000&&$3!=65534) print $1}' /etc/passwd); do sudo -lU $u ; done
所以我事先没有明确的用户名单。
答案1
编辑: OP 提供更多信息后完成重写。
在 /etc/sudoers 中指定用户具有执行权限/usr/sbin/sudo
。
这将允许他们执行 sudo 命令,但他们无权运行任何其他命令。
我刚刚在 CentOS-7.3.1611 上使用全新的用户帐户进行了测试:
testusr ALL=(ALL) NOPASSWD: /usr/sbin/sudo
我不知道在允许的命令列表中指定 sudo 命令本身是否有任何安全隐患 在生产环境中依赖它之前,请先检查和测试...它可能不安全。
答案2
我认为只有当您可以作为(全部)该用户运行任意命令时,您才能列出其他用户可以运行的命令。所以与其...
在 sudoers 中:
non_sudo_user ALL=(ALL) NOPASSWD: /usr/bin/sudo -l
并列出它们,运行为non_sudo_user
:
for target_user in user1 user2 user3... ; do
sudo -u "$target_user" sudo -l
done