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

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

Используйте код: Skills Начать
Рубрики
Linux Администрация

Как проверить разрешения файлов в Linux: полное руководство

Linux питает большинство серверов мира — от окружений VPS Hosting до корпоративных Dedicated Servers — и не без причины. Он быстрый, стабильный и построен с безопасностью в основе. Одна из самых фундаментальных опор этой безопасности — система разрешений файлов: точный, элегантный механизм, который контролирует ровно то, кто может читать, изменять или выполнять любой файл или директорию в системе.

Независимо от того, являетесь ли вы разработчиком, развертывающим веб-приложение, системным администратором, укрепляющим сервер, или новичком, изучающим командную строку, понимание того, как проверять и интерпретировать разрешения файлов в Linux, является необходимым навыком. Это руководство охватывает все, что вам нужно знать — от основ модели разрешений до продвинутых специальных битов — с практическими командами и примерами из реальной жизни.

Что такое разрешения файлов Linux?

Каждый файл и директория в Linux имеют набор разрешений, прикрепленных к ним. Эти разрешения определяют, какие действия разрешены и кем. Существует три основных типа разрешений:

РазрешениеСимволЧто оно делает с файломЧто оно делает с директорией
ЧтениеrПросмотр содержимого файлаСписок имен файлов внутри
ЗаписьwИзменение или удаление файлаСоздание или удаление файлов внутри
ВыполнениеxЗапуск файла как программыВход (навигация) в директорию

Эти три разрешения применяются независимо к трем отдельным категориям пользователей:

  • Владелец (пользователь) — пользователь, который владеет файлом, обычно его создатель.
  • Группа — любой пользователь, принадлежащий назначенной группе файла.
  • Остальные — все остальные в системе.

Эта матрица разрешений три на три дает администраторам Linux детальный и мощный контроль над доступом к каждому ресурсу в системе.

Как проверить права доступа к файлам: команда ls -l

Самый быстрый и наиболее часто используемый метод проверки прав доступа к файлам — это команда ls -l (формат длинного списка).

ls -l file.txt

Пример вывода:

-rw-r--r-- 1 alice developers 1024 Aug 16 12:30 file.txt

Давайте разберем каждый компонент этого вывода:

-  rw-  r--  r--   1   alice   developers   1024   Aug 16 12:30   file.txt
│   │    │    │    │     │          │          │         │             │
│   │    │    │    │     │          │          │         │             └─ Filename
│   │    │    │    │     │          │          │         └─ Last modified
│   │    │    │    │     │          │          └─ File size (bytes)
│   │    │    │    │     │          └─ Group name
│   │    │    │    │     └─ Owner name
│   │    │    │    └─ Number of hard links
│   │    │    └─ Others' permissions
│   │    └─ Group's permissions
│   └─ Owner's permissions
└─ File type (- = regular file, d = directory, l = symlink)

Итак, -rw-r--r-- говорит нам:

  • Владелец (alice): Чтение + Запись (rw-)
  • Группа (developers): Только чтение (r--)
  • Остальные: Только чтение (r--)

Проверка прав доступа для нескольких файлов

Чтобы увидеть права доступа для всех файлов в каталоге одновременно:

ls -la /var/www/html

Флаг -a включает скрытые файлы (те, которые начинаются с точки). Это особенно полезно при аудите каталогов веб-сервера в среде Shared Web Hosting или VPS.

Получение подробной информации о разрешениях с помощью stat

Для более подробного анализа — включая как символические, так и числовые представления — используйте команду stat:

stat file.txt

Пример вывода:

  File: file.txt
  Size: 1024            Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 131073      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   alice)   Gid: ( 1000/developers)
Access: 2024-08-16 12:30:00.000000000 +0000
Modify: 2024-08-16 12:30:00.000000000 +0000
Change: 2024-08-16 12:30:00.000000000 +0000

Ключевая строка:

Access: (0644/-rw-r--r--)  Uid: ( 1000/   alice)   Gid: ( 1000/developers)

Это дает вам:

  • Числовая (восьмеричная) нотация: 0644
  • Символическая нотация: -rw-r--r--
  • User ID (UID) и Group ID (GID) с их понятными именами

Команда stat неоценима при устранении ошибок разрешений на production-серверах, так как предоставляет весь необходимый контекст в одном выводе.

Понимание числовой (восьмеричной) нотации разрешений

Разрешения Linux можно выразить в виде чисел, что является форматом, используемым командами типа chmod. Каждому типу разрешения присваивается значение:

РазрешениеЧисловое значение
Чтение (r)4
Запись (w)2
Выполнение (x)1
Нет разрешения (-)0

Вы вычисляете значение разрешения для каждой категории пользователя, складывая значения вместе:

КомбинацияРасчетЧисловое значение
rwx4 + 2 + 17
rw-4 + 2 + 06
r-x4 + 0 + 15
r--4 + 0 + 04
---0 + 0 + 00

Трехзначное восьмеричное число представляет полный набор разрешений:

0644  →  Owner: 6 (rw-)  |  Group: 4 (r--)  |  Others: 4 (r--)
0755  →  Owner: 7 (rwx)  |  Group: 5 (r-x)  |  Others: 5 (r-x)
0700  →  Owner: 7 (rwx)  |  Group: 0 (---)  |  Others: 0 (---)

Проверка разрешений на директории

Директории используют ту же модель разрешений, но значение каждого бита немного отличается. Используйте ls -ld (обратите внимание на флаг -d) для проверки самой директории, а не её содержимого:

ls -ld myfolder

Пример вывода:

drwxr-x--- 2 alice developers 4096 Aug 16 12:30 myfolder

Ведущий d подтверждает, что это директория. Разрешения разбиваются следующим образом:

  • Владелец (alice): rwx — может выводить список, создавать/удалять файлы и входить в директорию
  • Группа (developers): r-x — может выводить список файлов и входить, но не может создавать или удалять
  • Остальные: --- — нет доступа вообще

> Важно: Бит выполнения (x) в директории означает возможность входить в неё (т.е. использовать cd). Без x пользователь не может перейти в директорию, даже если у него есть разрешение на чтение. Это частый источник путаницы для новичков.

Специальные биты разрешений: setuid, setgid и Sticky Bit

Помимо стандартных девяти битов разрешений, Linux поддерживает три специальных бита разрешений, которые обеспечивают расширенное управление доступом:

1. setuid (s на бите выполнения владельца)

Когда установлен на исполняемом файле, программа запускается с привилегиями владельца файла, а не вызывающего пользователя. Именно так команды вроде passwd позволяют обычным пользователям изменять /etc/shadow (которым владеет root).

ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 Mar 27 2023 /usr/bin/passwd

s в позиции выполнения владельца указывает на setuid.

2. setgid (s на бите выполнения группы)

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

ls -ld /shared/project
drwxrwsr-x 2 alice developers 4096 Aug 16 12:30 /shared/project

3. Sticky Bit (t на бите выполнения для остальных)

Когда установлен на директории, только владелец файла (или root) может удалять или переименовывать файлы внутри неё, даже если у других есть разрешение на запись. Это стандартная конфигурация для /tmp:

ls -ld /tmp
drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmp

t в конце сигнализирует о том, что sticky bit активен.

Числовое представление специальных битов:

Специальный битЧисловое значение
setuid4000
setgid2000
Sticky bit1000

Таким образом drwxrwxrwt = 1777 (1000 + 777).

Таблица полной справки разрешений

СимволическийЧисловойЗначение для файлаЗначение для директории
---0Нет доступаНет доступа
--x1Только выполнениеТолько вход
-w-2Только записьИзменение содержимого (с x)
-wx3Запись + выполнениеВход и изменение
r--4Только чтениеСписок имен (требует x для полезности)
r-x5Чтение + выполнениеСписок и вход
rw-6Чтение + записьСписок и изменение (без входа)
rwx7Полный доступПолный контроль

Примеры разрешений в реальной практике

Вот наиболее распространённые шаблоны разрешений, которые вы встретите на практике:

-rw-r--r-- (0644) — Стандартный файл

-rw-r--r-- 1 alice developers 1024 Aug 16 12:30 config.txt

Владелец может читать и писать. Группа и остальные могут только читать. Типично для файлов конфигурации и веб-контента.

-rwxr-xr-x (0755) — Исполняемый скрипт или бинарный файл

-rwxr-xr-x 1 alice developers 4096 Aug 16 12:30 deploy.sh

Владелец имеет полный доступ. Остальные могут читать и выполнять, но не могут изменять. Стандартно для shell-скриптов, бинарных файлов веб-сервера и публичных исполняемых файлов.

-rw------- (0600) — Приватный файл

-rw------- 1 alice alice 1679 Aug 16 12:30 id_rsa

Только владелец может читать или писать. Нет доступа для остальных. Требуется для приватных ключей SSH — SSH откажется использовать файл ключа с более широкими разрешениями.

drwxr-xr-x (0755) — Стандартная публичная директория

drwxr-xr-x 5 alice developers 4096 Aug 16 12:30 public_html

Распространено для директорий корня веб-сайта. Владелец имеет полный контроль; остальные могут просматривать и входить.

drwx------ (0700) — Приватная директория

drwx------ 3 alice alice 4096 Aug 16 12:30 .ssh

Полностью приватная. Только владелец может получить доступ. Требуется для директории ~/.ssh.

drwxrwxrwt (1777) — Доступная для записи всем с липким битом

drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmp

Все могут создавать файлы, но только владелец каждого файла может удалять свои собственные файлы.

Практические советы для серверных сред

Если вы управляете Linux сервером — будь то VPS, на котором работает веб-приложение, почтовый сервер, защищённый SSL Certificate, или машина, на которой размещены несколько доменов, зарегистрированных через Domain Registration — вот некоторые важные рекомендации по управлению разрешениями:

  1. Никогда не устанавливайте 777 для файлов или директорий, если у вас нет очень конкретной, временной причины. Файлы с доступом для всех — это серьёзный риск безопасности.
  2. Файлы веб-сервера (например, в /var/www/) обычно должны иметь 644 для файлов и 755 для директорий, принадлежащие пользователю приложения.
  3. SSH ключи должны быть 600 для приватных ключей и 644 для публичных ключей. SSH строго это требует.
  4. Файлы конфигурации, содержащие пароли или API ключи, должны быть 600 или 640 максимум.
  5. Используйте find для проверки разрешений по дереву директорий:
   # Find all world-writable files (potential security risk)
   find /var/www -type f -perm -o+w

   # Find all SUID files (for security auditing)
   find / -type f -perm -4000 2>/dev/null

Краткая справка команд

ЗадачаКоманда
Список разрешений файлаls -l filename
Список разрешений всех файлов в каталогеls -la /path/to/dir
Проверить разрешения самого каталогаls -ld /path/to/dir
Получить полные детали включая числовые разрешенияstat filename
Изменить разрешения (символический формат)chmod u+x filename
Изменить разрешения (числовой формат)chmod 755 filename
Изменить владельца файлаchown user:group filename
Рекурсивно изменить разрешенияchmod -R 755 /path/to/dir
Найти файлы с доступом на запись для всехfind . -perm -o+w -type f

Заключение

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

  • Используйте ls -l для быстрого, удобного для человека обзора разрешений на файлы и каталоги.
  • Используйте stat, когда вам нужны как символические, так и числовые представления, а также информация о владельце.
  • Овладейте обоими обозначениями — символическим (rwx) и числовым (755, 644) — так как разные инструменты и документация используют оба взаимозаменяемо.
  • Помните о различии в каталогах: бит выполнения (x) в каталоге означает возможность входа в него, а не его запуска.
  • Будьте в курсе специальных битов — setuid, setgid и sticky bit — так как они часто встречаются на производственных системах и имеют значительные последствия для безопасности.

Надлежащее управление разрешениями — это основа безопасности Linux. Независимо от того, запускаете ли вы личный проект на VPS Hosting или администрируете парк Dedicated Servers, правильная настройка разрешений с самого начала защитит вас от уязвимостей безопасности, неработающих приложений и бесчисленных часов устранения неполадок в будущем.