Как установить общесистемную маску?

Я работаю в лаборатории, где мы работаем под Linux (Debian и Ubuntu). Имена пользователей и группы обрабатываются NIS и yp. У нас есть несколько общих пользователей, к которым у каждого есть доступ, которые запускают эксперименты, а затем у каждого из нас есть свои собственные пользователи, кроме того, есть общая группа, членами которой мы все являемся.

Как я могу сделать так, чтобы все файлы и каталоги на общем /home/ диске (NFS) читались / записывались (/ исполнялись) пользователем / группой? В основном я хочу

chmod -R 664 /home
chgrp -R commongroup /home

или эквивалентно umask 0002.

Но выполнение вышеуказанных команд исправляет только текущие файлы в папках, а umask работает только для отдельных пользователей и должен запускаться каждый раз, когда пользователь входит в систему, т.е. в файле .bashrc (и будет ли это работать для режима изменений через gnome?). Есть ли общесистемная команда или параметр, который я мог бы использовать, чтобы убедиться, что наша общая группа имеет доступ на запись к общим файлам?


person HansHarhoff    schedule 19.04.2012    source источник
comment
Я считаю, что вы можете использовать setfacl для рекурсивной установки (и поддержания) настроек доступа к каталогу. linuxcommand.org/man_pages/setfacl1.html   -  person tMC    schedule 19.04.2012
comment
Вы не хотите chmod -R 644 /home: это удаляет бит eXecute из каталогов, что делает их недоступными для поиска.   -  person ephemient    schedule 19.04.2012
comment
Продолжение комментария tMC: если вы хотите, чтобы это было для определенных каталогов (и, возможно, подкаталогов), а не привязываете его ко всем (!) Файлам и каталогам, принадлежащим определенному пользователю, используйте ACL. Вот хороший ответ на аналогичный вопрос.   -  person cfi    schedule 15.03.2014


Ответы (3)


И Debian, и Ubuntu поставляются с pam_umask. Это позволяет вам настроить umask в /etc/login.defs и применить их в масштабе всей системы, независимо от того, как пользователь входит в систему.

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

session optional pam_umask.so

или он уже может быть включен. Затем отредактируйте /etc/login.defs и измените строку UMASK на

UMASK           002

(по умолчанию 022).

Обратите внимание, что пользователи могут по-прежнему переопределять umask в своих ~/.profile или ~/.bashrc или аналогичных, но (по крайней мере, в новых установках Debian и Ubuntu) не должно быть никакого переопределения umask в /etc/profile или /etc/bash.bashrc. (Если есть, просто удалите их.)

person ephemient    schedule 19.04.2012
comment
В 12.04 он включен по умолчанию. - person Ken J; 06.03.2013
comment
В debian 7 этот параметр не включен по умолчанию. - person earthmeLon; 09.04.2014
comment
как установить индивидуальную маску для одного конкретного пользователя? - person brauliobo; 01.08.2014
comment
Более полную информацию я дал в отдельном ответе. Этот ответ сработает, но я не думаю, что это лучший способ. - person Yitz; 18.03.2015
comment
Означает ли это, что вы не можете установить umask для доступа только к общему ресурсу NFS? Даже на сервере? Итак, если вам нужна другая маска umask для обычного доступа к локальным файловым системам и для монтирования NFS, вам нужно создать дополнительного пользователя? - person Xennex81; 07.07.2016

Сначала убедитесь, что установлен пакет pam-modules. Это делает доступным модуль pam_umask. Затем убедитесь, что /etc/pam.d/common-session имеет строку вида

session optional pam_umask.so

так что pam_umask включен.

Теперь, согласно pam_umask странице руководства, маска umask по умолчанию определяется при входе в систему путем проверки каждого из следующих мест по порядку:

  1. Жесткое общесистемное значение по умолчанию, установленное в /etc/pam.d/common-session. Чтобы установить это таким образом, замените строку из этого файла, упомянутого выше, на это:

    session optional pam_umask.so umask=002
    
  2. Запись в поле GECOS отдельного пользователя в /etc/passwd переопределяет программные общесистемные значения по умолчанию для этого конкретного пользователя. Создайте эту запись, используя команду формы:

    chfn --other='umask=002' username
    
  3. Строка формы UMASK=002 в /etc/default/login (вам может потребоваться создать этот файл) устанавливает мягкое общесистемное значение по умолчанию.

  4. Значение UMASK из /etc/login.defs. Это значение также используется для чего-то еще (вычисления разрешений в домашнем каталоге нового пользователя, который создается; см. Комментарии в /etc/login.defs для более подробной информации). Поэтому лучше не полагаться на это при установке umask по умолчанию для обычных входов в систему, чтобы все было отдельно.

Поэтому в вашем случае вы должны настроить это либо в /etc/default/login, если вы хотите, чтобы можно было переопределить настройку для отдельных пользователей, либо установите его в /etc/pam.d/common-session, как описано выше, если вы хотите, чтобы он был одинаковым для всех пользователей.

Обратите внимание, что даже с жесткой настройкой по умолчанию пользователи все равно могут изменить значение по умолчанию umask вручную, используя команду umask в приглашении оболочки или в своем .profile сценарии.

Также обратите внимание, что традиционный способ Unix установить это значение по умолчанию - добавить команду umask к /etc/profile, и это также будет работать. Но это не рекомендуемый способ настройки подобных вещей в Ubuntu, потому что им сложно надежно управлять с помощью скриптов и графического интерфейса.

Обратите внимание, к сожалению, этот перестал работать для любого приложения, которое было преобразовано для запуска через systemd --user.

person Yitz    schedule 18.03.2015
comment
Есть USERGROUPS_ENAB параметры, которые в некоторых случаях могут изменить 022 на 002. - person Ivan Black; 13.07.2016
comment
В Ubuntu Server 16.04.1 пакет libpam-modules содержит модуль pam_umask. (Команда dpkg-query --search /lib/x86_64-linux-gnu/security/pam_umask.so печатает libpam-modules:amd64: /lib/x86_64-linux-gnu/security/pam_umask.so.) - person Derek Mahar; 31.10.2016
comment
/etc/defaults не существует в Ubuntu Server 16.04.1. Может ли правильный путь быть /etc/default/login? - person Derek Mahar; 31.10.2016
comment
Отличный и полный ответ! - person kheraud; 22.01.2018
comment
Это работает и для Ubuntu 18.04? Моя не работает в 18.04. - person Smile; 24.02.2019
comment
Я вообще не вижу преимуществ использования pam_umask? Я считаю, что проще просто установить umask в /etc/profile и необязательно ~/.profile. В чем преимущество использования pam-umask? - person MrCalvin; 03.04.2021
comment
Кажется, что /etc/profile вызывается только при входе пользователя в систему с помощью оболочки, тогда как pam_umask всегда устанавливает umask, правильно? - person MrCalvin; 03.04.2021

Для согласования групповых прав на сервере установленный бит gid (один из «липких битов») можно рассматривать как дополнительную опцию.

Если общий каталог связан с группой, запуск (с использованием root): chmod -R 2775 folder_for_the_group может быть интересным.

Для любого нового файла, созданного в папке, создатель будет владельцем, но группа будет указана автоматически (если создатель является частью группы).

Сетка прав теперь отображается как -rwxrwsr-x +

person speedstream    schedule 03.09.2016