← Назад к вопросам

Что такое umask?

1.0 Junior🔥 132 комментариев
#Другое

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое umask?

Umask (User file creation MASK) — это встроенная команда и концепция в Unix-подобных операционных системах (Linux, macOS, BSD), которая определяет маску прав доступа по умолчанию для вновь создаваемых файлов и каталогов. Проще говоря, umask указывает системе, какие права доступа следует «вычесть» (замаскировать) из максимально возможных прав при создании нового объекта в файловой системе. Это критически важный механизм управления безопасностью и доступом в среде DevOps, так как он обеспечивает корректное наследование прав для скриптов, конфигурационных файлов, логов и приложений.

Как работает umask: Теория прав доступа

В Linux права доступа к файлам представлены в виде трех групп по три бита:

  • r (read) — чтение (4).
  • w (write) — запись (2).
  • x (execute) — выполнение (1).

Права вычисляются в восьмеричной системе (цифры 0-7). Полные права на файл — 666 (rw-rw-rw-), а на каталог — 777 (rwxrwxrwx). Umask, которая также задается восьмеричным числом, вычитается из этих максимальных значений.

Формула: Фактические права = Максимальные права - umask

Однако технически это не арифметическое, а побитовое логическое "И НЕ" (AND NOT). Umask «гасит» соответствующие биты прав.

Примеры на практике

Стандартная umask для обычных пользователей0002, для пользователя root — 0022.

  • umask 0022: Самый распространенный вариант.
    *   Для файла: `666 - 022 = 644` -> `rw-r--r--` (владелец читает/пишет, группа и остальные — только читают).
    *   Для каталога: `777 - 022 = 755` -> `rwxr-xr-x` (владелец читает/пишет/входит, группа и остальные — читают/входят).

  • umask 0002 (используется в группах с совместным доступом):
    *   Для файла: `666 - 002 = 664` -> `rw-rw-r--` (владелец и группа читают/пишут, остальные — только читают).
    *   Для каталога: `777 - 002 = 775` -> `rwxrwxr-x`.

  • umask 0077 (максимально строгий):
    *   Для файла: `666 - 077 = 600` -> `rw-------` (только владелец).
    *   Для каталога: `777 - 077 = 700` -> `rwx------`.

Работа с umask в командной строке

# Показать текущую umask в восьмеричном формате
umask
# Вывод: 0022

# Показать текущую umask в символьном (правовом) формате
umask -S
# Вывод: u=rwx,g=rx,o=rx

# Установить umask для текущей сессии shell
umask 0027

# Проверить создание файла и каталога с новой umask
touch новый_файл.txt
mkdir новый_каталог
ls -la новый_файл.txt новый_каталог
# Вывод:
# -rw-r-----  1 user group    0 Apr 10 10:00 новый_файл.txt   # Права 640
# drwxr-x---  2 user group 4096 Apr 10 10:00 новый_каталог/   # Права 750

Значение umask в DevOps-инфраструктуре

Для инженера DevOps понимание и управление umask — обязательный навык, так как это влияет на:

  1. Безопасность (Security): Предотвращает случайное создание файлов с излишними правами (например, rw-rw-rw-), что могло бы позволить неавторизованным пользователям или процессам модифицировать критические конфигурации (/etc/), скрипты или логи.
  2. Совместная работа (Collaboration): Правильная настройка umask (например, 0002) в рамках одной группы разработки или администрирования обеспечивает корректный доступ к общим ресурсам (исходный код, данные) без необходимости ручной правки chmod после каждого создания.
  3. Автоматизация и оркестрация:
    *   **Скрипты (bash, Python)**: Файлы, создаваемые скриптами автоматизации (логи, временные файлы, дампы), должны иметь безопасные права по умолчанию.
    *   **Конфигурация CI/CD (Jenkins, GitLab CI)**: Агенты и пайплайны часто создают артефакты сборки, и umask гарантирует их корректную доступность для следующих шагов.
    *   **Контейнеризация (Docker)**: Umask наследуется из базового образа или хост-системы. Её нужно явно задавать в `Dockerfile` для безопасности контейнера.
    ```dockerfile
    # Пример установки umask в Dockerfile
    RUN echo "umask 0027" >> /etc/profile
    ```
    *   **Управление конфигурацией (Ansible, Chef, Puppet)**: Эти инструменты могут глобально устанавливать umask через модули/ресурсы (например, в `/etc/profile`, `/etc/bashrc` или в PAM-модулях), обеспечивая единую политику на всех серверах.
  1. Устранение неполадок (Troubleshooting): Ошибки вида «Permission denied» при запуске свежескомпилированного бинарного файла или доступе к новому файлу логов часто связаны с неправильной umask (например, 022 вместо 002 в групповом проекте).

Где настраивается umask глобально?

Umask устанавливается на разных уровнях:

  • Системный уровень: В файлах /etc/profile, /etc/bash.bashrc, или, что более корректно, через PAM-модуль pam_umask.so в /etc/pam.d/common-session. Это влияет на всех пользователей.
  • Уровень пользователя: В файлах ~/.profile, ~/.bashrc.
  • Уровень сессии/процесса: Может быть установлена в самом скрипте или в Systemd-юните службы через директиву UMask в секции [Service].
# Пример настройки umask для службы в Systemd
[Service]
...
UMask=0027
...

Таким образом, umask — это не просто команда, а фундаментальный системный параметр, который DevOps-инженер должен осознанно конфигурировать для обеспечения безопасности, согласованности и бесперебойной работы автоматизированной инфраструктуры. Игнорирование umask может привести к уязвимостям или проблемам с совместным доступом в распределённых системах.