Права доступа и управление разрешениями: 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 ) |
И три типа разрешений:
Право | Символ | Описание |
---|---|---|
Read | r | Чтение файла / просмотра содержимого директории |
Write | w | Запись в файл / создание/удаление файлов в директории |
Execute | x | Запуск файла как программы / вход в директорию |
📋 Как посмотреть права?
Команда 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
= 4w
= 2x
= 1
Сумма даёт значение для одной категории:
Права | Расчёт | Значение |
---|---|---|
r-- | 4+0+0 | 4 |
rw- | 4+2+0 | 6 |
r-x | 4+0+1 | 5 |
rwx | 4+2+1 | 7 |
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
— полезная утилита для отладки прав в глубоких путях.
📚 Рекомендуемые ресурсы
- 📘 The Linux Documentation Project — File Permissions
- 📖 ArchWiki — Permissions
- 🛠️ man chmod(1), chown(1), umask(2)
- 🧰 ExplainShell.com — расшифровка сложных команд
- 📄 NIST SP 800-123 — Guide to General Server Security — рекомендации по правам
✅ Заключение
Права доступа — это не просто цифры, а фундамент безопасности Linux. Теперь вы знаете:
- Как читать и изменять права с помощью
chmod
иchown
- Что такое
umask
и как его настроить - Как использовать специальные права:
setuid
,setgid
,sticky bit
- Как избегать типичных ошибок
QUOTE
“777 — это не решение. Это признание поражения.”
— Системное амплуа
Источники: man7.org, tldp.org, archwiki.org, nist.gov, sudo.ws