Я знаю, что для большинства из вас это покажется наивным, но я все еще новичок в Linux, поэтому, пожалуйста, отнеситесь ко мне с пониманием.
Я пытаюсь создать пакетный файл для автоматизации нескольких команд.
Одна из этих команд — это sudo -i
так как мне нужно получить доступ к некоторым файлам в root.
Итак, мой сценарий пока выглядит так:
#!/bin/bash
sudo -i
cd my-server/bin
./run-server.sh
Я знаю, что после этого sudo -i
последует запрос пароля, могу ли я сымитировать это в своем скрипте?
решение1
Вы можете взять sudo
часть своего скрипта и гарантировать, что пользователи будут вызывать скрипт с помощью sudo scriptname
.
Удалите sudo -i
строку из вашего скрипта и замените ее на эту:
# Must prefix with sudo when calling script
if ! [[ $(id -u) == 0 ]]; then
echo You must call this script using sudo. Aborting.
exit 99
fi
решение2
Справедливый вопрос. Но настоятельно рекомендуется, чтобы вы не делали этого так, как вы сейчас пытаетесь/представляете. Причина, по которой следует избегать вашего подхода, заключается в том, что он требует ввода вашего пароля в текстовый файл, который могут прочитать другие пользователи/злоумышленники. Теперь вы можете установить для файла разрешение 600, чтобы его мог прочитать только ваш пользователь (и root), но я не уверен, могут ли подкоманды скрипта где-то регистрироваться, делая ваш пароль снова доступным для потенциальных злоумышленников. Я полагаю, что реальный вопрос заключается в том, зачем вам скрипт для автоматического входа в систему как root?
Это автоматизированный процесс или есть какая-то другая причина, по которой вы не можете просто ответить на запрос пароля, который отображается при запуске скрипта как есть? Если это автоматизированный процесс, вам следует просто удалить строку sudo и добавить вызов скрипта в cron пользователя root. Существует множество документации о том, как настроить задания cron, доступных с помощью простого поиска в Google, но вы можете начать сэтот)
Более того, это скрипт, который просто вызывает другой скрипт. Вероятно, вам следует просто сделать run-server.sh исполняемым только пользователем root, затем просто использовать sudo su
для входа в систему root, а затем запустить его с помощью /my-server/bin/run-server.sh
. Опять же, вы можете добавить это в cron пользователя root, если вам нужно автоматизировать его по расписанию.
ПРЕДУПРЕЖДЕНИЕ:Не записывайте это, иособенноне вводите его в командной строке (он будет записан в журнал)
echo 'PASSWORD' | sudo -S /my-server/bin/run-server.sh