Попросите пароль пользователя, чтобы он переключился на

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 

когда я нажимаю на репозиторий.

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

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

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

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

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

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

 Defaults:git targetpw 

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