linux permissions

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 [ОПЦИИ] [МАСКА]
# Посмотреть текущую маску (числовой формат) umask # 0022 # Посмотреть текущую маску (символьный формат) umask -S # u=rwx,g=rx,o=rx # Установить маску числом umask 022 umask 027 umask 077 # Установить маску в символьном формате umask u=rwx,g=rx,o= umask g-w,o-rwx

Математика umask

Формула: итоговые_права = базовые_права AND (NOT umask)

# Пример с umask 022: # Файл: 666 (rw-rw-rw-) — базовые права # umask: 022 (----w--w-) — что вычитаем # Итог: 644 (rw-r--r--) — реальные права # Директория: 777 (rwxrwxrwx) — базовые права # umask: 022 (----w--w-) — что вычитаем # Итог: 755 (rwxr-xr-x) — реальные права # Пример с umask 027: # Файл: 666 - 027 = 640 (rw-r-----) # Директория: 777 - 027 = 750 (rwxr-x---)

Таблица популярных значений umask

umaskФайлы (из 666)Директории (из 777)Назначение
022644 rw-r--r--755 rwxr-xr-xПо умолчанию на большинстве систем
027640 rw-r-----750 rwxr-x---Усиленная безопасность: группа читает, другие не видят
077600 rw-------700 rwx------Максимальная приватность: только владелец
002664 rw-rw-r--775 rwxrwxr-xСовместная работа: группа может редактировать
000666 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 в терминале действует только до конца сессии (до закрытия окна). При следующем входе значение сбросится к системному. Для постоянного изменения добавьте umask ЗНАЧЕНИЕ в ~/.bashrc (для bash) или ~/.zshrc (для zsh). Для системного — в /etc/profile или /etc/login.defs.
Совет: бит исполнения никогда не выдаётся автоматически
Даже если umask равна 000, новые файлы создаются без бита исполнения — максимум 666 (rw-rw-rw-). Ядро Linux намеренно не выдаёт x при создании обычных файлов: чтобы файл стал исполняемым, нужна явная команда chmod +x. Это защита от случайного запуска произвольных файлов.
Осторожно: umask не задаёт права явно — она их ограничивает
Распространённое заблуждение: umask 022 не «устанавливает права 022». Маска убирает биты из максимальных прав. umask 022 означает «убрать бит записи у группы и остальных» — и файл получит 644. Думайте о маске как о «чёрном списке прав»: биты, установленные в маске, будут запрещены в новых файлах.
Осторожно: некоторые программы игнорируют umask
Часть программ явно вызывает chmod после создания файла, переопределяя umask. Например, ssh-keygen всегда создаёт приватные ключи с правами 600, независимо от маски. Некоторые редакторы и утилиты резервного копирования делают аналогично. Поэтому umask — это «по умолчанию», но не гарантия для всех программ.