Способы установки umask в Ubuntu для процессов демона

8

У меня есть серверный процесс http-демона (yaws), который я хотел бы, чтобы сервер записывал любые новые файлы с umask 002, чтобы другой пользователь из той же группы мог изменять, перемещать или удалять файлы, созданные процессом-демоном. Это на Ubuntu 10.04.

В отличие от Apache, в yaws нет опции конфигурации для umask, так какие есть способы для установки umask для любого процесса демона?

Я нашел этот ответ об изменении сценария инициализации, чтобы добавить umask 002. Это сработало, но я не уверен, что редактирование сценария инициализации - лучший способ упростить документирование и настройку на нескольких машинах.

Я также нашел ссылку на модуль pam_umask здесь . Похоже, это позволяет настраивать пользовательские настройки umask в поле GECOS / etc / passwd.

Есть ли другие способы установить umask для процессов-демонов? И какой будет рекомендуемый путь?

mp3foley
источник

Ответы:

2

Создайте .profileфайл в домашнем каталоге демона:

#!/bin/sh
umask 002

Вы можете найти домашний каталог демона, выполнив:

getent passwd daemon | awk -F':' '{ print $6; }'

Если это не сработает, единственное другое решение, которое я могу придумать, - это отредактировать /etc/init.dскрипт.

Zaz
источник
2
getent passwd daemon | awk -F ':' {print $ 6; } тоже работает.
Янне Пиккарайнен,
1
Там нет необходимости использовать sudoдля чтения /etc/passwd. Или catв этом отношении ( grepпримет имя файла в качестве аргумента или просто использует, getentкак указала Джанн).
Приостановлено до дальнейшего уведомления.
Это не работает под Ubuntu 10.04. Это может быть связано с тем, что / bin / sh связан с / bin / dash, но я изменил оболочку по умолчанию для демонов на / bin / bash и все равно не работал. Я думаю, это потому, что $ HOME / .profile не читается неинтерактивными и не входящими в систему оболочками bash или dash. Я не мог найти простой способ продемонстрировать это из командной строки. Интерактивная оболочка umask может быть показана с помощью sudo -u daemon bash -c umask. Я проверил неинтерактивность, изменив настройки и перезапустив демон и посмотрев разрешения для создаваемых им файлов.
mp3foley
@ mp3foley: я не знаком с dash, но umaskдолжен работать в нем.
Zaz
Я также задал вопрос в списке рассылки daemons (yaws). Лучше всего добавить параметр umask в скрипт запуска демона в /etc/init.d/. Кто-то даже исправляет исходный код демонов.
mp3foley
5

В Ubuntu 10.04 глобальными настройками umask по умолчанию можно управлять с помощью модуля pam_umask.

В этом блоге были найдены некоторые подробности, связанные с Debian в целом: http://muzso.hu/2008/01/22/default-permissions-with-libpam-umask

Модуль pam_umask по умолчанию устанавливается в Ubuntu 10.04, но его необходимо настроить.

Отредактируйте /etc/pam.d/common-session, добавив строку:

session optional pam_umask.so umask=022

Затем настройки для каждого пользователя могут быть изменены с помощью команды:

sudo chfn -o "umask=002" daemon_username

добавить настройку umask в поле GECOS в / etc / passwd.

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

Для оболочек входа в систему параметры umask необходимо удалить из других файлов конфигурации оболочки, таких как / etc / profile, /etc/login.defs или из домашнего каталога пользователей .profile, .bashrc и т. Д. В противном случае параметры pam_umask будут переопределены. Смотрите man-страницу pam_umask для порядка конфигурации.

mp3foley
источник
1

Если служба запускается с помощью инструмента «start-stop-daemon», umask можно указать на уровне командной строки с параметром «--umask», например:

log_daemon_msg "Starting $DESC" "$NAME"
if start-stop-daemon --start --oknodo --exec $DAEMON -b --chuid motion --umask 002 ; then
        log_end_msg 0
    else
        log_end_msg 1
        RET=1
    fi

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

Дополнительную информацию можно получить на man-Page: man start-stop-daemon

кортик
источник