
Можно ли установить umask
для системного пользователя (созданного с помощью useradd --system username
)?
решение1
Существует три обычных способа установки umask пользователя.
- Установить
UMASK
в/etc/login.defs
- Добавьте
pam_umask.so
в конфигурацию PAM/etc/pam.d
- Установите его в файлах запуска оболочки, например
/etc/profile
В этом отношении нет никакой разницы между пользователями системы и обычными пользователями.
Но я предполагаю, что вы пытаетесь запустить демон с пользовательским umask?
Проблема в следующем: все вышеперечисленные варианты происходят, когда пользователь входит в систему. Если вы запускаете демон, он никогда не входит в систему. Он запускается init, затем либо запускается как root, либо вызывается для setuid
запуска от имени указанного вами системного пользователя.
Ваши основные варианты:
- вставьте
umask
свой скрипт инициализации (сделайтеgrep umask /etc/init.d/*
для примера) - настроить init для запуска программы с пользовательской маской umask (systemd.exec выскочка umask)
- если используете
start-stop-daemon
, передайтеопция umask - модифицируйте саму программу, чтобы вызватьumaskфункция или системный вызов
решение2
Системные пользователи отличаются от «обычных» по трем параметрам: срок действия пароля, домашний каталог (у системных пользователей его нет) и UID (системные пользователи обычно ниже некоторого произвольного порога).
В общем случае вам почти совсем не повезло. Вы можете использовать PAM для установки umask, но PAM выбирает поведение на основе других вещей, а не этих трех различий.
Другими словами, вы не можете заставить PAM различать пользователей «системы» и «несистемы». Это оставляет вам два варианта:
Либо вы используете PAM, чтобы установить umask для всех (например, check in
/etc/login.defs
), а затем явно устанавливаете umask для несистемных пользователей/etc/bash.bashrc
(или аналогично);Или вы пишете свой собственный модуль PAM, чтобы сделать это. Я думаю, что это приветствовалось бы многими людьми, поскольку установка umask является распространенным запросом.
Пожалуйста, отнеситесь к этому ответу с большой долей скепсиса. Такого рода запросы встречаются довольно часто, и я не удивлюсь, если сейчас существует лучший/правильный способ.
решение3
Как предлагает @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
Возможно, у других демонов есть похожие методы, которые могут помочь в определенных случаях.