Почему при создании файла его права по умолчанию устанавливаются в 666?

«Почему при создании файла его права по умолчанию устанавливаются в 666?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Число 666 (в восьмеричной системе, что соответствует rw-rw-rw- в символьном представлении) — это базовая маска разрешений для новых обычных файлов в Unix-подобных системах. Она задает максимально возможные разрешения, которые файл мог бы получить.

Однако итоговые права определяются формулой: Фактические_права = Базовая_маска & ~umask (где & — побитовое И, ~ — побитовое НЕ).

Роль umask: umask (user file creation mask) — это маска, которая вычитает (запрещает) определенные биты прав из базовой маски в целях безопасности. Типичное значение umask — 022.

Пример расчета:

# Базовая маска для файла: 666 (в двоичном виде: 110 110 110)
# Значение umask: 022 (в двоичном виде: 000 010 010)
# Инвертируем umask: ~022 = 755 (в двоичном: 111 101 101)
# Применяем побитовое И:
#   110 110 110  (666)
# & 111 101 101  (~022)
# = 110 100 100  (644 в восьмеричной) -> rw-r--r--

$ umask 022
$ touch newfile.txt
$ ls -l newfile.txt
# -rw-r--r-- 1 user group 0 ... newfile.txt  # Права 644

Ключевые моменты:

  • Для каталогов базовая маска — 777 (rwxrwxrwx). С umask=022 новый каталог получит права 755 (rwxr-xr-x).
  • umask — это настройка оболочки (shell) или процесса. Ее можно изменить в сессии (umask 027) или установить глобально в конфигурационных файлах оболочки (.bashrc, .profile).
  • Некоторые программы (например, компиляторы для исполняемых файлов или ssh-keygen) могут явно устанавливать другие права (например, 755 или 600), игнорируя umask.