Права доступа и управление разрешениями: chmod, chown, umask

TIP

Эта статья — часть серии Linux administration, посвящённой самостоятельному администрированию Linux, Self-Hosting и DevOps. Без понимания прав доступа — ни один сервер не будет ни безопасным, ни стабильным.

Привет, Самохостеры! Сегодня мы погрузимся в одну из самых фундаментальных, но порой самых запутанных тем в мире Linux: права доступа и управление разрешениями. Если вы хотите уверенно разворачивать и поддерживать свои сервисы, то без понимания chmod, chown и umask никуда. Это не просто «настройки», это основа безопасности и стабильности вашей системы, особенно в эпоху самостоятельного управления инфраструктурой и автоматизации!

Почему это так важно? Потому что в Linux, как и в любом цивилизованном обществе, не все могут делать все, что им заблагорассудится. Пользователям должны быть предоставлены только те права доступа, которые необходимы им для выполнения работы — это золотое правило, известное как принцип наименьших привилегий! Мы же не хотим, чтобы кто-то случайно (или специально) сломал наш с любовью настроенный сервер, верно?

📌 О чём эта статья?

Права доступа в Linux — это основа безопасности и изоляции. Они определяют, кто может читать, писать или запускать файлы и директории.

В этой статье мы подробно разберём:

  • Как устроены права доступа в Linux
  • Что делают команды chmod, chown, umask
  • Символьная и числовая (восьмеричная) нотация
  • Специальные права: setuid, setgid, sticky bit
  • Практические примеры и лучшие практики
  • Типичные ошибки и как их избежать

🧩 Основы: кто, что и как может делать?

Прежде чем мы перейдем к командам, давайте вспомним, что в мире Linux абсолютно всё является файлом. Да, даже каталоги, которые в Windows называются папками, здесь тоже файлы. Просто особые! Эта философия — ключ к пониманию того, как работают права доступа.

В Linux права доступа применяются к трем категориям пользователей:

КатегорияОписание
u (user)Владелец файла
g (group)Группа, которой принадлежит файл
o (other)Все остальные пользователи
a (all)Все три категории (u+g+o)

И три типа разрешений:

ПравоСимволОписание
ReadrЧтение файла / просмотра содержимого директории
WritewЗапись в файл / создание/удаление файлов в директории
ExecutexЗапуск файла как программы / вход в директорию

📋 Как посмотреть права?

Команда ls -l показывает права:

$ ls -l file.txt
-rw-r--r-- 1 alice developers 1024 Apr 5 12:00 file.txt

Разберём по частям:

  • -rw-r--r-- — права доступа
  • 1 — количество жёстких ссылок
  • alice — владелец (user)
  • developers — группа
  • 1024 — размер
  • Apr 5 12:00 — дата
  • file.txt — имя

INFO

Первый символ:

  • - — обычный файл
  • d — директория
  • l — символическая ссылка
  • c — символьное устройство
  • b — блочное устройство

🔧 chmod — изменение прав доступа

Способы задания прав:

1. Символьная нотация

Символьный режим проще для понимания новичками, так как он использует буквы и знаки операций.

chmod u+x script.sh        # Владелец получает право на выполнение
chmod g+w file.txt         # Группа получает право на запись
chmod o-r config.conf      # Остальные теряют право на чтение
chmod a+r public.txt       # Все получают право на чтение
chmod go-rx private/       # Группа и другие теряют чтение и выполнение

2. Числовая (восьмеричная) нотация

Каждое право — бит:

  • r = 4
  • w = 2
  • x = 1

Сумма даёт значение для одной категории:

ПраваРасчётЗначение
r--4+0+04
rw-4+2+06
r-x4+0+15
rwx4+2+17

Info

Когда использовать символьный режим, а когда числовой? Символьный режим удобен, когда вам нужно изменить одно или два разрешения, не затрагивая остальные. Например, просто добавить право на выполнение (chmod +x). Числовой режим часто предпочтительнее для установки полного набора разрешений с нуля или при автоматизации в скриптах, где важна точность.

Пример:

chmod 644 file.txt     # u=rw-, g=r--, o=r-- 
chmod 755 script.sh    # u=rwx, g=rx, o=rx
chmod 700 secret.key   # Только владелец: rwx

TIP

Часто используемые комбинации:

  • 644 — стандартный файл (чтение для всех, запись только владельцу)
  • 755 — исполняемый файл или скрипт
  • 600 — приватный файл (например, SSH-ключ)
  • 700 — приватная директория

🧑‍💼 chown — смена владельца и группы

Формат:

chown user:group файл

Примеры:

sudo chown alice file.txt                    # Только владелец
sudo chown alice:developers file.txt         # Владелец и группа
sudo chown :developers file.txt              # Только группа
sudo chown -R alice:developers dir/          # Рекурсивно для директории

WARNING

Только root или владелец может изменить владельца файла.
Обычные пользователи могут только изменять группу файла, если они входят в неё.


🌀 umask — маска создания файлов

Контролируем разрешения по умолчанию (для ленивых, но умных!)

Представьте: вы создаете файл, а он автоматически получает определенные права. Как это происходит? В дело вступает umask (user file-creation mask) — маска создания файлов пользователя.

umask — это четырехзначное восьмеричное число, которое определяет, какие биты разрешений удаляются из полных разрешений по умолчанию при создании нового файла или каталога.

Одним словом —umask определяет по умолчанию отнимаемые права при создании новых файлов.

Как это работает?

По умолчанию:

  • Файлы создаются по умолчанию с 666 (rw-rw-rw-)
  • Директории по умолчанию — с 777 (rwxrwxrwx)

umask вычитает права. Например:

$ umask
022

Означает:

  • Владелец: все права (не трогаем)
  • Группа: -w → 6-2=4, 7-2=5
  • Другие: -w → 6-2=4, 7-2=5

Результат:

  • Файл: 644 (rw-r—r—)
  • Директория: 755 (rwxr-xr-x)

Установка umask

Временно:

umask 027

Постоянно — в ~/.bashrc, /etc/profile или ~/.profile:

umask 027  # Группа: r--, другие: ---

INFO

077 — строгая маска: только владелец имеет доступ.
Полезно для серверов с несколькими пользователями.


🔐 Специальные права доступа (SUID, SGID, Sticky Bit)

Помимо базовых rwx, существуют специальные биты разрешений, которые могут показаться экзотикой, но играют важную роль.

1. setuid (Set User ID)

Файл с setuid выполняется от имени владельца, а не пользователя.

Пример: passwd — меняет /etc/shadow, но запускается обычным пользователем:

-rwsr-xr-x 1 root root /usr/bin/passwd

s вместо x у владельца.

Установка:

chmod u+s file
chmod 4755 file   # 4 = setuid

WARNING

setuid на скриптах не работает из соображений безопасности.
Используйте только для бинарных исполняемых файлов.


2. setgid (Set Group ID)

Для файлов: выполняется от имени группы-владельца.
Для директорий: новые файлы наследуют группу директории.

Пример:

mkdir shared
chmod g+s shared
# Все новые файлы в shared будут иметь группу владельца shared

Установка:

chmod g+s dir/
chmod 2775 dir/   # 2 = setgid

3. Sticky Bit

Применяется к директориям. Разрешает удалять файлы только их владельцам, даже если директория доступна для записи всем.

Пример: /tmp

drwxrwxrwt 12 root root /tmp

t в конце.

Установка:

chmod +t /path/to/dir
chmod 1777 /path/to/dir   # 1 = sticky bit

🛠️ Практические примеры

Пример 1: Настройка директории для команды

sudo mkdir /srv/project
sudo chown alice:developers /srv/project
sudo chmod 2775 /srv/project   # setgid + rwx для группы
# Теперь все файлы будут иметь группу developers

Пример 2: Защита SSH-ключа

chmod 600 ~/.ssh/id_rsa
chmod 700 ~/.ssh
# Иначе SSH будет ругаться: "Ignoring private key"

Пример 3: Общая директория с sticky bit

sudo mkdir /shared
sudo chmod 1777 /shared   # Все могут писать, но удалять — только свои

⚠️ Типичные ошибки и как их избежать

ОшибкаПоследствияРешение
chmod 777 fileПолный доступ всем — крайне небезопасноИспользуйте 644 или 755
chmod -R 777 /var/wwwУязвимость безопасностиНастраивайте права точно
chown без sudo”Operation not permitted”Только root может менять владельца
Забытый setuid на вредоносном файлеЭскалация привилегийРегулярно проверяйте: find / -perm -4000 -type f 2>/dev/null

🔍 Диагностика и проверка

# Найти файлы с setuid
find / -perm -4000 -type f 2>/dev/null
 
# Найти файлы с setgid
find / -perm -2000 -type f 2>/dev/null
 
# Найти файлы с sticky bit
find / -perm -1000 -type d 2>/dev/null
 
# Проверить права на директорию
namei -l /path/to/deep/dir

INFO

namei — полезная утилита для отладки прав в глубоких путях.


📚 Рекомендуемые ресурсы


✅ Заключение

Права доступа — это не просто цифры, а фундамент безопасности Linux. Теперь вы знаете:

  • Как читать и изменять права с помощью chmod и chown
  • Что такое umask и как его настроить
  • Как использовать специальные права: setuid, setgid, sticky bit
  • Как избегать типичных ошибок

QUOTE

“777 — это не решение. Это признание поражения.”
— Системное амплуа

Источники: man7.org, tldp.org, archwiki.org, nist.gov, sudo.ws