su и sudo в сценарии оболочки

существует сценарий оболочки (/bin / sh, а не bash), который требует разрешений root для выполнения.

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

теперь он использует следующий код:

if [ $(id -u) -ne 0 ]; then su root -- $@ ; ... fi

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

вопрос: как может ли скрипт определить, использовать ли su или sudo не спрашивая пользователя ввести слишком много паролей (например,sudo пароль, если он не работает-run su).

6 ответов


нет пуленепробиваемого способа сделать это, потому что любой дистрибутив может размещать файлы любым способом. Debian и Ubuntu часто размещают системные файлы в каталогах, отличных от Red Hat, например. Гораздо проще настроить скрипт для ОС, на которой он установлен.


не должно. Если сценарий требует привилегий root, он должен запускаться как root. Это дело пользователя, как он собирается это сделать-используя su, sudo или какой-то другой механизм.

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


вы можете настроить учетную запись, чтобы не нужен пароль для sudo в /etc/ sudoers:

yourusername ALL=(ALL) NOPASSWD: ALL

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

if [ "$UID" -ne 0 ]; then
    echo "You must be root to run this script"
    exit 1
fi

таким образом, пользователь может получить root, однако они выбирают (su или sudo).


создайте еще один .sh файл из этого файла вызовите свой оригинал , как -

su - oracle /u01/enlightics/Enlightiks/UploadFTP/ExportScript2.sh

проверить, если sudo ist установлен

SU='su'
which sudo > /dev/null && SU='sudo'

хотя это не полностью отвечает на ваш вопрос, стоит отметить, что вы можете проверить, установлен ли пакет sudo, используя следующее:

системы на базе Debian:

dpkg -s sudo

системы, основанные на RPM:

rpm -q sudo