Как проверить разрешения файлов в 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-- - Идентификатор пользователя (UID) и идентификатор группы (GID) с их читаемыми именами
Команда stat неоценима при устранении ошибок разрешений на рабочих серверах, так как она предоставляет весь необходимый контекст в одном выводе.
Понимание числового (восьмеричного) обозначения разрешений
Разрешения 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.
