Переопределить env_keep для определённого пользователя в sudoers
Я хочу переопределить env_keep для одного определённого пользователя в системе. (Для всех пользователей - работает без проблем).
Почитал man sudo и man sudoers, немного погуглил - но так и не понял, почему не срабатывает конструкция
Defaults:www-data env_keep+="SSH_AUTH_SOCK"
(был также вариант не += а просто =)
Что-то я упускаю, но что?
Вот мой /etc/sudoers (я в нём ничего не менял):
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "@include" directives:
@includedir /etc/sudoers.d
А вот мой /etc/sudoers.d/www-data:
Defaults:www-data env_keep="SSH_AUTH_SOCK"
Проверял стандартно: вошёл по SSH, посмотрел что есть переменная echo $SSH_AUTH_SOCK, затем меняю sudoers и пробую проверить:
sudo -u www-data -s /bin/bash -c 'echo $SSH_AUTH_SOCK'
sudo -u yetanotheruser -s /bin/bash -c 'echo $SSH_AUTH_SOCK'
Ожидаю в первом случае увидеть непустую переменную, во втором - пустую.
Работает как я уже говорил, если я меняю глобальный Defaults env_reset на Defaults env_keep (или ставлю Defaults env_keep+="SSH_AUTH_SOCK"), хотя по документации должно работать и для отдельных пользователей судя по комментариям на so.
Система под debian11 если это важно для понимания механики. Пользователь именно www-data, т.е. без шелла.
Ответы (1 шт):
Defaults:username применяется не к тому пользователю, от имени которого выполняется команда, а к пользователю, вызывающему sudo
Вам нужно в sudoers вместо www-data указать Defaults:your_user env_keep="SSH_AUTH_SOCK", где your_user - это имя вашего пользователя в системе.
Правда, в этом случае sudo в любого пользователя будет сохранять переменную: и sudo -u www-data -s /bin/bash -c 'echo $SSH_AUTH_SOCK'
и sudo -u yetanotheruser -s /bin/bash -c 'echo $SSH_AUTH_SOCK' выведет непустое значение.