Как проверить разрешения файлов в 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 |
Вы вычисляете значение разрешения для каждой категории пользователя, складывая значения вместе:
| Комбинация | Расчет | Числовое значение |
|---|---|---|
rwx | 4 + 2 + 1 | 7 |
rw- | 4 + 2 + 0 | 6 |
r-x | 4 + 0 + 1 | 5 |
r-- | 4 + 0 + 0 | 4 |
--- | 0 + 0 + 0 | 0 |
Трехзначное восьмеричное число представляет полный набор разрешений:
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/passwds в позиции выполнения владельца указывает на setuid.
2. setgid (s на бите выполнения группы)
На файле программа запускается с привилегиями группы. На директории новые файлы, созданные внутри, автоматически наследуют группу директории — полезно для общих папок проектов.
ls -ld /shared/project
drwxrwsr-x 2 alice developers 4096 Aug 16 12:30 /shared/project3. Sticky Bit (t на бите выполнения для остальных)
Когда установлен на директории, только владелец файла (или root) может удалять или переименовывать файлы внутри неё, даже если у других есть разрешение на запись. Это стандартная конфигурация для /tmp:
ls -ld /tmp
drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmpt в конце сигнализирует о том, что sticky bit активен.
Числовое представление специальных битов:
| Специальный бит | Числовое значение |
|---|---|
| setuid | 4000 |
| setgid | 2000 |
| Sticky bit | 1000 |
Таким образом drwxrwxrwt = 1777 (1000 + 777).
Таблица полной справки разрешений
| Символический | Числовой | Значение для файла | Значение для директории |
|---|---|---|---|
--- | 0 | Нет доступа | Нет доступа |
--x | 1 | Только выполнение | Только вход |
-w- | 2 | Только запись | Изменение содержимого (с x) |
-wx | 3 | Запись + выполнение | Вход и изменение |
r-- | 4 | Только чтение | Список имен (требует x для полезности) |
r-x | 5 | Чтение + выполнение | Список и вход |
rw- | 6 | Чтение + запись | Список и изменение (без входа) |
rwx | 7 | Полный доступ | Полный контроль |
Примеры разрешений в реальной практике
Вот наиболее распространённые шаблоны разрешений, которые вы встретите на практике:
-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 — вот некоторые важные рекомендации по управлению разрешениями:
- Никогда не устанавливайте 777 для файлов или директорий, если у вас нет очень конкретной, временной причины. Файлы с доступом для всех — это серьёзный риск безопасности.
- Файлы веб-сервера (например, в
/var/www/) обычно должны иметь644для файлов и755для директорий, принадлежащие пользователю приложения. - SSH ключи должны быть
600для приватных ключей и644для публичных ключей. SSH строго это требует. - Файлы конфигурации, содержащие пароли или API ключи, должны быть
600или640максимум. - Используйте
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, правильная настройка разрешений с самого начала защитит вас от уязвимостей безопасности, неработающих приложений и бесчисленных часов устранения неполадок в будущем.
на всех хостинговых услугах