Назад | Перейти на главную страницу

Linux: разрешить пользователю выполнять определенную команду от имени любого другого пользователя.

Я пытаюсь найти способ разрешить пользователю john выполнять команду (скажем, echo) от имени другого пользователя peter без запроса пароля.

Я нашел ветку, которая, как я думал, будет ответом на мой вопрос:

john ALL = (ALL) NOPASSWD: /bin/echo

К сожалению, это не совсем то, что я хочу. Эта команда выполняет echo команда как peter но в контексте john. Это означает, что домашний каталог остается директорией john.

Как пользователь john, если я бегу: "sudo -u peter echo ~", ответ: /home/john. Я хочу, чтобы это было /home/peter.

Ожидаемое мной поведение обеспечивается командой su. Как root, если я это сделаю: su peter -c "echo ~" , Я получил /home/peter.

Вопрос в том, как мне узнать поведение su, без root и без запроса пароля?

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

"sudo -u peter echo ~" интерпретирует значение ~ перед выполнением команды sudo. Пытаться

sudo -s -H -u peter echo \$HOME

или

sudo -i -u peter echo \$HOME

Кроме того, чтобы просмотреть все переменные среды, установленные sudo, попробуйте:

sudo -i -u peter export
# actually, use /usr/bin/env instead of export

ОБНОВИТЬ

При использовании -i или -s вы подразумеваете, что запускаемый SUDO_COMMAND является средой оболочки указанного пользователя. Таким образом, разрешения только / bin / echo недостаточно, нужно разрешить доступность всего / bin / bash.

Кажется, что -H достаточно, чтобы установить переменную среды HOME, но вы не можете повторить ее с помощью $ HOME, потому что это функция оболочки. Другие программы могут считывать значение HOME с помощью getenv () или аналогичных методов.

sudo -H -u peter  /usr/bin/env | grep SUDO_COMMAND
SUDO_COMMAND=/usr/bin/env

sudo -i -u peter /usr/bin/env | grep SUDO_COMMAND
SUDO_COMMAND=/bin/bash -c /usr/bin/env