Я пытаюсь написать сценарий 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, это сделает это.