Скрипты Bash: Требуют запуска скрипта от имени пользователя root (или с помощью sudo)

Скрипты Bash: Требуют запуска скрипта от имени пользователя root (или с помощью sudo)

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

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

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

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

решение1

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

id -u

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

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

решение2

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

chown root:root file

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

chmod 700 file

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

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

решение3

Переменная 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-скриптов!), поскольку не требует внешней команды.

решение4

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

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

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

Связанный контент