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

Вот выборка из http://www.debian-administration.org/articles/28, который, кажется, отвечает на Ваш вопрос.

Примечание: В сценарии в качестве примера ниже просто добавляют вызов к"start)"разделите для фактического запуска программы. Можно протестировать функциональность сценария, не перезагружая систему: назовите его с полным путем и предоставлением его параметр"start"или"stop"

Здесь идет:

Debian использует Sys-V как init система для выполнения команд когда система runlevel изменения - например, во времени завершения работы и начальной загрузке.

Если Вы хотите добавить новый сервис для запуска, когда начальные загрузки машины необходимо добавить необходимый сценарий к каталогу /etc/init.d/. Многие сценарии, уже существующие в том каталоге, дадут Вам пример вида вещей, которые можно сделать.

Вот очень простой сценарий, который разделен на две части, код, который всегда работает, и код, который работает при вызове с "запуском" или "остановкой".

#! /bin/sh
# /etc/init.d/blah
#

# Some things that run always
touch /var/lock/blah

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting script blah "
    echo "Could do more here"
    ;;
  stop)
    echo "Stopping script blah"
    echo "Could do more here"
    ;;
  *)
    echo "Usage: /etc/init.d/blah {start|stop}"
    exit 1
    ;;
esac

exit 0

После того как Вы сохранили свой файл в корректное местоположение, удостоверяются, что это - исполняемый файл путем выполнения"chmod 755 /etc/init.d/blah".

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

Самый простой способ сделать это состоит в том, чтобы использовать Debian-определенную команду update-rc.d:

root@skx:~# update-rc.d blah defaults
 Adding system startup for /etc/init.d/blah ...
   /etc/rc0.d/K20blah -> ../init.d/blah
   /etc/rc1.d/K20blah -> ../init.d/blah
   /etc/rc6.d/K20blah -> ../init.d/blah
   /etc/rc2.d/S20blah -> ../init.d/blah
   /etc/rc3.d/S20blah -> ../init.d/blah
   /etc/rc4.d/S20blah -> ../init.d/blah
   /etc/rc5.d/S20blah -> ../init.d/blah

6
30.09.2013, 17:18
3 ответа

После тестирования первого ответа и все еще получения 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 *
4
27.01.2020, 20:29

Если Вы хотите позволить пользователям войти 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
1
27.01.2020, 20:29
  • 1
    Если sudo реализация обеспечивает его, я всегда предпочитал бы определять белый список с помощью env_keep опция. И этот список не должен определенно включать что-то как PATH, LD_PRELOAD или PERL5LIB. –  Dubu 02.10.2013, 11:51
  • 2
    @Dubu, через который смысл этого вопроса должен был позволить неизвестным переменным проходить, не добавив в белый список. Разрешение произвольных переменных (даже PATH, LD_PRELOAD, безотносительно) пройти не дыра в системе безопасности, если Вы позволяете какой-либо команде быть выполненной: это - только дыра в системе безопасности, если Вы хотите ограничить команду, потому что много переменных позволяет работать вокруг ограничения команды. –  Gilles 'SO- stop being evil' 02.10.2013, 13:04

RUN 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"
0
27.01.2020, 20:29

Теги

Похожие вопросы