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

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

su - root 

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

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

  • Сценарий для подключения с ssh к удаленному серверу с паролем
  • Изменение имени хоста на SUSE Linux Enterprise Server 11 SP3 для VMware
  • suse yast ничего не обеспечивает .so необходимо, строя из источника
  • Установите Ubuntu поверх Suse без ущерба для Windows
  • Установка openssl на R
  • Замена sntp для аргумента -P (подсказка)
  • заставить zypper установить определенную версию
  • Как узнать, как curl получает свой прокси-сервер
  • 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 

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

    Interesting Posts

    Как изменить размер информации о разделе файла IMG?

    Несколько telnet-соединений в цикле Expect while

    Производительность tmpfs

    Как узнать, являются ли таинственные программы в списке нетонов вредоносными программами?

    ACL не работает в каталогах

    Получить tar для исключения некоторых файлов

    Ctrl-S не работает в rtorrent при доступе через экран. Не удается запустить торренты

    Операционная система Linux Графический интерфейс пользователя

    Разделить файл на основе шаблона с ведущими нулями

    Как запустить демон keyring после сбоя gnome-shell?

    Как передать каждую строку текстового файла в качестве аргумента в команду?

    Удалить обратную косую черту + последовательности новой строки

    Как заставить / dev / fd запускать сценарии оболочки в sudo safe?

    Как найти блокировку для коммутации виртуальных терминалов?

    Почему каналы, поддерживаемые моим интерфейсом, отличаются от каналов, разрешенных для сети ad-hoc?

    Linux и Unix - лучшая ОС в мире.