Назад | Перейти на главную страницу

Что не так с этим сценарием bash?

Я нашел сценарий инициализации, который по какой-то причине настаивает на запуске указанного приложения от имени пользователя root. Я не могу понять, почему он это делает, какие-то намеки? Скрипт работает в Redhat Enterprise Linux 5.9.

#!/bin/bash
#
# Start/Stop apfe.
#
# chkconfig: - 62 38
# description: apfe   
# Start script for an apfe process.
# Apfe does not normally run as root, so we change user
# and call the real script in $USERDIR.

STARTUSER=apfe
USERDIR=/app/apfe/apps/apfeutils/bin
PROGNAME=apfe

su - $STARTUSER -c "$USERDIR/$PROGNAME $*"

Обратите внимание, что su - означает, что команда должна запускаться в оболочке входа пользователя, загружающей пользовательскую среду. В случае, если оболочка входа в систему похожа на /bin/false по соображениям безопасности должна быть проблема.

Попробуй изменить su к sudo -u $STARTUSER ... и потенциально делать тонкие настройки в /etc/sudoers для этой команды.

Я вижу потенциальную проблему в том, что нет полного пути к su бинарный, и нет никакой гарантии, что у вас вообще есть $ PATH. Мое предпочтительное решение - использовать runuser в отличие от su (см. postgresql файл запуска и man runuser для подробностей) после получения /etc/init.d/functions файла, другим решением было бы использовать полный путь к su двоичный. Могут быть доступны и другие решения. Конечно, это может быть не та проблема, с которой вы столкнулись, но она отвечает на ваш вопрос: «Что кажется неправильным». :)