Назад | Перейти на главную страницу

Bash Scripting: требуется, чтобы сценарий запускался от имени пользователя root (или с помощью sudo)

Я пытаюсь написать сценарий bash (в Ubuntu), который будет создавать резервную копию каталога с помощью tar.

Как мне проверить скрипт, чтобы его можно было запускать только с правами root (или с помощью sudo)?

Например, если пользователь запускает сценарий, он должен сказать, что этот сценарий должен запускаться с привилегиями sudo, а затем выйти. Если сценарий выполняется от имени пользователя root, он продолжится после проверки.

Я знаю, что должно быть простое решение, просто я не смог найти его в Google.

Чтобы получить эффективный uid, используйте эту команду:

id -u

Если результат «0», то скрипт либо запущен как root, либо использует sudo. Вы можете запустить проверку, выполнив примерно следующее:

if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "Not running as root"
    exit
fi

Я полагаю, вы знаете, что, изменив владельца на root

chown root:root файл

и установив разрешения на 700

chmod 700 файл

вы сделаете то же самое - без предложения работать как sudo.

Но я отправлю этот ответ для полноты.

Переменная bash $EUID показывает эффективный UID, на котором выполняется скрипт. Если вы хотите убедиться, что скрипт запускается от имени пользователя root, проверьте, нет ли $EUID содержит значение 0 или нет:

if [ $EUID -ne 0 ]; then
    echo "$0 is not running as root. Try using sudo."
    exit 2
fi

Это лучше, чем решение с /usr/bin/id (для сценариев bash!), потому что не требует внешней команды.

Какова ваша цель здесь - сообщить пользователю, что он должен запускать скрипт от имени пользователя root или в качестве меры безопасности?

Если вы просто хотите проинформировать пользователя о том, что любые предложения uid подходят, но они так же полезны, как шины на лошади, в качестве меры безопасности - нет ничего, что могло бы помешать пользователю скопировать скрипт, вынув оператор if, и все равно запустить его.

Если это проблема безопасности, то скрипт должен быть установлен на 700, принадлежащий root: root, чтобы он не был доступен для чтения или выполнения другим пользователям.

Вы также можете использовать команду whoami.

if [ ! "`whoami`" = "root" ]
then
    echo "\nPlease run script as root."
    exit 1
fi

Один простой способ сделать скрипт доступным только для root - это запустить скрипт со строки:
#!/bin/su root

«#! / bin / su root» позволяет пользователям в режиме суперпользователя запускать сценарий без использования пароля root. Если вы хотите, чтобы суперпользователи запускали сценарий с результатами, полученными от root, это сделает это.