Як встановити `umask` на весь сеанс гнома?


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. я намагався

Якщо я поміняю umask вручну в оболонці gnome-terminal, то запускаю з нього додаток, скажімо, gedit, тоді створені ним файли мають потрібні дозволи. Якщо я запускаю gedit з меню gnome, він не стане. Тому моя справа справді встановити umask для сесії gnome, і я не можу знайти, де це зробити.

EDIT (щоб відповісти на коментар Гілла): я використовую 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для користувачів , чиї основний група є ім'ям користувача.

Єдиний файл, який містить 022umask в /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
На архівному форумі є аналогічна тема, яка розглядає проблему: bbs.archlinux.org/viewtopic.php?id=207753 Схоже, помилка в gdm ...

Я в кінцевому рахунку використовував ACL, що є набагато кращим способом контролю дозволів. Не потрібно змінювати маску безпечніших дозволів за замовчуванням.
Крістоф Древет-Дрогует

Відповіді:


6

Деякі програми Gnome запускаються компанією systemd --user, у цьому випадку umask встановлюється системою, 0022незалежно від налаштованого значення pam_umask . Я не знаю жодних обхідних шляхів, але я відкрив питання про системний трекер випуску github. Про це питання також повідомляється про гнома Gnome .

Використання набору Umask pam_umaskпрацює, як очікувалося, для програм, які не запускаються systemd --user.

Програма Ubuntu bugzilla пропонує одне вирішення,  щоб розмістити системні сервісні заміни для всіх застосованих програм.


Щоб розслідувати це самостійно

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

pstree -Tapu

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

Порівняйте umasks, повідомлені в procfs :

grep Umask /proc/<pid>/status

Сам systemd --user (1) і не запущені ним процеси (3) повинні мати правильний umask, який встановив pam_umask . Процеси, запущені systemd --user (2) , матимуть umask 0022.


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 і переосмислює umbusk за замовчуванням dbus, який, я вважаю, успадковується від systemd --user, оскільки dbus запускається ним. Просто вийдіть із системи та увійдіть знову, а програми gnome повинні використовувати вказаний umask. Просто вирішення, але це працює для мене.


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

1
Якщо користувач не є root, а ім'я користувача те саме, що ім'я первинної групи , біти групи umask встановлюються так само, як і біти власника (приклади: 022 -> 002, 077 -> 007).
Крістоф Древет-Дрогует

Я використовую первинну групу як групу спільного використання. З групами користувачів файли будуть створені за цією групою користувачів за замовчуванням і не можуть редагуватися іншими користувачами.
Крістоф Древет-Дрогует

1
Однак я бачу спосіб: я можу використовувати групи користувачів та загальну вторинну групу, а потім на спільне дерево додати біт "set group", щоб примусити цю загальну групу до всіх створених файлів і папок. У всякому разі, я спробую на своєму ПК пізніше. Я не впевнений, що 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


Спасибі за вашу відповідь. Мені доведеться спробувати це. Я не такий оптимістичний, тому що я вже спробував цей модуль PAM з вбудованим параметром "umask = 0002", і він не працював (для Gnome він працював і для інших оболонок входу). Я спробую вашу пропозицію.
Крістоф Древет-Дрогует

ви спробували модуль
пам’яті

3
Це лише питання вибору імен файлів розповсюдження. Я знаю, що debian використовує common-*для загальних налаштувань. Arch, як RedHat, використовує system-authдля цього файл. У всякому разі, я спробував вашу пропозицію додати session optional pam_umask.soі UMASK 002вписати, /etc/login.defsяк я і очікував, і, як і колись pam_umask.so umask=0002, це працювало протягом loginсеансу tty (або через SSH), але Gnome встановив 0022umask, як завжди. Gnome повинен використовувати внутрішній параметр umask, або archlinux використовує одне ... Я спробую інший дистрибутив, щоб побачити, чи виникає проблема.
Крістоф Древет-Дрогует

1

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

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


1

EDIT: Щоб отримати systemd для встановлення umask сесії gnome, я створив файл umask.conf під /etc/systemd/system/display-manager.service.d/ з такими рядками:


[Service]
UMask=0002

Після перезавантаження машини тепер це дозволяє всім процесам user.sliceпідходити до потрібного вам умаска. Вихід із системи був недостатній, щоб зміни відбулися, тому я б радив перезавантажити вашу машину перед тим, як виконувати тести на технологічних умасках.

Додаткова інформація:

  • ОС: CentOS7.4
  • DE: Gnome3

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
jamalm

0

Просто хотілося додати, що в pam_umaskManpages надається досить гарна інформація, яка допоможе вам зрозуміти, звідки береться ваш umask. Конкретно:

pam_umask - це модуль PAM для встановлення маски створення файлового режиму поточного середовища. Umask впливає на стандартні дозволи, призначені новоствореним файлам.

Модуль 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.

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


0

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

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

Незважаючи на те, що це вирішення на даний момент, проблема не вирішена повністю, оскільки користувач gnome все ще не може встановити свій власний umask, оскільки він застосовується до програм, які працюють із запуску gnome. Здається, Gnome повинен мати параметр config для цього umask. (Можливо, так, але я не знайшов.)


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.