`/ etc / sudoers` - вкажіть` env_keep` лише для однієї команди?


23

Чи є спосіб вказати, який sudoповинен зберігати певні змінні середовища лише для вказаних команд? Для якихось цілей я хотів би моє $HOMEоточення. змінна зберігається, коли я запускаю певні команди. Для інших цілей та інших команд я хочу її скинути. Це можна зробити /etc/sudoers?

Редагувати:

Дякую за відповіді. Цікаво, чи можу я задати наступне запитання, яке "Чому тоді це не працює?"

У прикладі, який я намагаюся працювати, я хочу sudo nanoпрочитати своє $HOME/.nanorc. Якщо я використовую це:

Defaults:simon env_keep=HOME

він працює чудово. Якщо я використовую це:

Defaults!/bin/nano env_keep=HOME

або це:

Cmnd_Alias      NANO = /usr/bin/nano,/bin/nano,/bin/rnano
Defaults!NANO   env_keep=HOME

це зовсім не працює. Будь-які пропозиції, чому? (Я на тестуванні Debian, btw.)

(Примітка: Я не думаю , що це nanoспецифічне, до речі - я можу відтворити поведінку з Баш скрипт на один рядок , яка просто echoS $HOME).


1
Замість того, щоб намагатися змусити нано пройти через sudo, щоб використовувати той самий конфігураційний файл, використовуйте sudoeditзамість цього. sudoeditзапустить копіювати вміст файлу у файл tmp та запустить редактор на ваш вибір як ваш користувач, коли редактор вийде, він перевірить, чи ви щось змінили, і якщо так замінить оригінал на відредагований. Ви можете вибрати редактор, який ви хочете, щоб він працював, встановивши $EDITORenv vars або $ VISUAL`.
Arrowmaster

@Arrowmaster - дякую, це здається кращим підходом, ніж той, з ким я возився. Оскільки я вже закінчую sudoфункцію, я просто додав if [ "$1" == "$EDITOR" ]; thenблок і зараз телефоную sudoedit:)
simon

Відповіді:


21

Щоб перекрити env_keepлише для /path/to/command(якщо викликається будь-яким правилом, будь-яким користувачем) та для користувача joe(незалежно від того, яку команду він виконує):

Defaults!/path/to/command env_keep=HOME
Defaults:joe env_keep=HOME

Ви можете використовувати -=або +=видалити або додати запис до env_keepсписку.


блискучий, дякую. Я не зміг знайти належного прикладу цього синтаксису. Тепер, коли ви мені це прописали, я бачу, як я мав би це розробити зі manсторінки, і я почуваюся трохи нерозумно. Без сумніву, ця відповідь допоможе і іншим.
симон

1
@simon: Не відчувайте себе нерозумним, я теж вважаю, що опис синтаксису на sudoersсторінці man важко розробити з формального опису та прикладів легше знайти, якщо ви вже знаєте, як їх написати.
Жил "ТАК - перестань бути злим"

хм - можливо, я з нею скоро поговорив. Тепер, коли я спробую це, я не можу насправді змусити його працювати. Чи можу я змусити вас поглянути на мою редакцію?
симон

1
@simon: Я гадаю, що у вас також є запис, який дозволяє робити все, і це env_keepналаштування не має ( simon ALL = ALL). Судо використовує останній відповідні записи.
Жил 'ТАК - перестань бути злим'

Остерігайтеся, якщо встановлено secure_path, вам доведеться також додати значення за замовчуванням: joe! Secure_path
Jistanidiot

6
Cmnd_Alias      PBUILDER = /usr/sbin/pbuilder,/usr/sbin/cowbuilder
Defaults!PBUILDER       env_keep+=HOME

Ці рядки - це моє власне, /etc/sudoersщоб виправити проблему, яка pbuilderшукає $HOMEйого конфігураційний файл користувача, але він повинен бути запущений як root (переміщення його до /rootсвого роду перемагає мету мати системний і користувацький файл конфігурації).


так, це дуже схожий випадок використання з тим, що я мав на увазі, дякую!
симон

чи маєте ви ідею, чому приклади моєї редакції, здається, не працюють?
симон

@simon sudo дуже вибагливий щодо порядку записів у своєму конфігурації, пізніші записи замінять попередні. У вашому конфігурації може виникнути такий конфлікт.
Arrowmaster

1

чоловічі судори:

   env_reset       If set, sudo will reset the environment to only contain
                   the LOGNAME, SHELL, USER, USERNAME and the SUDO_*
                   variables.  Any variables in the caller’s environment
                   that match the env_keep and env_check lists are then
                   added.  The default contents of the env_keep and
                   env_check lists are displayed when sudo is run by root
                   with the -V option.  If the secure_path option is set,
                   its value will be used for the PATH environment
                   variable.  This flag is on by default.

Тому так, ви можете зробити це з допомогою env_reset, env_keepі env_checkв файлі / і т.д. / sudoers.

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