Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код: Skills Начать
Рубрики
Linux OS VPS

Понимание разрешений файлов 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. Вы складываете их вместе, чтобы получить одну цифру для каждого класса.

ВосьмеричнаяДвоичнаяПрава доступа
7111rwx
6110rw-
5101r-x
4100r--
0000---

Распространённые примеры:

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/passwd

ls -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/project

ls -l вывод:

drwxr-sr-x 2 alice devs 4096 Jan 25 10:00 /opt/project

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

3. Sticky Bit

Применяется к: Директориям

Когда sticky bit установлен на директорию, только владелец файла (или root) может удалить или переименовать этот файл — даже если другие пользователи имеют разрешение на запись в директорию.

chmod +t /shared/folder

ls -ld вывод для /tmp:

drwxrwxrwt 10 root root 4096 Jan 28 12:00 /tmp
t в конце указывает на то, что sticky bit активен. Вот почему /tmp открыта для записи всем, но пользователи не могут удалять временные файлы друг друга.
Понимание umask — Контроль разрешений по умолчанию
Когда создается новый файл или каталог, Linux не предоставляет ему максимальные разрешения. Вместо этого он применяет umask (маску создания файлов пользователя), которая вычитает разрешения из значения по умолчанию.
Проверьте текущий umask
umask
Типичный результат: 0022

Как работает umask

ОбъектМаксимум по умолчаниюС umask `0022`Результат
Файл666 (rw-rw-rw-)666 - 022644 (rw-r–r–)
Каталог777 (rwxrwxrwx)777 - 022755 (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)644chmod 644 index.html
Веб-директории755chmod 755 /var/www/html
PHP/Python скрипты644 или 755Зависит от метода выполнения
Приватные SSH ключи600chmod 600 ~/.ssh/id_rsa
.ssh директория700chmod 700 ~/.ssh
Общая директория проекта2775 (SGID)chmod 2775 /opt/project
Доступная для записи всем временная директория1777 (sticky)chmod 1777 /tmp/shared
Файлы конфигурации с секретами600chmod 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 — это один из наиболее эффективных навыков, которые вы можете развить как системный администратор или разработчик. Инвестируйте время в глубокое понимание — ваши серверы (и ваши пользователи) будут вам благодарны.