С чего начать Первые шаги трек · 15 ступеней
Linux Labs

umask — маска новых файлов и каталогов

5 мин Ubuntu 24.04 · Bash 5.2

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.

text
student@ubuntu:~$ umask
0002
student@ubuntu:~$ touch f; mkdir d; ls -ld f d
drwxrwxr-x 2 student student 4096 Oct 20 06:30 d
-rw-rw-r-- 1 student student    0 Oct 20 06:30 f

Откуда берётся маска

Маску наследует каждый процесс от родителя. В Ubuntu её задают при входе:

  • /etc/login.defs: UMASK 022 — маска по умолчанию;
  • USERGROUPS_ENAB yes там же: если у пользователя своя личная группа с тем же именем, модуль PAM pam_umask (строка в /etc/pam.d/common-session) открывает группе те же права, что владельцу, — получается 002. На root это правило не распространяется, его маска — 022;
  • ~/.profile и ~/.bashrc могут переопределить маску строкой umask 027. В ~/.profile Ubuntu такая строка уже есть, но закомментирована: #umask 022.

Службы systemd маску пользователя не наследуют: им её задают в юните (UMask=).

Рецепты

4

Поменять маску навсегда для себя

bash
echo 'umask 027' >> ~/.profile    # для новых входов
umask 027                         # и сразу в этой оболочке

Общий каталог команды

bash
umask 002                         # новые файлы — с записью для группы

Чтобы файлы ещё и получали группу каталога, а не твою, каталогу нужен setgid-бит. Маска действует на каждого пользователя отдельно: если у коллеги 022, его файлы группе на запись не откроются.

Маска службы

ini
[Service]
UMask=0027

Строка в юните или в drop-in (sudo systemctl edit app) — см. systemd.

Создать один файл с нужными правами

bash
install -m 640 /dev/null report.txt   # пустой файл сразу 640
(umask 077; touch secret.txt)         # маска только для этой команды

Неполадки

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.

Опасно

1

umask 000

Новые файлы получают 666, каталоги 777 — писать в них может любой пользователь машины. Маска наследуется всеми дочерними процессами, поэтому такая строка в профиле открывает всё, что ты создаёшь.

См. также

  • permissions — как читать rwx и числа прав.
  • chmod-chown — поменять права и группу уже созданных файлов.
  • special-bits — setgid каталога: новые файлы получают его группу.
  • users-groups — личная и дополнительные группы пользователя.
  • sudo — команды от имени другого пользователя.
  • bash — файлы запуска, где задают umask.
Загрузка…