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

14

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

sid_com
источник

Ответы:

14

Есть три нормальных способа установить маску пользователя.

  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 upstart umask )
  3. если используете start-stop-daemon, передайте опцию umask
  4. изменить саму программу для вызова функции или системного вызова umask
Mikel
источник
Знаете ли вы, как установить umask для SSHFS (sftp-сервер) в Arch Linux (который использует systemd)? Как вы указали, первые 3 варианта, которые вы перечислили, не имеют никакого эффекта.
MountainX-for-Monica,
2

Пользователи системы отличаются от «обычных» тремя способами: срок действия пароля, домашний каталог (у системных пользователей его нет) и UID (системные пользователи обычно находятся ниже некоторого произвольного порога).

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

Другими словами, вы не можете заставить PAM различать «системных» и «несистемных» пользователей. Это оставляет вам два варианта:

  • Либо вы используете PAM для установки umask для всех (например, регистрации /etc/login.defs), затем явно устанавливаете umask для несистемных пользователей в /etc/bash.bashrc(или аналогичных);

  • Или вы пишете свой собственный модуль PAM для этого. Я думаю, что это будет приветствоваться многими людьми, так как установка umask является общей просьбой.

Пожалуйста, примите этот ответ с щедрым щепоткой соли. Такого рода запросы довольно распространены, и я не удивлюсь, если сейчас появится лучший / правильный способ.

Алексиос
источник
1
Модуль PAM уже называется pam_umask . Проблема в том, что он работает только во время входа в систему.
Микель
Ах, я думаю, вы знали о pam_umask, но, возможно, не о pam_succeed_if. С pam_succeed_if вы можете заставить любой другой модуль применяться только к данному пользователю или группе. Но я все еще не думаю, что PAM поможет здесь.
Микель
1

Как подсказывает @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

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

scipilot
источник
Но как вы смогли написать «umask 002» в этот файл?!?!? Я получаю сообщение об ошибке «Отказано в доступе» даже в качестве пользователя root / sudo, и, согласно Apple, даже пользователям root не разрешается что-либо записывать / изменять в каталоге / usr / sbin support.apple.com/ru-gb/HT204899
Schurik