5

Я хочу автоматизировать

sudo su - user 

из скрипта. Затем следует попросить пароль.

3 ответа3

7

Я постараюсь угадать, что вы спросили.

Если вы хотите использовать 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

Будет добиваться цели, но даст разрешение делать что-либо как кто-либо.

3

Вы можете использовать команду

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

Самый простой способ - сделать так, чтобы пользователю вообще не приходилось вводить пароль.

Вы можете сделать это, запустив 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .