Мне нужно разрешить конкретную команду в Debian Linux для одного пользователя. Я пробовал это в /etc/sudoers
файл:
# User privilege specification
zabbix ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'
Это не работает должным образом. Если я запускаю команду от имени пользователя zabbix с sudo, она запрашивает пароль (хотя я указал NOPASSWD
вариант).
Однако это работает:
# User privilege specification
zabbix ALL=NOPASSWD: /usr/bin/apt-get
Но есть недостаток в том, что все подкоманды apt-get
разрешены. Есть ли способ исправить это, чтобы разрешить только определенную команду?
Вы, вероятно, не согласны с тем, как перенаправление взаимодействует с sudo. Перенаправление выполняется для вызывающего пользователя, а не для привилегированного пользователя. Вероятно, вам будет проще обернуть команду в скрипт, а затем позволить пользователю zabbix запускать этот скрипт, например.
#!/bin/bash
/usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'
набор sudoers как
zabbix ALL=NOPASSWD: /path/to/script
Теперь весь сценарий будет запускаться от имени привилегированного пользователя, а не только конкретная команда apt-get. Однако убедитесь, что пользователь zabbix не может писать в скрипт.
Я не согласен с ложью. Хотя это сработает, Вам не нужно awk
запускать как root. Мне было бы неудобно с этим, потому что вы могли бы атаковать awk
каким-то образом. В конце концов, это полноценный интерпретатор языка программирования.
Когда один бежит sudo /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'
, Они действительно работают sudo /usr/bin/apt-get --print-uris -qq -y upgrade
а затем подключение / перенаправление в качестве вызывающего пользователя.
Попробуй это: zabbix ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade
Между прочим, нет ничего плохого в том, чтобы поместить это в сценарий, как это делает lain, и вы все равно можете это сделать. Я бы просто избегал запускать awk с правами root, если это возможно.