Я использую что-то вроде этого в начале сценариев, которые я хочу запустить под учетной записью службы:
LUSER='my-service'
if [ `id -un` != $LUSER ]; then
exec su $LUSER -s $SHELL -c "$0 $@"
fi
# actual script commands here.
Если запустить как правильный пользователь, выполнение будет продолжено, как запланировано.При запуске от имени root привилегии сбрасываются до требуемого идентификатора пользователя.Другие пользователи получат запрос пароля, который должен сообщить им, что что-то не так.
su -s $SHELL ...
используется для переопределения оболочки, установленной в /etc/passwrd
- для учетной записи службы может быть установлено значение /bin/false
.
Я использовал это в системах Debian, используя bash
и dash
.Не стесняйтесь комментировать, если мобильность может быть улучшена.