我需要从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)。 :-(因此条件总是失败。
我显然错过了一些东西,但看不到。你能帮我吗?
答案 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文件中。