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

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

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

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

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

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

 sudo -E build.sh "$@" 

Я получил:

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

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

3 Solutions collect form web for “Как я могу сохранить * all * environment vars для определенной команды в sudo?”

После тестирования первого ответа и получения 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 * 

Если вы хотите разрешить пользователям в группе 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 

Запустите sudo visudo и 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" 
  • Блокировать встроенное приложение?
  • Получение no tty присутствует и не запрашивать программу, указанную при использовании git over ssh
  • подача пароля без какого-либо окна терминала (стандартный вывод)
  • Почему sudo openvpn не может работать здесь?
  • Установка пароля root AMI linux
  • Есть ли более короткий способ изменить имя пользователя, домашний каталог и перемещать файлы одновременно
  • Работа Sudo cron с использованием arp-scan дает пустой результат
  • С точки зрения безопасности я должен добавить своего пользователя в файл sudoers или нет?
  • Заменять локальные значения sudo по умолчанию с помощью sss или ldap
  • Восстановить права sudo
  • Как работает скрипт /etc/init.d/sudo?
  • Linux и Unix - лучшая ОС в мире.