Как указать параметр `-i` sudo в файле sudoers?

На моей однопользовательской рабочей станции я настроил sudoers(5) чтобы некоторые команды могли выполняться без пароля. В частности, это пример записи:

 $ cat /etc/sudoers.d/apt-get my_user_name ALL=(ALL) NOPASSWD: /usr/bin/apt-get 

Однако мне нужно запустить эту команду как sudo -i apt-get install (т. -i опцией -i ).

Возможно ли каким-либо образом изменить конфигурационный файл, так что -i (или какой-либо другой параметр sudo ) будет подразумеваться, даже если бы я запускался просто как sudo apt-get install (т. -i Без -i )?

(ОС – Ubuntu 14.04, но я думаю, что этот вопрос не специфичен для конкретного дистрибутива Linux).

Я предполагаю, что ваша интерактивная корневая оболочка /bin/bash (но будьте осторожны, возможно, ваш /etc/passwd устанавливает что-то еще, например /bin/dash ).

Тогда вы действительно хотите запустить корневую оболочку для входа из sudo . Когда я пришел, я считаю, что вам это обычно не нужно. И вы также можете отключить некоторые переменные среды или установить соответствующие значения по умолчанию через файл /etc/sudoers.d/apt-get .

Но, ссылаясь на Баша ,

-l

Создайте эту оболочку так, как если бы она была вызвана напрямую при входе в систему. Когда оболочка является интерактивной, это эквивалентно началу оболочки входа с exec -l bash . Когда оболочка не является интерактивной, будут запущены файлы запуска оболочки входа. exec bash -l или exec bash --login заменит текущую оболочку оболочкой входа Bash. См. «Файлы запуска Bash» для описания специального поведения оболочки входа.

и позже

Оболочка для входа – это тот, чей первый символ нулевого аргумента - или один из них вызывается с параметром --login .

Таким образом, вы, вероятно, можете написать сценарий оболочки (или программу-оболочку на C), которая вызывает bash с -l или --login , и эта вещь упоминается в /etc/sudoers.d/apt-get

Возможно, достаточно запустить /bin/bash -l -c "/usr/bin/apt-get $*" .

Заметьте также, что sudoers(5) упоминает env_reset и env_keep

Возможно, вы хотите просто удалить несколько переменных окружения, таких как DBUS_SESSION_BUS_ADDRESS ….

(Я мог ошибаться и никогда не пробовал это)