Запуск сценария как другой пользователь

Пользователи LDAP не будут присутствовать в /etc/passwd. В системе Unix, /etc/passwd только одно из многих мест, оно может искать информацию о каталоге, включая пользователей и группы. Тем, где это смотрит, управляют /etc/nsswitch.conf.

Чтобы видеть, импортировали ли Вы на самом деле успешно своих пользователей способом, Ubuntu понимает, используйте getent команда для получения текущего списка учетных записей:

getent passwd

Если Ваш каталог LDAP был правильно включен, Вы будете видеть полный список всех пользователей, отформатированных как passwd файл.

Если это не работает, я боюсь, что не могу помочь, поскольку я не знаком с webmin. Ubuntu 10.04 действительно делает довольно простым включить автору LDAP из командной строки, тем не менее, с помощью auth-client-config:

https://wiki.ubuntu.com/AuthClientConfig

12
задан 13 April 2017 в 15:37
4 ответа

Правильным ответом было то, что для правильной "демонизации" необходимо перенаправить стандартный ввод, стандартный вывод и стандартную ошибку в /dev/null (или какой-нибудь реальный файл):

su someuser -c "nohup some_script.sh >/dev/null 2>&1 &"

su - подставить идентификатор пользователя в someuser
-c - аргумент su для выполнения указанной команды
nohup - Выполнить команду, иммунную от зависания. Чтобы предотвратить случаи, когда родительский процесс завершит дочерний процесс. Добавлено здесь на всякий случай. Но на самом деле не имеет эффекта в моём конкретном случае. Нужно ли это, зависит от окружения (check shopt)
>/dev/null - Перенаправляет стандартный вывод на ничто, в основном отключая его.
2>&1 - Перенаправить вывод стандартной ошибки(2) на стандартный вывод(1), который перенаправляется на ноль
& - отсоединить в фоновом режиме, это перенаправит стандартный ввод также и на /dev/null.

Это, по сути, именно то, что утилита start-stop-daemon из Debian dpkg делает в своём ядре. Поэтому я предпочитаю запускать скрипты таким образом, а не вводить в свой код ещё один внешний вызов утилиты. Утилита start-stop-daemon полезна в тех случаях, когда у вас есть полнофункциональные демонские программы, которые нужно запустить, и где вам нужна дополнительная функциональность, которую предоставляет start-stop-daemon (например, проверка того, запущен ли уже указанный процесс, чтобы он не запустился снова). Также стоит отметить, что вместо перенаправления, например, на /dev/null, вы можете закрыть файловые дескрипторы вашего процесса:

su someuser -c "some_script.sh 0<&- 1>&- 2>&- &"

0<&- Закрыть стандартный вход(0)
1>&- Закрыть стандартный выход(1)
2>&- Закрыть стандартный выход(2)

Направление знаков < > не имеет значения, так как указан длинный номер дескриптора файла. Так что это одинаково хорошо:

su someuser -c "some_script.sh 0>&- 1>&- 2>&- &"

или

su someuser -c "some_script.sh 0<&- 1<&- 2<&- &"

Однако есть более короткий способ записать, что без номеров для stdin и stdout, где направление имеет значение:

su someuser -c "some_script.sh <&- >&- 2>&- &" 

Когда файловые дескрипторы либо закрыты, либо перенаправлены в /dev/null (start-stop-daemon делает перенаправление в /dev/null), процесс безопасно запускается в фоновом режиме в качестве демона. Так что это то, что нужно, чтобы избежать проблем(startpar) с запуском скриптов во время загрузки.

Я реализовал всё решение из своей первоначальной идеи и разместил его на GitHub:
https://github.com/ivankovacevic/userspaceServices

17
ответ дан 2 December 2019 в 21:32

Вы можете использовать start-stop-daemon вне init.d с параметром - user .

3
ответ дан 2 December 2019 в 21:32

Я не тестировал это полностью, но думаю, что что-то вроде:

/sbin/start-stop-daemon --background --start --exec /home/USER/.startUp --user USER --pidfile=/home/USER/.startUp.pid --make-pidfile

при запуске, а затем

/sbin/start-stop-daemon --stop --user USER --pidfile=/home/USER/.startUp.pid

при выключении.

Обработка сценария .shutDown может быть выполнена чем-то вроде запуска, но вы не можете быть уверены, что сценарии завершатся, так как завершение работы должно произойти в любом случае: -)

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

2
ответ дан 2 December 2019 в 21:32

Пробовали ли вы использовать su ?

su -c /home/user/.startUp/executable - user

-c сообщает su выполнить команду, и последний параметр - это пользователь, который должен ее выполнить как.

1
ответ дан 2 December 2019 в 21:32

Теги

Похожие вопросы