У меня есть скрипт, который устанавливает несколько переменных среды, а затем, наконец, вызывает другой скрипт с помощью 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"