Понимание разрешений файлов Linux и способы их управления
Разрешения файлов Linux — один из наиболее фундаментальных и наиболее неправильно понимаемых аспектов администрирования системы. Независимо от того, управляете ли вы производственным веб-сервером, развертываете приложения или пишете скрипты автоматизации, твердое понимание модели разрешений Linux является обязательным. Если вы ошибетесь, вы рискуете утечкой данных, неудачным развертыванием или заблокированными сервисами. Если вы все сделаете правильно, у вас будет мощная, детализированная система безопасности, работающая в вашу пользу.
Это руководство охватывает все, что вам нужно знать: как работает модель разрешений, как читать и изменять разрешения, как управлять правами собственности и как работать с расширенными битами разрешений, такими как SUID, SGID и sticky bit.
Модель разрешений файлов Linux объяснена
Каждому файлу и каталогу в системе Linux назначен набор прав доступа. Эти права разделены между тремя классами пользователей и тремя типами разрешений.
Три класса пользователей
| Класс | Описание |
|---|---|
| владелец | Пользователь, который владеет файлом |
| группа | Все пользователи, принадлежащие назначенной группе файла |
| остальные | Все остальные в системе |
Три типа разрешений
| Разрешение | Символ | Значение |
|---|---|---|
| чтение | r | Просмотр содержимого файла или список содержимого каталога |
| запись | w | Изменение файла или каталога |
| выполнение | x | Запуск файла как программы или вход/обход каталога |
Вместе эти девять битов (три класса × три разрешения) определяют полный профиль управления доступом для каждого объекта в файловой системе.
Как просмотреть разрешения файлов с помощью ls -l
Самый быстрый способ проверить разрешения — использовать команду ls -l:
ls -l myscript.shПример вывода:
-rwxr-xr-- 1 alice devs 2048 Jan 25 10:00 myscript.shВот как читать строку разрешений символ за символом:
| Символы | Значение |
|---|---|
- | Тип файла (- = обычный файл, d = директория, l = символическая ссылка) |
rwx | Разрешения владельца: чтение, запись, выполнение |
r-x | Разрешения группы: чтение, выполнение (без записи) |
r-- | Разрешения остальных: только чтение |
Итак, в этом примере alice (владелец) имеет полный доступ, члены группы devs могут читать и выполнять файл, а все остальные могут только его читать.
Изменение прав доступа с chmod
Команда chmod изменяет права доступа к файлам. Она поддерживает два режима: символический и числовой (восьмеричный).
Символический режим
Символический режим использует буквы и операторы для добавления (+), удаления (-) или установки (=) прав доступа:
chmod u+x myscript.sh # Add execute permission for the owner
chmod g-w myscript.sh # Remove write permission from the group
chmod o=r myscript.sh # Set read-only for others (exactly)
chmod a+x myscript.sh # Add execute for all (owner, group, others)Целевые классы: u (пользователь/владелец), g (группа), o (остальные), a (все).
Числовой (восьмеричный) режим
Каждый тип прав имеет числовое значение: r = 4, w = 2, x = 1. Вы складываете их вместе, чтобы получить одну цифру для каждого класса.
| Восьмеричная | Двоичная | Права доступа |
|---|---|---|
7 | 111 | rwx |
6 | 110 | rw- |
5 | 101 | r-x |
4 | 100 | r-- |
0 | 000 | --- |
Распространённые примеры:
chmod 755 myscript.sh # Owner: rwx | Group: r-x | Others: r-x
chmod 644 file.txt # Owner: rw- | Group: r-- | Others: r--
chmod 700 script.sh # Owner: rwx | Group: --- | Others: ---
chmod 600 secret.key # Owner: rw- | Group: --- | Others: ---> Краткая справка: 755 — стандарт для общедоступных скриптов и каталогов. 644 — стандарт для читаемых файлов конфигурации. 600 идеален для приватных ключей и конфиденциальных учётных данных.
Управление правами собственности с помощью chown и chgrp
Разрешения имеют смысл только в контексте права собственности. Команды chown и chgrp позволяют назначить файлы правильному пользователю и группе.
Изменить владельца файла
chown alice file.txtИзменить группу
chgrp devs file.txtИзменить владельца и группу одновременно
chown bob:admins file.txtПрименить изменения рекурсивно
Флаг -R применяет изменения прав собственности к каталогу и всему его содержимому — это необходимо при настройке корневых каталогов веб-сервера:
chown -R www-data:www-data /var/www/html/Это критический шаг при развертывании веб-приложений в среде VPS Hosting, обеспечивающий правильный доступ процесса веб-сервера к файлам.
Специальные биты разрешений: SUID, SGID и Sticky Bit
Помимо стандартных девяти битов разрешений, Linux поддерживает три специальных режима, которые важным образом изменяют поведение по умолчанию.
1. SUID — Set User ID
Применяется к: Исполняемым файлам
Когда бит SUID установлен на исполняемый файл, он запускается с привилегиями владельца файла, а не пользователя, который его запустил.
chmod u+s /usr/bin/passwdls -l вывод:
-rwsr-xr-x 1 root root 54256 Jan 10 08:00 /usr/bin/passwdОбратите внимание на s вместо x владельца. Вот как /usr/bin/passwd может обновить /etc/shadow (файл, принадлежащий root) даже при запуске обычным пользователем.
> Примечание безопасности: Будьте очень осторожны при установке SUID на пользовательские скрипты. Неправильно настроенный SUID бинарный файл — это классический вектор повышения привилегий.
2. SGID — Set Group ID
Применяется к: Исполняемым файлам и директориям
- На файлах: Файл запускается с привилегиями группы владельца файла.
- На директориях: Новые файлы, созданные внутри директории, автоматически наследуют группу директории, а не первичную группу создающего пользователя.
chmod g+s /opt/projectls -l вывод:
drwxr-sr-x 2 alice devs 4096 Jan 25 10:00 /opt/projectSGID на директориях чрезвычайно полезен для общих папок разработки, где несколько членов команды нуждаются в согласованном владении группой для всех новых файлов.
3. Sticky Bit
Применяется к: Директориям
Когда sticky bit установлен на директорию, только владелец файла (или root) может удалить или переименовать этот файл — даже если другие пользователи имеют разрешение на запись в директорию.
chmod +t /shared/folderls -ld вывод для /tmp:
drwxrwxrwt 10 root root 4096 Jan 28 12:00 /tmpt в конце указывает на то, что sticky bit активен. Вот почему /tmp открыта для записи всем, но пользователи не могут удалять временные файлы друг друга.
Понимание umask — Контроль разрешений по умолчанию
Когда создается новый файл или каталог, Linux не предоставляет ему максимальные разрешения. Вместо этого он применяет umask (маску создания файлов пользователя), которая вычитает разрешения из значения по умолчанию.
Проверьте текущий umask
umask
Типичный результат: 0022Как работает umask
| Объект | Максимум по умолчанию | С umask `0022` | Результат |
|---|---|---|---|
| Файл | 666 (rw-rw-rw-) | 666 - 022 | 644 (rw-r–r–) |
| Каталог | 777 (rwxrwxrwx) | 777 - 022 | 755 (rwxr-xr-x) |
> Примечание: Linux никогда не устанавливает бит выполнения на вновь созданные файлы по умолчанию, независимо от umask.
Установите временный umask
umask 0077 # New files: 600 (rw-------), New dirs: 700 (rwx------)Это полезно в скриптах, которые создают конфиденциальные временные файлы. Для постоянного изменения добавьте команду umask в файл профиля вашей оболочки (например, ~/.bashrc или /etc/profile).
Рекурсивное исправление разрешений
Распространенная задача в реальных условиях — сброс разрешений во всем каталоге проекта, например, после неудачного развертывания или загрузки по FTP, которая нарушила разрешения. Ключ в том, чтобы установить разные разрешения для каталогов и файлов, так как каталогам нужен бит выполнения для обхода.
# Set all directories to 755
find /var/www/myapp -type d -exec chmod 755 {} ;
# Set all files to 644
find /var/www/myapp -type f -exec chmod 644 {} ;Если ваше приложение имеет определенные исполняемые скрипты, исправьте их отдельно позже:
chmod 755 /var/www/myapp/bin/*.shЭтот паттерн необходим для всех, кто управляет окружением веб-хостинга. Если вы запускаете приложения PHP, Python или Node.js на VPS с cPanel, неправильные разрешения файлов — одна из наиболее распространенных причин 403 Forbidden ошибок и сбоев выполнения скрипта.
Практический справочник разрешений для распространенных сценариев
| Сценарий | Рекомендуемые разрешения | Команда |
|---|---|---|
| Публичные веб-файлы (HTML, CSS, JS) | 644 | chmod 644 index.html |
| Веб-директории | 755 | chmod 755 /var/www/html |
| PHP/Python скрипты | 644 или 755 | Зависит от метода выполнения |
| Приватные SSH ключи | 600 | chmod 600 ~/.ssh/id_rsa |
.ssh директория | 700 | chmod 700 ~/.ssh |
| Общая директория проекта | 2775 (SGID) | chmod 2775 /opt/project |
| Доступная для записи всем временная директория | 1777 (sticky) | chmod 1777 /tmp/shared |
| Файлы конфигурации с секретами | 600 | chmod 600 .env |
Разрешения файлов Linux и безопасность сервера
Понимание разрешений файлов — это не просто академическое упражнение, оно имеет прямые практические последствия для безопасности и стабильности сервера.
Распространённые ошибки безопасности, которых следует избегать:
- Установка
777на веб-директории. Это дает всем доступ на чтение, запись и выполнение — критическая уязвимость, если ваш сервер скомпрометирован или возможна PHP-инъекция кода. - Оставление файлов конфигурации доступными для чтения всем. Файлы вроде
.env,wp-config.phpили учетные данные базы данных должны быть600или640максимум. - Игнорирование владельца. Даже если разрешения выглядят правильно, если файл принадлежит неправильному пользователю, ваш веб-сервер или демон приложения может не суметь его прочитать.
- Рекурсивное
chownна системных директориях. Запускchown -Rнеосторожно на/etcили/usrможет сломать всю систему.
Если вы запускаете production-окружение на Dedicated Servers, внедрение строгой политики разрешений — один из первых шагов по усилению безопасности, который следует предпринять после первоначальной настройки.
Для команд, управляющих несколькими сайтами или приложениями, VPS Control Panels могут упростить управление разрешениями через графические файловые менеджеры, хотя навыки работы с командной строкой остаются необходимыми для продвинутых конфигураций.
Краткий справочник команд
# View permissions
ls -l filename
ls -ld directory/
# Change permissions (symbolic)
chmod u+x file # Add execute for owner
chmod g-w file # Remove write for group
chmod o=r file # Set read-only for others
chmod a+r file # Add read for all
# Change permissions (numeric)
chmod 755 file # rwxr-xr-x
chmod 644 file # rw-r--r--
chmod 600 file # rw-------
chmod 700 file # rwx------
# Change ownership
chown user file
chgrp group file
chown user:group file
chown -R user:group directory/
# Special bits
chmod u+s file # Set SUID
chmod g+s directory # Set SGID
chmod +t directory # Set sticky bit
# umask
umask # Show current umask
umask 0022 # Set umask for session
# Recursive fixes
find /path -type d -exec chmod 755 {} ;
find /path -type f -exec chmod 644 {} ;Заключение
Разрешения файлов Linux формируют основу безопасности системы, контроля доступа для нескольких пользователей и надежного развертывания приложений. Модель элегантна в своей простоте — три класса, три типа разрешений, несколько специальных битов — но достаточно мощна для защиты всего, от персональной машины разработки до высоконагруженного производственного сервера.
Овладение chmod, chown, umask и специальными битами разрешений дает вам уверенность в правильном развертывании приложений, быстром устранении ошибок доступа и усилении защиты ваших серверов от несанкционированного доступа.
Независимо от того, начинаете ли вы с Shared Web Hosting или масштабируетесь до полностью управляемой среды VPS Hosting, твердое понимание разрешений файлов Linux — это один из наиболее эффективных навыков, которые вы можете развить как системный администратор или разработчик. Инвестируйте время в глубокое понимание — ваши серверы (и ваши пользователи) будут вам благодарны.
на всех хостинговых услугах