Проходження ПАТХ через судо


13

Коротше кажучи : як зробити так, щоб судо не змивало PATH кожного разу?

У мене на веб-сервері розгорнуті деякі веб-сайти (тестування Debian), написані Ruby on Rails. Я використовую Mongrel + Nginx для їх розміщення, але є одна проблема, яка виникає, коли мені потрібно перезапустити Mongrel (наприклад, після внесення деяких змін).

Усі сайти перевіряються в VCS (git, але це не важливо), і власник і група встановлені моєму користувачеві, тоді як Mongrel працює під користувачем, так, монгрель, який сильно обмежений у своїх правах. Отже, Mongrel потрібно запускати під root (він може автоматично змінювати UID) або mongrel.

Для управління mongrel я використовую gem mongrel_cluster, оскільки він дозволяє запускати або зупиняти будь-яку кількість серверів Mongrel лише однією командою. Але йому потрібен каталог /var/lib/gems/1.8/bin, щоб він був у PATH: цього недостатньо, щоб почати його з абсолютного шляху .

Змінення PATH в root .bashrc нічого не змінило, налаштування env_reset sudo та env_keep також не змінилося.

Отже, питання: як додати каталог до PATH або зберегти PATH користувача у sudo?

Оновлення: кілька прикладів

$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ sudo cat /etc/sudoers | egrep -v '^$|^#'
Defaults    env_keep = "PATH"
root    ALL=(ALL) ALL
%sudo ALL=NOPASSWD: ALL
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

Також можу сказати, що він працює саме так і в стабільній (lenny) Debian.


Відповіді:


12

Кілька годин боролися з тією ж проблемою. У debian lenny ви можете це виправити, додавши

Defaults        exempt_group=<your group> 

до файлу судорів.

Це єдиний спосіб обійти компільований варіант - безпечний шлях (наскільки я знаю).

Зокрема, це також звільнить користувачів від необхідності вводити свій пароль, коли вони судо.


3

Якщо ви secure_pathвстановите в /etc/sudoers, ви можете грати з env_reset/ env_keepвсе , що вам подобається , і це не буде мати ніякого значення в дорозі. Якщо ви бачите щось подібне, прокоментуйте це.

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Ні, звичайно, це не було встановлено.
whitequark

0

Я б сказав, перегляньте параметри env_reset та env_keep у man sudo . Але це здається, що ви вже це зробили (ви просто помилково називаєте env_keep "keepenv"). Якщо ви відключите опцію env_reset (за умовчанням увімкнено), я думаю, що не слід видаляти жодні змінні env. Але це менш безпечно.

Також є параметр secure_path to sudo; Я думаю, що це включено за замовчуванням. Ви можете спробувати відключити його.

Попередні параметри встановлюються у вашому файлі / etc / sudoers. Існує також -iваріант командного рядка sudo. Це призведе до запуску / suot /.profile або /root/.login. Ви можете там встановити бажаний шлях.


1
Ні, коли env_reset вимкнено, він все ще змінюється (не стирається) PATH. Можливо, це зроблено для додання / * / sbin dirs. Ні, параметр -i не підходить, оскільки він запускає інтерактивну оболонку, і мені потрібно лише виконати команду.
whitequark

Гаразд, проблема зникла після перевстановлення Debian (через перехід на LVM), а також RubyGems; Ваша відповідь була найкориснішою з усіх, тому її можна прийняти і зараз.
whitequark

-1

Що ж, ти робиш щось не так. Крім того, ви не вказали, що ви робили з вашим файлом / etc / sudoers. Ось що ви повинні зробити - це система CentOS, BTW:

По-перше, це з правильним налаштуванням env_keep (зауважте, PATH знаходиться там):

Sudo Grep -5 ШЛЯХ / і т.д. / sudoers за замовчуванням env_keep = "дисплей квітів HOSTNAME HISTSIZE INPUTRC KDEDIR \ LS_COLORS MAIL PS1 PS2 QTDIR ім'я користувача \ LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY lc_name LC_NUMERIC \ LC_PAPER LC_TELEPHONE LC_TIME LC_ALL МОВУ LINGUAS \ _XKB_CHARSET XAUTHORITY PATH"

Defaults   timestamp_timeout = 15 

## Next comes the main part: which users can run what software on 
## which machines (the sudoers file can be shared between multiple

-> export PATH=$PATH:hithere
-> sudo sh -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/bin:hithere

Виглядає чудово. Тепер видалимо налаштування env_keep і спробуємо ще раз:

-> sudo visudo
-> sudo grep -5 PATH /etc/sudoers
                    LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                    LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                    LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                    _XKB_CHARSET XAUTHORITY"
 #_XKB_CHARSET XAUTHORITY PATH"

Яка сумна ПАТА:

 -> sudo sh -c 'echo $PATH'
 /usr/bin:/bin

1
Я перевірив це БІЛЬШЕ ніж двічі! Перевірте оновлення в пості.
whitequark

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