У меня есть цирк, установленный в python virtualenv с использованием virtualenvwrapper, и я хочу запустить его с помощью sudo. Звучит просто, правда? К сожалению, даже после прочтения man sudo
и man sudoers
, Мне не удается заставить PATH обычного пользователя придерживаться после sudo. Debian 7.8 (Wheezy).
Вот / etc / sudoers:
deploy@devops:~$ sudo cat /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
Defaults !env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
deploy ALL=(ALL) NOPASSWD:ALL
Вот ПУТЬ обычного пользователя:
deploy@devops:~$ echo $PATH
/home/deploy/.nix-profile/bin:/home/deploy/.nix-profile/sbin:/home/deploy/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Теперь давайте активируем virtualenv и проверим, что он изменил PATH:
deploy@devops:~$ workon circus
(circus)deploy@devops:/srv/circus/project$ echo $PATH
/home/deploy/.virtualenvs/circus/bin:/home/deploy/.nix-profile/bin:/home/deploy/.nix-profile/sbin:/home/deploy/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Отлично. Теперь посмотрим, какой путь получит корень:
(circus)deploy@devops:/srv/circus/project$ sudo su
root@devops:/srv/circus/project# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Что произошло? Почему используется secure_path? Я заменил env_reset восклицательным знаком. sudo -E
демонстрирует точно такое же поведение, и если я export FOO=bar
затем sudo su
и echo $FOO
, Я действительно получаю бар ...
Очень расстраивает и благодарен за любую помощь. Рад уточнить, если непонятно.
Понял, я уже пробовал sudo env "PATH=$PATH"
как упоминалось в комментарии @ william, но, к сожалению, я забыл выйти из редактора из visudo, поэтому я сохранил файл .tmp. румянец
Короче говоря, установка Defaults !env_reset
и используя sudo env "PATH=$PATH"
работает хорошо. Спасибо за комментарии.