umask — маска новых файлов и каталогов
umask — маска процесса: какие права снять с нового файла (из 666) и каталога (из 777) при создании.
Шпаргалка
6 команд Версия для печати-
umaskтекущая маска: 0002 или 0022 -
umask -Sто же буквами: u=rwx,g=rwx,o=rx -
umask 027маска для этой оболочки и её детей -
touch f; mkdir d; ls -ld f dпроверить на новых файлах -
grep -E '^(UMASK|USERGROUPS_ENAB)' /etc/login.defs -
sudo sh -c umaskмаска команды от root: 0022
Обзор
Программа, создающая файл, просит права: обычно 666 (rw-rw-rw-) для файла и
777 (rwxrwxrwx) для каталога. umask — маска процесса: биты из
неё ядро снимает с запрошенных прав. Существующие файлы маска не трогает.
| Маска | Файл | Каталог | Кто может писать |
|---|---|---|---|
022 |
644 rw-r--r-- |
755 rwxr-xr-x |
только владелец |
002 |
664 rw-rw-r-- |
775 rwxrwxr-x |
владелец и группа |
027 |
640 rw-r----- |
750 rwxr-x--- |
владелец; группа читает |
077 |
600 rw------- |
700 rwx------ |
только владелец, остальным ничего |
Это не вычитание, а снятие битов: при маске 033 файл получит 644, а не 633.
Право x файлу маска не даёт никогда — его ставит chmod +x.
Откуда берётся маска
Маску наследует каждый процесс от родителя. В Ubuntu её задают при входе:
/etc/login.defs:UMASK 022— маска по умолчанию;USERGROUPS_ENAB yesтам же: если у пользователя своя личная группа с тем же именем, модуль PAMpam_umask(строка в/etc/pam.d/common-session) открывает группе те же права, что владельцу, — получается002. На root это правило не распространяется, его маска —022;~/.profileи~/.bashrcмогут переопределить маску строкойumask 027. В~/.profileUbuntu такая строка уже есть, но закомментирована:#umask 022.
Службы systemd маску пользователя не наследуют: им её задают в юните (UMask=).
Рецепты
4Общий каталог команды
Чтобы файлы ещё и получали группу каталога, а не твою, каталогу нужен
setgid-бит. Маска действует на каждого пользователя отдельно:
если у коллеги 022, его файлы группе на запись не откроются.
Маска службы
Строка в юните или в drop-in (sudo systemctl edit app) — см. systemd.
Создать один файл с нужными правами
Неполадки
5Файл в общем каталоге создаётся без записи для группы
У создателя маска 022: так бывает у root (и у sudo без -u), у служб и при
входе, где ~/.profile задаёт umask 022. Посмотри umask в той оболочке, где
создают файл. Для уже созданных — chmod g+w.
Какая маска у команды от другого пользователя
sudo -u alice открывает сессию PAM, и pam_umask ставит маску alice:
sudo -u alice sh -c umask печатает 0002. sudo -iu alice вдобавок читает её
~/.profile — строка umask там победит. runuser модуля pam_umask не
вызывает, поэтому runuser -l alice -c umask печатает 0022.
Маска поменялась, а старые файлы те же
Маска действует только при создании. Права существующих файлов меняет chmod.
Скрипт создался без права на запуск
Маска не даёт файлам x. После создания скрипта — chmod +x script.sh.
bash: umask: 9: octal number out of range
Маска пишется восьмеричными цифрами 0–7: 022, 027, 077.
Опасно
1umask 000
Новые файлы получают 666, каталоги 777 — писать в них может любой
пользователь машины. Маска наследуется всеми дочерними процессами, поэтому такая
строка в профиле открывает всё, что ты создаёшь.
См. также
- permissions — как читать rwx и числа прав.
- chmod-chown — поменять права и группу уже созданных файлов.
- special-bits — setgid каталога: новые файлы получают его группу.
- users-groups — личная и дополнительные группы пользователя.
- sudo — команды от имени другого пользователя.
- bash — файлы запуска, где задают umask.
Есть неточность? Сообщить об ошибке в статье