У меня есть процесс сервера демона http (yaws), который я хотел бы, чтобы сервер записывал любые новые файлы с umask 002, чтобы другой пользователь в той же группе мог изменять, перемещать или удалять файлы, созданные процессом демона. Это на Ubuntu 10.04.
В отличие от Apache, yaws не имеет опции конфигурации для umask, поэтому какие существуют методы для установки umask любого процесса демона?
я нашел этот ответ об изменении скрипта инициализации, чтобы добавить umask 002
. Это сработало, но я не уверен, что редактирование сценария инициализации - лучший способ упростить документирование и настройку на нескольких машинах.
Я также нашел ссылку на модуль pam_umask Вот. Похоже, это позволяет настраивать параметры umask для каждого пользователя в поле GECOS файла / etc / passwd.
Есть ли другие способы установить маску для процессов демона? И какой способ рекомендуется?
В 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 будут отменены. См. Справочную страницу pam_umask для порядка конфигурации.
Создать .profile
файл в домашнем каталоге демона:
#!/bin/sh
umask 002
Вы можете найти домашний каталог демона, запустив:
getent passwd daemon | awk -F':' '{ print $6; }'
Если это не сработает, единственное другое решение, которое я могу придумать, - это отредактировать /etc/init.d
сценарий.
Если служба запускается с помощью инструмента «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 start-stop-daemon