Су и sudo в скрипте оболочки
Вопрос
Существует сценарий оболочки (/ 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