Sudoers NOPASSWD для одного исполняемого файла, но с разрешением остальных.

Вопрос или проблема

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

Версия Linux: 4.16.11

Версия Sudo: 1.8.23

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

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

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

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

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

Пример

$ sudo ./script.sh # работает отлично!

Попробуйте что-то другое

$ sudo nano /etc/sudoers
[sudo] пароль для username: 
Извините, пользователю username не разрешено выполнять '/usr/bin/nano 
/etc/sudoers' как root на hostname.

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

username ALL=(ALL) ALL

Я пытался комбинировать ALL и NOPASSWD, но без результатов

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

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

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

man 5 sudoers говорит:

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

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

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

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

Общая заметка: #include и #includedir позволяет sudoers включать другие файлы. Начиная с версии 1.9.1, рекомендуемые директивы — это @include и @includedir соответственно, но #include и #includedir все еще принимаются. Не позволяйте # вводить вас в заблуждение, это не комментарии. При поиске записей, которые могут мешать, не следует упускать из виду то, на что указывают #include и #includedir. Полезная опция: sudo -l.

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

# Разрешить членам группы sudo выполнять любые команды
%wheel   ALL=(ALL:ALL) ALL

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

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

$ id
uid=1000(attie) gid=1000(attie) группы=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

.

Ответ или решение

Настройка sudoers в Linux является важной задачей для управления разрешениями пользователей при выполнении команд с административными правами. Рассмотрим проблему, описанную вами, и как её решить, учитывая особенности работы sudoers.

Теория

Файл конфигурации sudoers определяет, какие пользователи могут выполнять какие команды от имени других пользователей, включая суперпользователя root. Этот файл использует формат с определёнными правилами синтаксиса и предоставляет возможность гибкого управления доступом на выполнение команд. Обычно, записи в файле sudoers записываются в формате:

<пользователь> <хост>=<(пользователь назначения)> <список команд>

Одним из полезных флагов в конфигурации является NOPASSWD, который позволяет выполнять указанные команды без запроса пароля. Однако, соблюдение порядка записи является ключевым, так как если несколько правил попадают под одну и ту же команду, применяется только последнее.

Пример

Для вашей ситуации вы хотите, чтобы пользователь мог:

  1. Выполнять любые команды с использованием sudo с запросом пароля.
  2. Выполнять определённый скрипт, а именно /home/username/script.sh, без запроса пароля.

Вы столкнулись с проблемой, что после добавления условия с NOPASSWD, выполнение других команд средней sudo стало невозможным. Ваша запись:

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

решает задачу выполнения script.sh без запроса пароля, но остальные команды sudo с паролем становятся недоступными. Причина в том, что запись NOPASSWD перезаписывает общий доступ на выполнение всех команд.

Приложение

Чтобы решить вашу задачу, необходимо скорректировать файл sudoers так, чтобы учитывать как общее разрешение на команды с запросом пароля, так и специфическое разрешение для выполнения скрипта без пароля. Используя знания о применении последнего правила, вы можете записать конфигурацию следующим образом:

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

Важный аспект — порядок размещения записей. Первая строка обеспечивает доступ на выполнение любых команд с запросом пароля, а вторая строка обеспечивает исключение для конкретного скрипта без запроса пароля, благодаря её размещению после первой.

Дополнительные моменты

  1. Проверьте включение в группы. Убедитесь, что ваша учётная запись включена в нужную группу, если это требуется для выполнения команд. Это можно сделать командой id, чтобы проверить директории и группы.

  2. Рассмотрите файлы и директории, загружаемые при помощи включений. Использование директив #include и #includedir в файле sudoers приводит к дополнительным файлам конфигурации, которые могут повлиять на окончательный результат. Проверьте все загружаемые файлы для исключения конфликта.

  3. Проверка конфигурации. Используйте команду sudo -l, чтобы проверить актуальные разрешения на выполнение команд. Это поможет увидеть, какое правило применяется в текущий момент.

  4. Аргенинская вики. Рекомендуется посмотреть также руководство на ArchWiki, где можно найти дополнительные примеры использования sudo и советы по конфигурированию.

Применяя данные рекомендации, вы сможете корректно настроить файл sudoers для достижения необходимого функционала. Это позволит вам поддерживать безопасность системы и в то же время обеспечить удобство использования через возможность выполнения определённых задач без постоянного ввода пароля.

Оцените материал
Добавить комментарий

Капча загружается...