Пусть sudo спросит пароль пользователя, на которого он переключается.

Пусть sudo спросит пароль пользователя, на которого он переключается.
sudo -u user1 command ...

Как сделать так, чтобы sudoзапрашивался пароль user1вместо пароля текущего пользователя?


Фон: Я хочу использовать это в Git Hook, который выполняется пользователем git, что-то вроде

echo "PasswordOfWww" | sudo -Su www bash -c "cd site; git pull; ./deploy.sh"

Я пробовал использовать su www -c "command ...", но он мне говорит

remote: su: must be run from a terminal

когда я отправляю данные в репозиторий.

решение1

Вам действительно не нужно хранить пароли пользователей в незашифрованном виде в файловой системе, если вы можете этого избежать. Это немного зависит от того, насколько вы полагаетесь на переносимость кода, который у вас есть в git, по сравнению с тем, что вы можете хранить в локальной файловой системе. Я бы рекомендовал использовать sudo с NOPASSWD с максимально ограниченной командой. Вы бы сделали запись /etc/sudoers примерно так:

git ALL=(www) NOPASSWD: /usr/local/sbin/deploySite

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

Если вы доверяете пользователю git ответственное использование учетной записи пользователя www, вы можете использовать NOPASSWD:ALL. Но вы по сути разрешаете тому, у кого есть доступ к загрузке в git, запускать любую команду, которую он хочет, как пользователь www.

Но чтобы ответить на изначальный вопрос

Вы можете заставить sudo спрашивать пароль целевого пользователя, а не вызывающего пользователя. Вы бы ввели запись sudoers, например:

Defaults:git targetpw

Тогда пользователю git при запуске придется вводить пароль пользователя www sudo -u www ....

Связанный контент