是否有一个命令我可以作为非root用户运行,以查看用户是否可以运行某个sudo命令

时间:2015-10-30 15:51:33

标签: linux bash centos

我维护一个bash脚本,对我运行它的任何服务器执行系统检查。作为此检查的一部分,我需要确保名为monapp的用户可以执行某些命令:

sudo /etc/rc.d/init.d/httpd restart

sudo /etc/rc.d/init.d/mysqld restart

...

但是,我需要能够以无法访问sudoers文件的用户身份运行此操作。我还需要弄清楚用户是否可以在不执行它们的情况下运行这些命令并解析输出(即我不想在一堆系统上重启apache只是为了查看monapp是否可以重新启动它。)

我研究的所有解决方案都不符合上述要求,所以我有点迷失。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

sudo -u theuser bash -c '[ -x /etc/rc.d/init.d/httpd ] && echo "OK" || echo "NOT"'

-x

检查文件是否具有执行权限(对于运行测试的用户)

然后我们以目标用户(theuser)

运行此命令

答案 1 :(得分:0)

这是我最终需要的。希望这可以帮助将来的某个人。

sudolist="$(sudo -l)"

declare -a commands=("/etc/rc.d/init.d/mysqld stop" "/etc/rc.d/init.d/mysqld start" 
                     "/etc/rc.d/init.d/mysqld restart" "/etc/rc.d/init.d/httpd stop" 
                     "/etc/rc.d/init.d/httpd start" "/etc/rc.d/init.d/httpd restart"
                     "/etc/rc.d/init.d/memcached stop" "/etc/rc.d/init.d/memcached start" 
                     "/etc/rc.d/init.d/memcached restart")

for i in "${commands[@]}"
do

    if [ ! -z "$(echo $sudolist | grep "$i")" ]; then
        echo -e "\tPASS: user can run '$i'"
    else
        echo -e "\tFAIL: user cannot run '$i'"
    fi
done