Я попытаюсь предположить то, что Вы спросили.
Если Вы хотите использовать 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)
, таким образом, они могут только выполнить его как корень, не любого пользователя, например.
Cmnd_Alias THESCRIPT = /usr/local/bin/scriptname
someuser ALL=NOPASSWD: THESCRIPT
Выполненный man 5 sudoers
видеть все подробности в sudoers странице справочника.