Я хочу автоматизировать
sudo su - user
из скрипта. Затем следует попросить пароль.
Я постараюсь угадать, что вы спросили.
Если вы хотите использовать sudo su - user
без пароля, вы должны (если у вас есть права) сделать следующее с файлом sudoers:
<youuser> ALL = NOPASSWD: /bin/su - <otheruser>
где:
<yourusername>
это ваше имя пользователя:D (saumun89, т.е.)<otheruser>
- это пользователь, которого вы хотите изменитьЗатем вставьте в скрипт:
sudo /bin/su - <otheruser>
Сделав это, вы не будете запускать последующие команды <otheruser>
, он создаст новую оболочку. Если вы хотите запустить другую команду из скрипта, как этот другой пользователь, вы должны использовать что-то вроде:
sudo -u <otheruser> <command>
И в файле sudoers:
<yourusername> ALL = (<otheruser>) NOPASSWD: <command>
Очевидно, что более общая строка, как:
<yourusername> ALL = (ALL) NOPASSWD: ALL
Будет добиваться цели, но даст разрешение делать что-либо как кто-либо.
Вы можете использовать команду
echo "your_password" | sudo -S [rest of your parameters for sudo]
(Конечно без [и])
Обратите внимание, что вы должны защитить свой скрипт от доступа посторонних пользователей. Если вы хотите прочитать пароль из отдельного файла, вы можете использовать
sudo -S [rest of your parameters for sudo] < /etc/sudo_password_file
(Или как называется файл паролей, содержащий пароль и разрыв строки.)
Со страницы руководства sudo:
-S The -S (stdin) option causes sudo to read the password from
the standard input instead of the terminal device. The
password must be followed by a newline character.
Самый простой способ - сделать так, чтобы пользователю вообще не приходилось вводить пароль.
Вы можете сделать это, запустив visudo
, затем изменив строку, которая выглядит следующим образом:
someuser ALL=(ALL) ALL
в
someuser ALL=(ALL) NOPASSWD: ALL
Однако, если это только для одного сценария, было бы более безопасно ограничить доступ без пароля только к этому сценарию и удалить (ALL)
, чтобы они могли запускать его только как пользователь root, а не любой пользователь, например
Cmnd_Alias THESCRIPT = /usr/local/bin/scriptname
someuser ALL=NOPASSWD: THESCRIPT
Запустите man 5 sudoers
чтобы увидеть все подробности на странице man sudoers.