Ответы:
Есть три нормальных способа установить маску пользователя.
UMASK
в/etc/login.defs
pam_umask.so
к вашей конфигурации PAM в/etc/pam.d
/etc/profile
В этом отношении нет разницы между пользователями системы и обычными пользователями.
Но я предполагаю, что вы пытаетесь запустить демона с пользовательским umask?
Проблема в том, что все вышеперечисленные опции происходят, когда пользователь входит в систему. Если вы запускаете демон, он никогда не входит в систему. Он запускается с помощью init, затем либо запускается от имени пользователя root, либо вызывает setuid
для запуска от имени указанного вами системного пользователя. ,
Ваши основные варианты:
umask
в свой скрипт инициализации ( grep umask /etc/init.d/*
для примера)start-stop-daemon
, передайте опцию umaskПользователи системы отличаются от «обычных» тремя способами: срок действия пароля, домашний каталог (у системных пользователей его нет) и UID (системные пользователи обычно находятся ниже некоторого произвольного порога).
В общем случае вам почти не повезло. Вы можете использовать PAM для установки маски, но PAM выбирает поведение, основываясь на других вещах, кроме этих трех различий.
Другими словами, вы не можете заставить PAM различать «системных» и «несистемных» пользователей. Это оставляет вам два варианта:
Либо вы используете PAM для установки umask для всех (например, регистрации /etc/login.defs
), затем явно устанавливаете umask для несистемных пользователей в /etc/bash.bashrc
(или аналогичных);
Или вы пишете свой собственный модуль PAM для этого. Я думаю, что это будет приветствоваться многими людьми, так как установка umask является общей просьбой.
Пожалуйста, примите этот ответ с щедрым щепоткой соли. Такого рода запросы довольно распространены, и я не удивлюсь, если сейчас появится лучший / правильный способ.
pam_umask
, но, возможно, не о pam_succeed_if
. С pam_succeed_if вы можете заставить любой другой модуль применяться только к данному пользователю или группе. Но я все еще не думаю, что PAM поможет здесь.
Как подсказывает @Mikel, если вы пытаетесь настроить системную учетную запись, которая является демоном, попробуйте настроить сам демон.
Я пришел к этому вопросу, глядя, как установить umask для учетной записи _www в MacOS. Хотя это сложно, как показывают приведенные выше ответы, я обнаружил, что могу решить эту проблему, настроив службу apache как (в данном случае) пользователь == демон.
Я странным образом не смог найти скрипт запуска (обычно в /etc/init.d/, но на Mac в Library / LaunchDaemons /), но с помощью: http://krypted.com/mac-security/apache2-umasks / обнаружил, что apache имеет свой собственный скрипт среды.
$ sudo vim /usr/sbin/envvars
umask 002
Возможно, у других демонов есть похожие методы, которые могут помочь в определенных случаях.