.png)
Я пытаюсь написать 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, чтобы он не был доступен для чтения или выполнения никаким другим пользователям.