Вопрос

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

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

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

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

Это работает нормально, но есть какая-то ОС, как Ubuntu, которая вообще не имеет пароля. С другой стороны, многие системы используют Sudo для корневых разрешений.

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

Это было полезно?

Решение

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

Другие советы

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

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

Вы можете настроить учетную запись не нужен пароль для Sudo In / etc / sudoers:

yourusername ALL=(ALL) NOPASSWD: ALL

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

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

Таким образом, пользователь может быть рулен, однако они выбирают (SU или Sudo).

Создайте еще один .sh Файл из этого файла Вызовите свой оригинал .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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top