Sudoers NOPASSWD для одного исполняемого файла, но позволяет другим

2291
Yaroslav Mytkalyk

Операционная система: Arch Linux

Версия для Linux: 4.16.11

Судо версия: 1.8.23

Что мне нужно :

  • быть в состоянии выполнить any executableс sudoподсказкой пароля
  • быть в состоянии выполнить один исполняемый файл /home/username/script.sh, без запроса пароля.

Когда я настраиваю вот так

username ALL=(ALL) NOPASSWD: /home/username/script.sh 

У меня есть желаемый эффект на script.sh, но я не могу выполнить любой другой executableс sudo.

пример

$ sudo ./script.sh # runs fine! 

Попытка чего-то другого

$ sudo nano /etc/sudoers [sudo] password for username:  Sorry, user username is not allowed to execute '/usr/bin/nano  /etc/sudoers' as root on hostname. 

Кажется, это результат замены ALLс NOPASSWD, и, кажется, мне нужно другое. Если sudoersфайл предназначен ALLдля пользователя, я могу выполнить все, что захочу, с запросом пароля

username ALL=(ALL) ALL 

Я пытался объединить ВСЕ и NOPASSWD, но безрезультатно

username ALL=(ALL) ALL, NOPASSWD: /home/username/script.sh 

Таким образом, он запрашивает пароль для script.sh.

Могу ли я иметь оба?

5
Обратите внимание, что если у пользователя есть права на запись в файл, он может легко обойти проверку пароля, отредактировав его. Параметры `NOPASSWD` должны использоваться для исполняемых файлов, которые не могут быть изменены пользователями, например, скажем,` ifconfig` для сетевого администратора. NieDzejkob 5 лет назад 1

2 ответа на вопрос

14
Kamil Maciorowski

man 5 sudoers говорит (раздел «Формат файла Sudoers»):

Когда для пользователя совпадают несколько записей, они применяются по порядку. При наличии нескольких совпадений используется последнее совпадение (которое не обязательно является наиболее конкретным совпадением).

Таким образом, вы должны иметь эти строки именно в таком порядке:

username ALL=(ALL) ALL username ALL=(ALL) NOPASSWD: /home/username/script.sh 

и любая строка, которая также соответствует (например, например %sudo ALL=(ALL:ALL) ALL), должна быть перед NOPASSWDстрокой.

3
Attie

Вы часто найдете такую ​​строку в /etc/sudoers:

# Allow members of group sudo to execute any command %wheel ALL=(ALL:ALL) ALL 

Это позволит любому пользователю, входящему в группу « wheel », использовать sudoподходящее подтверждение личности (например, свой пароль). Номинируемая группа также может быть « sudo », « admin » или другими ... (например, строка начинается с %sudo)

Если это присутствует в файле, запустите, idчтобы увидеть, в каких группах вы находитесь:

$ id uid=1000(attie) gid=1000(attie) groups=1000(attie),27(sudo),117(docker) 

Если ваш пользователь не входит в соответствующую группу, вы должны добавить его в эту группу.


Альтернативой может быть перечисление обоих ваших правил один за другим с последним вступившим в силу правилом соответствия (т. Е. Порядок важен):

username ALL=(ALL) ALL username ALL=(ALL) NOPASSWD: /home/username/script.sh 

Смотрите страницу ArchWiki на sudo: https://wiki.archlinux.org/index.php/sudo#Example_entries

Спасибо. Хотя вы ответили первыми, Камиль был первым, кто дал ответ, который мне больше подходит, поэтому принят ответ Камил. Yaroslav Mytkalyk 5 лет назад 1

Похожие вопросы