5

Операционная система: 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 .

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

2 ответа2

14

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

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

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

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

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

3

Вы часто будете находить такую строку в /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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .