1

файл: test.sh

who
su superuser <<BELUGA
mysuperpassword
BELUGA
who

$ ./test.sh

просто ждет ввода. Что я делаю неправильно? Есть ли способ автоматизировать это?

3 ответа3

4

Я думаю, что было бы намного лучше установить / использовать sudo с конфигурацией конфигурации, которая позволяет NOPASSWD для конкретных действий, которые вы пытаетесь автоматизировать.

Гораздо безопаснее разрешить определенную команду через sudo, чем хранить свой корневой пароль в текстовом файле.

3

Вы хотите использовать команду "ожидать" для передачи вашего имени пользователя и пароля.

Обратите внимание, что то, что вы хотите сделать, пахнет как плохой подход. Возможно, мы сможем помочь вам лучше, если вы немного подробнее расскажете о своей первоначальной проблеме, которую хотите решить.

2

Запускать скрипт от имени пользователя и обновлять его права доступа до root, вероятно, плохая идея. Лучшим решением было бы запустить скрипт от имени root и понизить его права доступа по мере необходимости:

#!/bin/sh
UN=user
whoami
sudo -u $UN whoami

При запуске от имени пользователя root (при условии, что user является действительным пользователем), вывод должен выглядеть так:

root
user

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

  1. Используйте sudo с сохраненным паролем:

    #!/bin/sh
    whoami
    sudo -S -p "" whoami <<EOF
    mysuperpassword
    EOF
    

    Который будет выводить (при запуске от имени пользователя):

    user
    root
    
  2. Используйте sudo без пароля.
    Добавьте список команд, которые вы хотите запустить, в файл /etc/sudoers , запустив visudo от имени пользователя root. Например, чтобы позволить user запускать команды apache2ctl и whoami , добавьте следующее:

    User_Alias SPECIAL = user
    Cmnd_Alias SPECIAL_COMMANDS = /usr/sbin/apache2ctl, /usr/bin/whoami
    SPECIAL ALL = NOPASSWD: SPECIAL_COMMANDS
    

    Или, если вы действительно доверяете user , например, это вы, вы можете разрешить пользователю выполнять любую команду без пароля:

    user ALL=(ALL) NOPASSWD: ALL
    

    Затем, когда user запускает следующий скрипт:

    #!/bin/sh
    whoami
    sudo whoami
    

    Это выведет:

    user
    root
    

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