Как сохранить *все* переменные окружения для определенной команды в sudo?

Как сохранить *все* переменные окружения для определенной команды в sudo?

У меня есть скрипт, который устанавливает несколько переменных среды, а затем, наконец, вызывает другой скрипт с помощью sudo.

Скрипт, запускаемый с помощью sudo, должен иметь возможность подхватывать эти переменные, и я не всегда могу быть уверен, что это за переменные.

Есть ли способ настроить эту запись sudoers, чтобы разрешить команде полный доступ к переменным окружения вызывающего?

%deploy ALL=NOPASSWD: /bin/build.sh

Когда я запускаю команду sudo из моего скрипта:

sudo -E build.sh "$@"

Я получил:

sudo: sorry, you are not allowed to preserve the environment

Погуглив, я нашел только способы сохранения определенных переменных, а не всех.

решение1

Проверив первый ответ и по-прежнему получая sudo: sorry, you are not allowed to preserve the environment, я решил поискать лучшее решение.

После небольшого тестирования я пришел к выводу, что наиболее важным вариантом является setenv.

Defaults!/bin/build.sh setenv

Чтобы сделать его немного более безопасным, мы можем добавить пару настроек:

Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11/bin"
Defaults!/bin/build.sh setenv,env_reset,env_delete+=PATH,env_delete+=LD_PRELOAD,env_delete+=LD_LIBRARY_PATH,env_delete+=SSH_AUTH_SOCK,env_delete+=PYTHONPATH,env_delete+=PERL5LIB
%deploy  ALL=(ALL) NOPASSWD: /bin/build.sh *

решение2

Если вы хотите разрешить пользователям в deployгруппе запускать любую команду практически с любой переменной среды:

Defaults:%deploy !env_reset,env_delete-=PYTHONPATH,env_delete-=PERL5LIB
%deploy ALL = (ALL) ALL

Запустите sudo -V, чтобы увидеть, какие переменные удалены.

Нет смысла ограничивать команду, если вы позволяете пользователю сохранять все переменные среды, поскольку это, скорее всего, позволит пользователю запустить произвольный код через некоторую переменную.

Если вы внимательно изучили свой скрипт и уверены, что у вас есть исчерпывающий список переменных среды, которые необходимо удалить, вы можете указать, что эти переменные среды следует удалить, а все остальные следует сохранить.

Defaults!/bin/build.sh !env_reset,env_delete+=DANGEROUS_VAR
%deploy ALL = (ALL) /bin/build.sh

решение3

Запустите sudo visudoи закомментируйте две строки, показанные ниже. Закомментирование только env_resetне работает

#Defaults       env_reset
Defaults        mail_badpass
#Defaults       secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"

Связанный контент