umask
Маска создания файлов — определяет права новых файлов и директорий по умолчанию
Описание
Команда umask (user file-creation mode mask) задаёт маску прав, которая применяется при создании новых файлов и директорий. Когда программа создаёт файл, ядро Linux берёт максимально возможные права (666 для файлов, 777 для директорий) и вычитает из них маску umask. Результат — фактические права нового файла.
Это встроенная команда оболочки (shell builtin), а не отдельная программа. Значение umask хранится в процессе оболочки и наследуется дочерними процессами. Изменение umask действует только в текущей сессии оболочки — для постоянного эффекта нужно добавить команду в ~/.bashrc, ~/.profile или системные конфигурационные файлы.
По умолчанию большинство систем используют umask 022, что даёт новым файлам права 644 (rw-r--r--) и новым директориям 755 (rwxr-xr-x). Это разумный баланс: владелец может редактировать, все остальные — только читать.
Синтаксис
Математика umask
Формула: итоговые_права = базовые_права AND (NOT umask)
Таблица популярных значений umask
| umask | Файлы (из 666) | Директории (из 777) | Назначение |
|---|---|---|---|
022 | 644 rw-r--r-- | 755 rwxr-xr-x | По умолчанию на большинстве систем |
027 | 640 rw-r----- | 750 rwxr-x--- | Усиленная безопасность: группа читает, другие не видят |
077 | 600 rw------- | 700 rwx------ | Максимальная приватность: только владелец |
002 | 664 rw-rw-r-- | 775 rwxrwxr-x | Совместная работа: группа может редактировать |
000 | 666 rw-rw-rw- | 777 rwxrwxrwx | Без ограничений (небезопасно) |
Флаги и опции
| Флаг | Описание | Пример |
|---|---|---|
-S |
Показать или задать маску в символьном формате (u=rwx,g=rx,o=rx) вместо числового |
umask -S |
-p |
Вывести команду umask с текущим значением — удобно для сохранения и восстановления |
umask -p |
| (без аргументов) | Показать текущую маску в числовом (восьмеричном) формате | umask |
ЧИСЛО |
Установить маску в числовом восьмеричном формате (3 или 4 цифры) | umask 027 |
СИМВОЛЫ |
Установить маску в символьном формате (как в chmod, но инвертированно) |
umask u=rwx,g=rx,o= |
При установке символьной маски синтаксис похож на
chmod, но логика инвертирована: umask u=rwx,g=rx,o= означает «владелец имеет rwx, группа — rx, остальные — ничего». То есть это описание разрешённых прав, а не маски-запрета. Удобнее запомнить как «что ОСТАНЕТСЯ у новых файлов».
Паттерны использования
Постоянная umask для пользователя
# Добавить в ~/.bashrc или ~/.profile echo 'umask 022' >> ~/.bashrc # Или для повышенной приватности echo 'umask 077' >> ~/.bashrc # Применить сразу без перезапуска source ~/.bashrc
Системная umask для всех пользователей
# Для всех пользователей в /etc/profile # (редактировать от root) sudo nano /etc/profile # Добавить строку: umask 022 # В Ubuntu/Debian также: # /etc/login.defs — UMASK 022 # /etc/pam.d/common-session — pam_umask.so
Временная umask для команды
# Создать файл с нестандартными правами (umask 077 && touch secret.txt) # После скобок umask возвращается к исходной # Создать директорию с максимальной приватностью (umask 077 && mkdir private-dir) # Проверить результат ls -l secret.txt private-dir
umask для совместной работы команды
# Разработчики в группе 'devteam' # Файлы читают все из группы, пишет только автор umask 002 touch shared-file.txt ls -l shared-file.txt # -rw-rw-r-- 1 alice devteam 0 Jun 11 shared-file.txt # владелец и группа могут писать!
Сохранить и восстановить umask
# Сохранить текущую маску OLD_UMASK=$(umask) echo "Saved: $OLD_UMASK" # Временно изменить для операции umask 077 # ... создать секретные файлы ... # Восстановить umask $OLD_UMASK echo "Restored: $(umask)"
Диагностика прав новых файлов
# Проверить, какие права получит новый файл umask # узнать текущую маску: 0022 # Файл: 666 - 022 = 644 # Директория: 777 - 022 = 755 # Практическая проверка touch /tmp/testfile && ls -l /tmp/testfile mkdir /tmp/testdir && ls -ld /tmp/testdir rm /tmp/testfile && rmdir /tmp/testdir
Советы и предупреждения
Изменение
umask в терминале действует только до конца сессии (до закрытия окна). При следующем входе значение сбросится к системному. Для постоянного изменения добавьте umask ЗНАЧЕНИЕ в ~/.bashrc (для bash) или ~/.zshrc (для zsh). Для системного — в /etc/profile или /etc/login.defs.
Даже если
umask равна 000, новые файлы создаются без бита исполнения — максимум 666 (rw-rw-rw-). Ядро Linux намеренно не выдаёт x при создании обычных файлов: чтобы файл стал исполняемым, нужна явная команда chmod +x. Это защита от случайного запуска произвольных файлов.
Распространённое заблуждение:
umask 022 не «устанавливает права 022». Маска убирает биты из максимальных прав. umask 022 означает «убрать бит записи у группы и остальных» — и файл получит 644. Думайте о маске как о «чёрном списке прав»: биты, установленные в маске, будут запрещены в новых файлах.
Часть программ явно вызывает
chmod после создания файла, переопределяя umask. Например, ssh-keygen всегда создаёт приватные ключи с правами 600, независимо от маски. Некоторые редакторы и утилиты резервного копирования делают аналогично. Поэтому umask — это «по умолчанию», но не гарантия для всех программ.