Как установить umask для системного пользователя?

Как установить umask для системного пользователя?

Можно ли установить umaskдля системного пользователя (созданного с помощью useradd --system username)?

решение1

Существует три обычных способа установки umask пользователя.

  1. Установить UMASKв/etc/login.defs
  2. Добавьте pam_umask.soв конфигурацию PAM/etc/pam.d
  3. Установите его в файлах запуска оболочки, например/etc/profile

В этом отношении нет никакой разницы между пользователями системы и обычными пользователями.

Но я предполагаю, что вы пытаетесь запустить демон с пользовательским umask?

Проблема в следующем: все вышеперечисленные варианты происходят, когда пользователь входит в систему. Если вы запускаете демон, он никогда не входит в систему. Он запускается init, затем либо запускается как root, либо вызывается для setuidзапуска от имени указанного вами системного пользователя.

Ваши основные варианты:

  1. вставьте umaskсвой скрипт инициализации (сделайте grep umask /etc/init.d/*для примера)
  2. настроить init для запуска программы с пользовательской маской umask (systemd.exec выскочка umask)
  3. если используете start-stop-daemon, передайтеопция umask
  4. модифицируйте саму программу, чтобы вызвать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

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

Связанный контент