Сценарии Bash: Потребуйте, чтобы сценарий был выполнен как корень (или с sudo)

Я использую, чтобы иметь эту проблему с серверами, которые я администрировал. Пропустите проводник в целом и используйте командную строку. Перейдите к папке и "del".

Таким образом, Вы избегаете издержек GUI (проводник является мусором), и Корзина.

26
задан 8 July 2009 в 20:30
7 ответов

Для получения по запросу эффективного uid используют эту команду:

id -u

Если результат ‘0’ затем, сценарий или работает как корень или использует sudo. Можно осуществить проверку путем выполнения чего-то как:

if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "Not running as root"
    exit
fi
37
ответ дан 28 November 2019 в 20:07
  • 1
    I' d рекомендуют полностью определить путь к идентификатору (например,/usr/bin/id). Иначе окольный пользователь мог записать их собственный сценарий/двоичный файл, который всегда возвращает 0 и затем помещает его в местоположение, которое существует ранее в выполнении users' путь. –  ktower 8 July 2009 в 20:57
  • 2
    Договорились. Фиксация с редактированием. –  Scott Pack 8 July 2009 в 21:05
  • 3
    Любой ' devious' попытка запустить скрипт won' t быть остановленным Вами использующий полный путь для идентификатора. –  theotherreceive 8 July 2009 в 21:14
  • 4
    Я соглашаюсь с theother... it' s сценарий удара. Квалификация ' id' мусорное ведро won' t останавливают любого, кто серьезно полон решимости относительно того, чтобы обходить проверку так или иначе. Лучше оставить дисквалифицированным для мобильности. –  Chris 22 July 2009 в 14:37

Я предполагаю, что Вы знаете это путем изменения владения для укоренения

chown root:root file

и установка полномочий к 700

chmod 700 file

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

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

17
ответ дан 28 November 2019 в 20:07
  • 1
    Это - больше appopriate решения, чем принятый ответ. - Мои 0,02$ –  Chris 22 July 2009 в 14:38

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

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

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

2
ответ дан 28 November 2019 в 20:07

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

if [ ! "`whoami`" = "root" ]
then
    echo "\nPlease run script as root."
    exit 1
fi
2
ответ дан 28 November 2019 в 20:07

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

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

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

2
ответ дан 28 November 2019 в 20:07

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

0
ответ дан 28 November 2019 в 20:07

"#! / bin / su root" cho phép người dùng ở chế độ siêu người dùng chạy script mà không cần sử dụng mật khẩu gốc. Nếu bạn muốn người dùng cấp cao chạy tập lệnh với kết quả của tập lệnh gốc, thì điều này sẽ làm được điều đó.

-1
ответ дан 28 November 2019 в 20:07

Теги

Похожие вопросы