Sudoers NOPASSWD для одного виконуваного файлу, але дозволяє іншим


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.

Чи можу я мати обоє?


1
Зауважте, що якщо у користувача є права на запис у файл, він може легко обійти перевірку пароля, відредагувавши його. Ці NOPASSWDпараметри повинні бути використані для виконуваних файлів , які не можуть бути змінені користувачами, як, скажімо , ifconfigдля мережевого адміністратора.
NieDzejkob

Відповіді:


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

Це дозволить будь-якому користувачеві, що входить до групи " колеса ", використовувати 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


1
Дякую. Хоча ти відповів першим, Каміль першим надіслав відповідь, яка мені більше підходить, тому прийнята відповідь - це Каміль.
Ярослав Миткалик
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.