如何从Bash脚本(以root或超级用户/ sudo运行)检查sudoers文件,如果用户可以SUDO

时间:2019-04-22 21:55:58

标签: bash

我需要从bash脚本(以root特权运行)中检查另一个用户是否有问题,可以通过sudoers中的“ username ALL =(ALL)NOPASSWD:ALL”将sudo作为可授权权限执行。

从有问题的用户运行的

简单命令可以轻松返回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 <<EOF
whoami
CAN_I_RUN_SUDO="$(sudo -n uptime 2>&1|grep 'load'|wc -l)"
echo "$CAN_I_RUN_SUDO"
EOF
if [ ${CAN_I_RUN_SUDO} -gt 0 ]
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."
    sh -c "echo \"username ALL=(ALL) NOPASSWD: ALL\" >> /etc/sudoers"
fi

但是,当我将$ CAN_I_RUN_SUDO作为脚本运行时,它总是返回(而不是0或1)。 :-(因此条件总是失败。

我显然错过了一些东西,但看不到。你能帮我吗?

1 个答案:

答案 0 :(得分:1)

您可以仅检查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文件中。