
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 ...
.