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

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

6 голосов
/ 04 октября 2010

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

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

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

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

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

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

Ответы [ 6 ]

6 голосов
/ 05 октября 2010

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

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

3 голосов
/ 04 октября 2010

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

2 голосов
/ 04 октября 2010

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

1 голос
/ 08 июня 2017

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

su - oracle /u01/enlightics/Enlightiks/UploadFTP/ExportScript2.sh
0 голосов
/ 04 октября 2010

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

Системы на основе Debian:

dpkg -s sudo

RPM систем:

rpm -q sudo
0 голосов
/ 04 октября 2010

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

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