2015-10-30 4 views
0

Я поддерживаю сценарий bash, который выполняет системную проверку на любом из наших серверов, на которых я запускаю. В рамках этой проверки, мне нужно, чтобы убедиться, что пользователь с именем monapp может выполнять некоторые команды:Есть ли команда, которую я могу запустить как пользователь без полномочий root, чтобы узнать, может ли пользователь выполнить определенную команду sudo.

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

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

...

Однако, мне нужно, чтобы быть в состоянии запустить это как пользователь, который не имеет доступа к файлу sudoers. Мне также нужно выяснить, может ли пользователь запускать эти команды без их выполнения и разбора вывода (т. Е. Я бы не захотел перезапустить apache в связке систем, чтобы проверить, может ли monapp перезапустить его).

Все решения, которые я исследовал, не соответствуют вышеуказанным требованиям, поэтому я немного потерян. Кто-то может помочь?

+0

Можете ли вы просто попытаться выполнить команду и справиться с потенциальными отказами? –

+0

Нет, это не соответствует требованиям, перечисленным выше. Я не хочу перезапускать Apache, например, просто посмотреть, может ли пользователь ... – foxygen

+0

Без каких-либо фактов, чтобы поддержать это как таковое, я был бы очень удивлен, если бы это было возможно, потому что вы действительно не хотели бы позволять такого рода перечисление команд «sudo-access» для пользователей. –

ответ

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 
0
sudo -u theuser bash -c '[ -x /etc/rc.d/init.d/httpd ] && echo "OK" || echo "NOT"' 

-x

проверить, если файл имеет разрешение на выполнение (для пользователя, выполняющего тест)

Затем запустите эту команду в качестве целевого пользователя (theuser)

Смежные вопросы