如何从Bash脚本(以root或超级用户/sudo身份运行)检查sudoers文件,以确定用户是否可以sudo

如何从Bash脚本(以root或超级用户/sudo身份运行)检查sudoers文件,以确定用户是否可以sudo,bash,Bash,我需要从bash脚本(使用根权限运行)中检查是否有其他用户有疑问,是否可以通过sudoers中的“username ALL=(ALL)NOPASSWD:ALL”将sudo作为dedicate权限执行 从相关用户运行的简单命令很容易返回1或0: sudo -n uptime 2>&1|grep 'load'|wc -l 但是,如果我在脚本中更改用户,它总是返回为空: sudo -i -u username bash <<EOF CAN_I_RUN_SUDO="$(sud

我需要从bash脚本(使用根权限运行)中检查是否有其他用户有疑问,是否可以通过sudoers中的“username ALL=(ALL)NOPASSWD:ALL”将sudo作为dedicate权限执行

从相关用户运行的简单命令很容易返回1或0:

sudo -n uptime 2>&1|grep 'load'|wc -l
但是,如果我在脚本中更改用户,它总是返回为

sudo -i -u username bash <<EOF
CAN_I_RUN_SUDO="$(sudo -n uptime 2>&1|grep 'load'|wc -l)"
echo "$CAN_I_RUN_SUDO"
whoami
EOF

sudo-i-u username bash您可以只检查
sudo
的返回值,而不是对输出进行grepping:

if sudo -i -u username sudo -n uptime 2>&1; then
    echo "I can run the Sudo command. No need to change sudoers"
else
    echo "I can't run the Sudo command. Added to Sudoers."
    echo "username ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
fi

如果可以的话,我的无关安全建议是避免自动将用户添加到sudoers文件。

谢谢,但是您的示例有语法错误。它执行以下操作:sudo:update:command未找到我无法运行sudo命令。添加到Sudoers。sh:1:语法错误:“(“意外…另外命令'sudo-i-u username sudo-n update 2>&1'作为独立运行也无法通过“sudo:update:command not found”运行”.Ubuntu 18.04最新更新…@uzla,对不起,应该是
正常运行时间
,而不是
更新
。关于语法错误,我认为错误来自您自己的问题,因为我复制粘贴了那行,现在我看到它缺少一个引号。事实上,它可能没有缺少一个引号。我不清楚您为什么要传递它h
sh
。只需使用
echo“username ALL=(ALL)NOPASSWD:ALL”>/etc/sudoers
而不使用
sh-c
if sudo -i -u username sudo -n uptime 2>&1; then
    echo "I can run the Sudo command. No need to change sudoers"
else
    echo "I can't run the Sudo command. Added to Sudoers."
    echo "username ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
fi