Автоматизация “sudo su - пользователь” команда

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

sudo su - user 

из сценария. Это должно затем попросить пароль.

5
задан 18.07.2012, 03:30

3 ответа

Я попытаюсь предположить то, что Вы спросили.

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

Добьется цели, но дал бы разрешение делать что-либо как любого.

8
ответ дан 07.12.2019, 16:56

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

 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.
3
ответ дан 07.12.2019, 16:56

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

Можно сделать это путем выполнения 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 странице справочника.

1
ответ дан 07.12.2019, 16:56

Теги

Похожие вопросы