Как установить `umask` для всей сессии gnome?

10

Использование Gnome 3.18. Я делюсь файлами между другими членами семьи, но по умолчанию umask в моем дистрибутиве (archlinux) есть 0022. Таким образом, каждый созданный файл / каталог недоступен для записи в нашей общей группе.

Я пытался поставить umask 0002в /etc/profileно гном сессия все еще использует 0022. Тем не менее, это работает для оболочки bash для входа в систему.

Я также попытался добавить эту строку в /etc/pam.d/system-auth: session required pam_umask.so umask=0002 она имеет тот же эффект, что и в /etc/profile. Я старался

Если я вручную изменяю маску в оболочке терминала gnome, то запускаю из нее приложение, скажем, gedit, тогда созданные у него файлы имеют необходимые разрешения. Если я запускаю gedit из меню gnome, это не так. Поэтому я действительно хочу установить umask для сессии gnome, и я не могу найти, где это сделать.

РЕДАКТИРОВАТЬ (чтобы ответить на комментарий Жиля): я использую gdm 3.18 в качестве DM. Я также попытался добавить строку pam_umask в /etc/pam.d/gdm-launch-environment. Все остальные gdm-*файлы содержат sessionвключения из system-authфайла, поэтому им не нужно больше. Это ничего не меняет.

/etc/login.defsсодержит, UMASK 077но также USERGROUPS_ENAB yesкоторый должен установить umaskлибо 0077либо 0007для пользователей, основной группой которых является имя пользователя.

Единственный файл, который содержит 022для umask в /etcэто, /etc/profileно это была моя первая попытка.

Что касается /etc/Xsession.d, у меня нет этого каталога. Кроме того, поскольку wayland теперь является сервером отображения по умолчанию, я не уверен, что umask должен быть установлен как часть инициализации X, даже если я все еще использую его сам.

Кристоф Древет-Дроге
источник
Какой менеджер дисплеев вы используете? (Это программа, в которой вы вводите свое имя пользователя и пароль.) Gdm, lightdm, slim, xdm, kdm,…? В зависимости от того, как Arch и ваш DM настроены, попробуйте добавить файл /etc/Xsession.dили другой файл /etc/pam.d(я предполагаю, что вы хотите установить это для всей системы). Или возможно /etc/login.defs.
Жиль "ТАК - перестань быть злым"
Два ответа действительны для ttyили sshлогины, и они в основном те же, на самом деле (используя pam_umask). Они не работают с моей сессией гномов. Так что я не могу никому давать награду. Я не знаю, относится ли это к gnome в Xorg на archlinux. Я протестирую с другими дистрибутивами, когда у меня будет время.
Кристоф Древет-Дрогует
1
Существует похожая тема на форуме archlinux, в которой рассматривается эта проблема: bbs.archlinux.org/viewtopic.php?id=207753 Похоже на ошибку в gdm ...
Я закончил тем, что использовал ACL, который является намного лучшим способом управления разрешениями. Нет необходимости менять маску безопасных разрешений по умолчанию.
Кристоф Древет-Дрогует

Ответы:

6

Некоторые приложения Gnome запускаются с помощью systemd --user, в этом случае umask устанавливается systemd 0022независимо от настроенного значения для pam_umask . Я не знаю каких-либо обходных путей, но я открыл проблему на системном трекере github. Эта проблема также сообщается в Gnome bugzilla .

Umask set using pam_umaskработает как положено для приложений, которые не запускаются systemd --user.

В Ubuntu bugzilla предлагается один обходной путь  для размещения переопределений службы systemd для всех уязвимых приложений.


Чтобы исследовать это самостоятельно

Вы можете перечислить процессы, запущенные в вашей системе, в древовидном формате (родительские / дочерние процессы), используя:

pstree -Tapu

Найдите PID для: (1) экземпляра вашей сессии systemd --user ; (2) запущенное им приложение , такое как gedit, которое покажет systemd --user как дочерний процесс ; и (3) процесс в вашем сеансе, не запущенный systemd --user .

Сравните umasks, указанные в procfs :

grep Umask /proc/<pid>/status

Systemd --user себя (1) и процессов не запущенных ею (3) должна иметь правильные биты полномочий , который был установлен на pam_umask . Процессы, запущенные systemd --user (2), будут иметь маску 0022.

sebasth
источник
3

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

$ systemctl --user edit dbus

В открывшемся файле просто напишите:

[Service]
UMask=002 # This is the umask I want to use

Файл сохраняется в .config / systemd / user / dbus.service.d / override.conf и переопределяет umask по умолчанию для dbus, который, как я предполагаю, наследуется от systemd --user, так как dbus запускается им. Просто выйдите из системы и войдите снова, и приложения gnome должны использовать указанный umask. Просто обходной путь, но он работает для меня.

egdoc
источник
2

Вместо этого umaskвы можете использовать usergroupsопцию, для которой pam_umaskу этого пользователя и группы те же разрешения, что и у классического unix-способа совместного использования папок.

# /etc/pam.d/login or
# /etc/pam.d/common-session or system-auth
session optional pam_umask.so usergroups
XAE
источник
1
Если пользователь не является пользователем root и имя пользователя совпадает с именем основной группы , биты группы umask устанавливаются такими же, как биты владельца (примеры: 022 -> 002, 077 -> 007).
Кристоф Древет-Дрогует
Я использую основную группу в качестве группы обмена. С группами пользователей файлы будут создаваться с этой группой пользователей по умолчанию и не будут редактироваться другими пользователями.
Кристоф Древет-Дрогует
1
Однако я вижу способ: я могу использовать группы пользователей и общую вторичную группу, а затем в общем дереве добавить бит «установить группу», чтобы принудительно использовать эту общую группу для всех созданных файлов и папок. Во всяком случае, я попробую на моем компьютере позже. Я не уверен, что gnome все равно позаботится об этом, потому что 0022 всегда принимает значение umask, независимо от того, что работает для tty сессий.
Кристоф Древет-Дрогует
1

Чтобы установить umask по умолчанию для всей системы, вы должны включить его в первую очередь, что довольно хорошо объяснено здесь:

http://manpages.debian.org/cgi-bin/man.cgi?query=pam_umask&sektion=8

Ссылка выше для Debian и Ubuntu, но то же самое для всех других систем Linux.

Чтобы включить его umask (который может быть уже на месте), вам нужно добавить строку в /etc/pam.d/common-session:

session optional pam_umask.so

После включения вы можете установить его в:

/etc/login.defs

Я вижу, вы уже нашли этот файл, поэтому все, что вам нужно сделать, это установить:

# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK           077

И установите его UMASK на 0002 или как хотите.

Это установит значение по умолчанию для всей системы, что означает, что все пользователи будут получать umask оттуда, если они специально не установят иное в своих .profile или .bashrc

ostendali
источник
Спасибо за ваш ответ. Я должен попробовать это. Я не настолько оптимистичен, потому что я уже пробовал этот модуль PAM со встроенным параметром "umask = 0002", и он не работал (хотя для Gnome он работал и для других оболочек входа в систему). Я попробую ваше предложение.
Кристоф Древет-Дрогует
Вы пробовали модуль pam для system-auth, а не common-auth :-)
ostendali
3
Это просто вопрос выбора дистрибутива имен файлов. Я знаю, что Debian использует common-*общие настройки. Arch, как RedHat, использует system-authдля этого файл. Во всяком случае, я пытался ваше предложение о добавлении session optional pam_umask.soи и UMASK 002в , /etc/login.defsкак я ожидал, и как с pam_umask.so umask=0002, он работал на TTY loginсессии (или через SSH) , но Gnome установить 0022биты полномочий , как всегда. Gnome должен использовать внутреннюю настройку umask, или archlinux использует одну… Я попробую другой дистрибутив, чтобы увидеть, возникает ли проблема тоже.
Кристоф Древет-Дрогует
1

Для сеанса входа в систему: добавьте umask 0002в свой $HOME/.profile(или /etc/profile).

Для сеанса Gnome: добавьте umask 0002в свой$HOME/.gnomerc

ctruta
источник
1

РЕДАКТИРОВАТЬ: Чтобы заставить systemd установить umask сессии gnome, я создал файл umask.conf в /etc/systemd/system/display-manager.service.d/ со следующими строками:


[Service]
UMask=0002

После перезагрузки компьютера это позволяет всем процессам user.sliceсоответствовать требуемому umask. Выйти не было достаточно, чтобы изменения вступили в силу, поэтому я бы посоветовал перезагрузить ваш компьютер перед выполнением тестов на umasks процесса.

Info Дополнительная информация:

  • ОС: CentOS7.4
  • DE: Gnome3
jamalm
источник
3
Если он работает, то файла, /etc/systemd/system/gdm.service.d/umask.confсодержащего только один, [Service]\nUMask=0002должно быть достаточно.
Кристоф Древет-Дрогует
И это действительно так! только что проверил это там. Моя / etc / systemd / system / папка содержит символическую ссылку на gdm.service, поэтому я создал display-manager.service.d / umask.conf и добавил строку, это сработало отлично, собираюсь обновить ответ, чтобы включить его. Спасибо you @ ChristopheDrevet-Droguet
Джамальм
0

Просто хотел добавить, что pam_umaskсправочные страницы предоставляют довольно хорошую информацию, чтобы помочь вам выяснить, откуда исходит ваш umask. В частности:

pam_umask - это модуль PAM для установки маски создания режима файла в текущей среде. Маска влияет на разрешения по умолчанию, назначаемые вновь создаваемым файлам.

Модуль PAM пытается получить значение umask из следующих мест в следующем порядке:

·   umask= argument
·   umask= entry of the users GECOS field
·   pri= entry of the users GECOS field
·   ulimit= entry of the users GECOS field
·   UMASK= entry from /etc/default/login
·   UMASK entry from /etc/login.defs

Как кто-то сказал, вы должны установить это в common-sessionфайле в каталоге /etc/pam.d.

Обратите внимание, что логины, которые не используют pam (например, те, которые используют gettyили loginбудут иметь свой umask через login.defs.

Чарльз Аддис
источник
0

При установке Fedora 29 с Gnome я обнаружил, что программы, запускаемые с панели запуска Gnome, оставляют файлы для чтения, другие, 0022. Пэм, по-видимому, использует /etc/login.defs, как указано выше. Однако редактирование маски там, 0077, не изменило поведение Gnome. Я также должен был отредактировать / etc / profile и / etc / bashrc - оба значения вернули значение 0022.

Было бы хорошо, если бы в Fedora было одно место для этого, но записи в / etc / profile и / etc / bashrc по-разному устанавливают маску для пользователей с идентификаторами выше или ниже 200, поэтому кажется, что одна маска не подходит всем.

Хотя на данный момент это исправление, проблема не полностью решена, так как пользователь gnome по-прежнему не может настроить свой собственный umask, поскольку он применяется к приложениям, запускаемым из средства запуска gnome. Кажется, у Gnome должна быть опция config для этого umask. (Может быть, но я не нашел.)

user244488
источник
0

У меня есть обходной путь по крайней мере на Fedora 31:

sudo vi /etc/profile.d/umask.sh
umask <your_umask>

sudo vi /etc/login.defs
UMASK <your_umask>

sudo vi /usr/local/bin/systemd-user
/usr/lib/systemd/systemd --user

sudo chmod a+x /usr/local/bin/systemd-user

sudo vi /usr/lib/systemd/system/user@.service
ExecStart=-/usr/local/bin/systemd-user
Чарльз
источник