У меня вопрос. Я пытаюсь создать сценарий bash для автоматического выполнения некоторой задачи. Мне нужно сделать первый шаг задачи как обычный пользователь, а su - как root, чтобы завершить задачу.
Мне было интересно, есть ли способ сделать это? До сих пор я мог запустить bash только как обычный пользователь, выполнить первый шаг, запросить su - пароль, но после его подключения как root скрипт остановится.
Можно ли продолжить bash после входа в систему как root?
Заранее спасибо.
ps: Если я не совсем точен, или если вам нужна информация, не стесняйтесь спрашивать, я сделаю все возможное, чтобы исправить эту ошибку.
Вы пробовали использовать sudo somecommand
вместо того, чтобы пытаться переключить пользователей? Для этого ваш пользователь должен быть в группе пользователей «wheel» (в зависимости от вашей системы).
su
изменяет среду (пользовательские переменные и т. д.), поэтому, хотя я не тестировал это, вы, вероятно, не сможете сделать это в сценарии оболочки.
Пример:
Ваш сценарий оболочки был
#Do these commands as a normal user
echo "Hello World"
cat ./somefile
#Do these commands as root
su -
echo "Hello again"
cat /etc/somesystemfile
попробуйте изменить это на
#Do these commands as a normal user
echo "Hello World"
cat ./somefile
#Do these commands as root
sudo echo "Hello again"
sudo cat /etc/somesystemfile
Если есть конкретная команда, которую вы хотите, чтобы скрипт мог выполняться от имени пользователя root, в то время как он работает как another_user, тогда вам следует использовать sudo.
Настройте sudo, чтобы позволить another_user выполнять определенную команду, что-то вроде этого в вашем файле sudoers,
someuser ALL=/path/to/specific_command
а затем в вашем сценарии bash используйте
sudo /path/to/specific_command -some -args
Если вы хотите, чтобы ваш сценарий bash запускал множество команд от имени пользователя root или запускал общие команды, такие как mv или cp, вы можете подойти к этому с другой стороны. Напишите сценарий так, чтобы он запускался от имени пользователя root (например, в корневом каталоге crontab), и пусть он выполняет команды без полномочий root, используя 'su - someuser'потому что root может сделать это без ввода паролей.
Запустите процесс как root, затем выполните обычные пользовательские задачи с помощью su (-) user -c ..command..
, и завершить его как root. Таким образом, он даже не будет запрашивать пароль.
Я нашел ответ, просто нужно использовать команду su - -c "".
Пример :
tar /home/me /dev/null
su - -c "yum update -y"
tar /home/me /dev/null
su - -c "
yum install xterm -y
yum clean-all
yum remove xterm -y
"