Попросите пользователя войти в систему под учетной записью root при запуске сценария оболочки

Проблема, которую я получаю, когда я вхожу в команду,

su - root 

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

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

4 Solutions collect form web for “Попросите пользователя войти в систему под учетной записью root при запуске сценария оболочки”

Это очень легко сделать:

 #!/bin/sh [ "$(whoami)" != "root" ] && exec sudo -- "$0" "$@" 

Когда текущий пользователь не является root, повторно выполните скрипт через sudo .

Обратите внимание, что я использую sudo здесь вместо su . Это связано с тем, что он позволяет сохранять аргументы. Если вы используете su , ваша команда должна быть su -c "$0 $@" которая будет искажать ваши аргументы, если у них есть пробелы или специальные символы оболочки.

Если ваша оболочка bash, вы можете избежать внешнего вызова whoami :

 (( EUID != 0 )) && exec sudo -- "$0" "$@" 

Вы также можете проверить UID:

  if [ $(id -u) != 0 ]; then echo "You're not root" # elevate script privileges fi 

Вы можете вызвать сам сценарий и проверить:

 #! /bin/bash if [ "root" != "$USER" ]; then su -c "$0" root exit fi ... 

В тот момент, когда вы хотите войти в систему, просто добавьте следующую команду

 sudo su 

Это отлично работает с моим кодом

  • Запуск Apache при завершении обслуживания с помощью SIGWINCH
  • init-скрипты в autoyast для автоматического развертывания сервера Suse Linux
  • openSUSE: переключение с Wicked на NetworkManager с помощью командной строки
  • Как узнать, как curl получает свой прокси-сервер
  • Невозможно использовать yast для установки программного обеспечения онлайн - пытается установить компакт-диск
  • Сценарий для подключения с ssh к удаленному серверу с паролем
  • Окно сообщения GUI в SLES 11
  • Какая разница между -pool & -updates на SLES11-SPx
  • Как изменить каталог установки по умолчанию для команды rpmbuild?
  • Настройка xinetd для OpenSuSE
  • ImportError при запуске приложения WSGI в Apache: undefined symbol: PyUnicodeUCS2_DecodeUTF8
  • Linux и Unix - лучшая ОС в мире.