📑 Содержание
Когда вы выполняете команду ls -lah в терминале, перед вами появляется таблица из нескольких колонок. Для новичка это выглядит как набор символов: drwxr-xr-x, -rw-r--r--, lrwxrwxrwx. Но каждая буква и каждый символ в этой строке имеют строгий смысл. В этой статье разберем, что означает каждый тип прав, чем отличаются права для файлов и папок и как читать эту информацию без использования дополнительных команд.
Зачем нужны права в Linux
Linux — многопользовательская система. На одном сервере могут работать десятки пользователей, каждый со своими файлами. Права доступа определяют:
- Кто может читать содержимое файла
- Кто может изменять файл
- Кто может запускать файл как программу
- Кто может заходить в папку и видеть её содержимое
- Кто может создавать и удалять файлы внутри папки
Без этой системы любой пользователь мог бы изменить системные файлы или прочитать чужие данные. Права — фундамент безопасности в Linux.
Разбор вывода `ls -lah`
Выполните команду в терминале:
ls -lah
Вы получите примерно такой вывод:
total 128K
drwxr-xr-x 5 user group 4.0K Jan 15 10:30 .
drwxr-xr-x 3 root root 4.0K Jan 10 09:00 ..
-rw-r--r-- 1 user group 12K Jan 15 10:25 config.php
drwxr-xr-x 2 user group 4.0K Jan 14 18:00 css
-rwxr-xr-x 1 user group 2.1K Jan 13 14:12 script.sh
lrwxrwxrwx 1 user group 11 Jan 12 11:00 link -> config.php
Разберем каждую колонку слева направо.
Колонка 1: Тип объекта и права доступа
Первая колонка — самая важная. Она состоит из 10 символов:
- Первый символ — тип объекта (файл, папка, ссылка и т.д.)
- Следующие 9 символов — права доступа для трех категорий пользователей
Пример: -rw-r--r--
- Первый символ
-означает обычный файл rw-— права владельцаr--— права группыr--— права остальных пользователей
Пример: drwxr-xr-x
- Первый символ
dозначает папку (directory) rwx— права владельцаr-x— права группыr-x— права остальных
Колонка 2: Количество жестких ссылок
Число показывает, сколько жестких ссылок указывает на этот объект. Для файлов это обычно 1. Для папок — количество вложенных папок плюс 2 (ссылка на саму папку и ссылку из родительской папки).
Колонка 3: Владелец
Имя пользователя, которому принадлежит объект. Например, user или root.
Колонка 4: Группа
Имя группы, которой принадлежит объект. Например, group, www-data, root.
Колонка 5: Размер
Размер объекта в человекочитаемом формате (благодаря флагу -h): байты, килобайты, мегабайты. Для папок размер обычно 4.0K — это размер самой папки как структуры данных, а не сумма размеров файлов внутри.
Колонки 6–8: Дата и время изменения
Дата последнего изменения содержимого объекта.
Колонка 9: Имя объекта
Имя файла или папки. Для символических ссылок после имени идет стрелка -> и путь к целевому файлу.
Типы объектов: первый символ
Первый символ в колонке прав определяет тип объекта:
| Символ | Тип объекта | Описание |
|---|---|---|
- |
Обычный файл | Текст, бинарный файл, изображение, скрипт |
d |
Папка (директория) | Контейнер для файлов и других папок |
l |
Символическая ссылка | Ярлык, указывающий на другой файл или папку |
c |
Символьное устройство | Устройство с потоковым доступом (клавиатура, терминал) |
b |
Блочное устройство | Устройство с блочным доступом (жесткий диск) |
p |
Именованный канал (FIFO) | Специальный файл для межпроцессного взаимодействия |
s |
Сокет | Специальный файл для сетевого взаимодействия |
Для веб-разработки и администрирования сервера чаще всего встречаются три типа: - (файл), d (папка), l (ссылка).
Категории пользователей и типы прав
Три категории пользователей
Права в Linux назначаются трем категориям пользователей:
- Владелец (пользователь, указанный в колонке 3)
- Группа (пользователи, входящие в группу из колонки 4)
- Остальные (все остальные пользователи системы)
Для каждой категории выделяется три позиции: чтение, запись, выполнение. Если право отсутствует, на его месте стоит дефис -.
Пример: drwxr-xr-x
- Владелец:
rwx(чтение, запись, выполнение) - Группа:
r-x(чтение, выполнение) - Остальные:
r-x(чтение, выполнение)
Чтение (r)
Для файла: право на просмотр содержимого. Пользователь может открыть файл в текстовом редакторе, скопировать его содержимое, прочитать через cat или less.
Для папки: право на просмотр списка файлов. Пользователь может выполнить ls и увидеть имена файлов внутри папки.
Важный нюанс: право на чтение папки не позволяет читать содержимое файлов внутри. Для этого нужны права на чтение самих файлов.
Запись (w)
Для файла: право на изменение содержимого. Пользователь может редактировать файл, перезаписать его, очистить.
Для папки: право на создание, переименование и удаление файлов внутри папки. Это важно: право на запись в папку позволяет удалять файлы, даже если у пользователя нет прав на запись в сами файлы.
Важный нюанс: для удаления файла из папки нужны права на запись в папку, а не на сам файл. Это часто вызывает путаницу у новичков.
Выполнение (x)
Для файла: право на запуск файла как программы. Если файл — исполняемый бинарник или скрипт, пользователь может запустить его.
Для папки: право на вход в папку. Пользователь может выполнить cd и перейти внутрь папки, а также получить доступ к файлам внутри, если у него есть права на эти файлы.
Важный нюанс: для папки право на выполнение критично. Без него пользователь не может зайти в папку, даже если у него есть право на чтение. Права r-- на папку позволяют увидеть список файлов, но не зайти внутрь.
Чем отличаются права для файлов и папок
Ключевое различие — в интерпретации права на выполнение.
| Право | Файл | Папка |
|---|---|---|
| Чтение (r) | Можно прочитать содержимое | Можно увидеть список файлов |
| Запись (w) | Можно изменить содержимое | Можно создавать/удалять файлы внутри |
| Выполнение (x) | Можно запустить как программу | Можно зайти в папку (cd) |
Пример 1: файл `script.sh` с правами `rw-r--r--`
- Владелец может читать и изменять скрипт, но не может его запустить
- Группа и остальные могут только читать
Пример 2: папка `css` с правами `rwxr-xr-x`
- Владелец может зайти в папку, создать файлы, удалить файлы
- Группа и остальные могут зайти и увидеть список файлов, но не создавать новые
Пример 3: папка с правами `rw-r--r--`
- Владелец может увидеть список файлов (чтение), но не может зайти в папку (нет выполнения)
- Группа и остальные могут только увидеть список файлов
Пример 4: папка с правами `rwx------`
- Только владелец может зайти и работать с папкой
- Группа и остальные не имеют никакого доступа
Буквенный и числовой форматы
Чтение прав в буквенном формате
Права записываются тремя группами по три символа:
rwx r-x r-x
│ │ │
│ │ └── Остальные пользователи
│ └────── Группа
└────────── Владелец
Каждая группа читается одинаково:
r— чтение разрешеноw— запись разрешенаx— выполнение разрешено-— право отсутствует
Примеры:
rwx— все права (чтение, запись, выполнение)r-x— чтение и выполнение, без записиr--— только чтение---— никаких прав
Чтение прав в числовом формате
Помимо буквенного формата, права часто записывают в виде трех цифр. Каждая цифра соответствует одной категории пользователей (владелец, группа, остальные) и вычисляется как сумма:
- Чтение (r) = 4
- Запись (w) = 2
- Выполнение (x) = 1
Цифры складываются:
rwx= 4 + 2 + 1 = 7rw-= 4 + 2 + 0 = 6r-x= 4 + 0 + 1 = 5r--= 4 + 0 + 0 = 4---= 0 + 0 + 0 = 0
Примеры:
755=rwxr-xr-x(владелец: все права, группа и остальные: чтение и выполнение)644=rw-r--r--(владелец: чтение и запись, группа и остальные: только чтение)777=rwxrwxrwx(все права для всех)600=rw-------(только владелец может читать и писать)
Типичные значения:
755— папки и исполняемые скрипты644— обычные файлы (текст, изображения, конфиги)600— приватные файлы (ключи, пароли)700— приватные папки
Специальные права и символические ссылки
setuid (s)
Если файл имеет бит setuid, при запуске он выполняется с правами владельца файла, а не пользователя, который его запустил. В выводе отображается как s на месте x для владельца.
Пример: -rwsr-xr-x — файл запускается с правами владельца.
setgid (s)
Для файлов — аналогично setuid, но выполняется с правами группы. Для папок — новые файлы наследуют группу папки, а не группу пользователя, создавшего файл.
Пример: drwxr-sr-x — папка с setgid.
sticky bit (t)
Для папок — запрещает удаление файлов всем, кроме владельца файла, владельца папки и суперпользователя. Часто используется для папки /tmp.
Пример: drwxrwxrwt — папка /tmp с sticky bit.
Символические ссылки: права `lrwxrwxrwx`
Символические ссылки всегда показывают права lrwxrwxrwx. Это не означает, что любой может изменять ссылку. Права на символическую ссылку не применяются — система проверяет права целевого файла, на который указывает ссылка.
lrwxrwxrwx 1 user group 11 Jan 12 11:00 link -> config.php
Ссылка link указывает на файл config.php. При попытке прочитать или изменить link система будет проверять права на config.php, а не на саму ссылку.
Практические примеры
Пример 1: Конфигурационный файл
-rw-r--r-- 1 user group 12K Jan 15 10:25 config.php
- Тип: обычный файл (
-) - Владелец:
user, праваrw-(чтение, запись) - Группа:
group, праваr--(только чтение) - Остальные: права
r--(только чтение)
Владелец может редактировать конфиг. Группа и остальные могут только читать. В числовом формате это 644.
Пример 2: Папка с ресурсами
drwxr-xr-x 5 user group 4.0K Jan 15 10:30 assets
- Тип: папка (
d) - Владелец:
user, праваrwx(чтение, запись, выполнение) - Группа:
group, праваr-x(чтение, выполнение) - Остальные: права
r-x(чтение, выполнение)
Владелец может создавать и удалять файлы в папке. Группа и остальные могут зайти и посмотреть содержимое, но не создавать файлы. В числовом формате это 755.
Пример 3: Исполняемый скрипт
-rwxr-xr-x 1 user group 2.1K Jan 13 14:12 deploy.sh
- Тип: обычный файл (
-) - Владелец:
user, праваrwx(чтение, запись, выполнение) - Группа:
group, праваr-x(чтение, выполнение) - Остальные: права
r-x(чтение, выполнение)
Владелец может запускать и редактировать скрипт. Группа и остальные могут только запускать и читать. В числовом формате это 755.
Пример 4: Приватный файл
-rw------- 1 user group 1.2K Jan 15 09:45 id_rsa
- Тип: обычный файл (
-) - Владелец:
user, праваrw-(чтение, запись) - Группа:
group, права---(никаких прав) - Остальные: права
---(никаких прав)
Только владелец может читать и изменять файл. Типично для приватных ключей. В числовом формате это 600.
Заключение
Права доступа в Linux — это система из трех типов прав (чтение, запись, выполнение), назначенных трем категориям пользователей (владелец, группа, остальные). Каждая буква в выводе ls -lah имеет строгий смысл: r — чтение, w — запись, x — выполнение, - — отсутствие права.
Ключевые моменты:
- Первый символ определяет тип объекта:
-файл,dпапка,lссылка - Права
rwxзаписываются тремя группами: владелец, группа, остальные - Для папок право на выполнение означает возможность зайти внутрь
- Числовой формат
755,644,600— это сумма прав (4+2+1) - Права на символические ссылки не применяются — проверяются права целевого файла
ls -lah без дополнительных команд и диагностировать проблемы с доступом к файлам на сервере.