Как я могу сохранить * 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" 
  • Разрешить определенному пользователю или группе root доступ без пароля к / bin / date
  • Arch Linux sudo не работает в графическом режиме
  • Может sudo для пользователя, но «запустить команду как» отказано?
  • Sudoers: разрешить любую подкоманду для определенного аргумента
  • команда pure bash с sudo
  • Есть ли лучшие / более безопасные методы запуска OpenVPN-клиента как обычного пользователя?
  • Измените право собственности на файл у пользователя на другого пользователя, который первый пользовательский контроль
  • Нет действительных источников судопроизводства
  • Как выполнить изменения на удаленном сервере с правами root?
  • Как выполнить как зарегистрированный пользователь в скрипте sudo (OSX)?
  • Целевой каталог (/ etc) не доступен для записи текущим пользователем на недоступном
  • Окружающая среда USER и USERNAME в CentOS 7
  • Interesting Posts

    Почему NetBSD является самой стабильной ОС здесь?

    Как печатать содержимое файла только в том случае, если первая строка соответствует определенному шаблону?

    Удалить (на основе текста) Логотип Linux, который появляется после загрузки

    Исправить: /usr/lib/libnssutil3.so: неопределенная ссылка на `PL_ClearArenaPool '

    Невозможно настроить учетную запись ssh без ввода пароля

    Есть ли дистрибутив Linux с небольшим или отсутствием инструментов администрирования?

    Как разрешить доступ пользователей к определенному файлу в ограниченном каталоге?

    Можно ли читать PVclock из пользовательского пространства?

    Emacs переместится в следующий пробел

    Использование клавиатуры для каждого пользователя XKBOPTIONS для всех настольных сред

    Консольный торрент-клиент поддерживает магнитную ссылку?

    Debian offline dist-upgrade за один шаг

    Несколько графических карт в X

    Как sda1 используется иначе, чем sda2?

    Создание сценария Unix для лучшего сна

    Linux и Unix - лучшая ОС в мире.