Запустите sudo как определенный пользователь без пароля

Я использовал следующую команду в моем скрипте

sudo su - user -c bash <<EOF
cp /home/test.txt /opt/

EOF

Если я использую sudo su - user на терминале Unix не спрашивает мне пароль, но если я пытаюсь запустить скрипт, терминал спрашивает мне пароль, и если я удаляю часть EOF, остальная часть кода запускается, когда я покидаю сеанс. Я хочу выполнить команду в пользовательском режиме sudo, но терминалу не нужно спрашивать пароль.

Если я использую

sudo su - user <<EOF

code

EOF

У меня ошибка в.bash_profile: слишком много аргументов

4 ответа

Я хочу выполнить команду в пользовательском режиме sudo, но терминалу не нужно спрашивать пароль.

Сценарий, который вы испытываете, вызван кэшированием учетных данных пользователей для sudo, которые позволяют sudo поддерживать сеанс, и любая дальнейшая команда sudo не запрашивает пароли.

Проверь это:

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

Если вам все еще нужно это сделать, у вас есть следующие варианты:

Предотвращать sudo постоянно запрашивать пароль:

бежать sudo visudo и искать линию root ALL=(ALL) ALL затем добавьте строку

username ALL=(ALL) NOPASSWD: ALL 

затем сохраните и выйдите.

Примечание. Это угроза безопасности.

Или предотвратить sudo постоянно запрашивать пароль только для конкретного скрипта:

бежать sudo visudo и искать линию root ALL=(ALL) ALL затем добавьте строку

username ALL=NOPASSWD: path_to_the_script

затем сохраните и выйдите

Введите пароль внутри скрипта, запустив sudo команда как это:

sudo -S <<< "password" command

Примечание: это тоже риск для безопасности.

Я думаю, вам нужно выполнить вашу команду от имени другого пользователя. Это может быть ваш ответ: Запустите сценарий оболочки как другой пользователь, который не имеет пароля

sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"' 

Это цитата из ссылки. Возможно, вам лучше:

sudo -H -u otheruser bash <<EOF
cp /home/test.txt /opt/
EOF

ОБНОВЛЕНИЕ: Вы можете захотеть создать определенное правило sudo для запуска определенной команды без пароля (в файле /etc/sudoers -помните, чтобы использовать visudo для его редактирования-):

otheruser ALL=NOPASSWD: /full/path/to/your_command.sh

(конечно, вам нужен root-доступ для редактирования sudoers, надеюсь, вы сможете это сделать). И создайте скрипт под названием your_command.sh это содержит вашу логику. Затем вам будет разрешено запустить его без пароля:

sudo -H -u otheruser your_command.sh

Я знаю, что это не "однострочная команда", но она безопасна, так как допускает только одну конкретную команду без пароля. И это не требует пароля, конечно!

Что сработало для меня, так это:

      sudo passwd -d <username>

эта команда удалила пароль для указанного пользователя.

Тогда не используйте sudo, тогда он не будет запрашивать пароль, но вы будете авторизованы как root!

Другие вопросы по тегам