> Полный список статей есть в [llms.txt](https://docs.f3cloud.com/llms.txt). Markdown-версия есть у каждой страницы, достаточно добавить .md к её адресу. Эта страница в Markdown: [https://docs.f3cloud.com/ru/linux/linux-permissions.md](https://docs.f3cloud.com/ru/linux/linux-permissions.md).

# Права доступа к файлам в Linux – команды chmod и chown

Права доступа к файлам и папкам в Linux. Как читать вывод ls -l, что значат r, w, x и цифры 644, 755 и 600, как менять права командой chmod и владельца командой chown, как правильно выставить права для сайта и почему не стоит ставить 777. Проверено на Debian 12.

Ошибка **Permission denied** знакома всем, кто работает с сервером. Сайт не может сохранить загруженную картинку, скрипт не запускается, а программа не читает свой файл настроек. Почти всегда причина в правах доступа. В этой статье разберём, как Linux решает, кому можно читать, изменять и запускать файл, научимся читать права в выводе `ls -l`, менять их командами `chmod` и `chown` и выставлять правильные права для сайта. Все примеры мы выполнили на тестовом сервере с Debian 12.

***

## Как Linux проверяет права

У каждого файла и каждой папки в Linux есть **владелец** и **группа**. Когда программа пытается что-то сделать с файлом, система смотрит, от имени какого пользователя эта программа работает, и относит его к одной из трёх категорий. Если это владелец файла, применяются права владельца. Если он не владелец, но входит в группу файла, применяются права группы. Во всех остальных случаях действуют права для остальных пользователей. Проверка идёт строго в таком порядке и останавливается на первой подходящей категории, поэтому владелец с урезанными правами не получит больше только оттого, что группе разрешено больше.

Для каждой категории задаются три права. **r** разрешает читать, **w** изменять, **x** выполнять. У обычного файла смысл очевиден. Право `x` нужно скриптам и программам, иначе их нельзя запустить, а у текстового файла или картинки оно ни к чему. У папки те же буквы означают другое, и именно здесь чаще всего возникают ошибки. Право `r` на папку позволяет получить список имён файлов, `w` позволяет создавать и удалять в ней файлы, а `x` позволяет войти в папку и обращаться к файлам внутри. Без `x` не поможет даже право на сам файл. Предположим, что у файла `photo.jpg` права позволяют владельцу читать его, но у папки `uploads`, где он лежит, право `x` снято. Тогда при попытке открыть `uploads/photo.jpg` система остановится ещё на папке, и программа получит Permission denied. Мы проверили это на тестовом сервере, и как только папке вернули `x`, файл сразу стал читаться.

Права удобно записывать цифрами. Каждой букве соответствует число, `r` это 4, `w` это 2, а `x` это 1, и права одной категории получаются сложением. Чтение и запись дают 6, чтение и выполнение 5, всё сразу 7. Три цифры подряд задают права владельца, группы и остальных. Так запись `644` означает, что владелец читает и пишет, а все остальные только читают, это обычные права для файлов сайта. Запись `755` даёт владельцу всё, а остальным чтение и вход, так обычно настраивают папки и скрипты. Запись `600` оставляет доступ только владельцу и подходит для файлов с паролями и ключами.

Есть одно исключение из всех этих правил. Пользователь `root` проверку прав не проходит, ему разрешено читать и менять любые файлы. Поэтому под root всё «работает», а та же программа, запущенная от имени обычного пользователя или веб-сервера, натыкается на запрет. Если что-то работает у вас в терминале, но не работает у сайта, первым делом проверьте, от имени какого пользователя работает сайт и какие права у его файлов.

***

## 1. Посмотрите права

Права показывает команда `ls -l`. Параметр `-a` добавляет скрытые файлы, имена которых начинаются с точки.

```bash
ls -la
```

<figure><img src="https://docs.f3cloud.com/img/linux-perm-ls.png" alt="Вывод ls -la в папке сайта с правами, владельцем и группой каждого файла"><figcaption><p>Первая колонка показывает тип и права, третья и четвёртая владельца и группу</p></figcaption></figure>

Разберём строку `-rw-r--r-- 1 root root 12 Oct 21 11:55 index.html`.

* **Первый символ** показывает тип. `-` это файл, `d` папка, `l` символическая ссылка.
* **Следующие три символа** `rw-` это права владельца. Он может читать и изменять файл.
* **Ещё три символа** `r--` это права группы, она может только читать.
* **Последние три символа** `r--` это права остальных пользователей.
* **root root** это владелец и группа файла.

Если удобнее видеть права цифрами, используйте команду `stat`.

```bash
stat -c "%a %U:%G %n" *
```

***

## 2. Измените права командой chmod

Права можно задавать цифрами или буквами. Цифры удобны, когда вы точно знаете итоговые права, а буквы когда нужно добавить или убрать одно право, не трогая остальные.

```bash
# Разрешить запуск скрипта
chmod +x backup.sh

# Файл с паролями доступен только владельцу
chmod 600 .env

# Папка, в которую может войти только владелец и группа
chmod 750 uploads
```

<figure><img src="https://docs.f3cloud.com/img/linux-perm-chmod.png" alt="Команды chmod +x, chmod 600 и chmod 750 и результат в выводе ls -la"><figcaption><p>backup.sh стал исполняемым, .env закрыт от всех, кроме владельца</p></figcaption></figure>

В буквенной записи `u` означает владельца, `g` группу, `o` остальных, а `a` всех сразу. Знак `+` добавляет право, `-` убирает, `=` задаёт точно.

```bash
# Убрать у остальных право на чтение
chmod o-r файл

# Задать права точно, как цифрой 750
chmod u=rwx,g=rx,o= uploads
```

Параметр `-R` меняет права у папки и всего её содержимого. Пользуйтесь им осторожно, ведь он ставит одинаковые права и папкам, и файлам.

***

## 3. Смените владельца командой chown

Команда `chown` меняет владельца и группу. Через двоеточие указывается сначала пользователь, затем группа, а `-R` применяет изменение ко всему содержимому папки.

```bash
chown -R www-data:www-data /var/www/site
```

<figure><img src="https://docs.f3cloud.com/img/linux-perm-chown.png" alt="Команда chown -R www-data:www-data и новый владелец файлов в выводе ls -la"><figcaption><p>Все файлы сайта теперь принадлежат пользователю www-data</p></figcaption></figure>

`www-data` это пользователь, от имени которого в Debian и Ubuntu работают Nginx и Apache. Если сайт должен сам сохранять файлы, например загружать картинки в папку `uploads`, эта папка должна принадлежать ему. Менять владельца может только root, обычный пользователь получит ошибку **Operation not permitted**.

***

## 4. Выставьте правильные права для сайта

Для сайта обычно хватает простого правила. Папкам ставят `755`, файлам `644`, а владельцем делают пользователя веб-сервера. Сделать это для всего сайта можно двумя командами `find`, которые отдельно находят папки и файлы.

```bash
find /var/www/site -type d -exec chmod 755 {} +
find /var/www/site -type f -exec chmod 644 {} +
```

> **Верните права исключениям.**
>
> Команды выше ставят всем файлам одинаковые `644`. На тестовом сервере после них файл `.env` с паролем снова стал доступен для чтения всем пользователям, а скрипт `backup.sh` перестал запускаться. Поэтому сразу после массовой смены прав верните исключения, например `chmod 600 .env` и `chmod +x backup.sh`.

***

## Почему не стоит ставить 777

Права `777` разрешают всем пользователям сервера читать, изменять и запускать файл. Ошибка Permission denied после этого действительно исчезает, поэтому такой совет часто встречается в интернете. Но вместе с ошибкой исчезает и защита. Если на сервере взломают любой сайт или программу, злоумышленник сможет изменить и ваши файлы, например вписать вредоносный код в страницы сайта. Вместо `777` найдите, от имени какого пользователя работает программа, и сделайте его владельцем нужной папки командой `chown`.

***

## Частые вопросы

<details>

<summary>Permission denied при запуске скрипта</summary>

У файла нет права на выполнение. Добавьте его командой `chmod +x script.sh` и запускайте скрипт как `./script.sh`. Другой вариант это запустить скрипт через интерпретатор, например `bash script.sh`, тогда право `x` не требуется.

</details>

<details>

<summary>Права у файла правильные, а Permission denied остаётся</summary>

Проверьте права у всех папок на пути к файлу. Для каждой из них нужно право `x` для того пользователя, от имени которого работает программа. Удобнее всего это видно командой `namei -l /полный/путь/к/файлу`, она покажет права каждой папки по пути.

<figure><img src="https://docs.f3cloud.com/img/linux-perm-denied.png" alt="Ошибка Permission denied при чтении файла в папке без права x и успешное чтение после chmod 755"><figcaption><p>Без права x на папку даже владелец не может открыть файл внутри</p></figcaption></figure>

</details>

<details>

<summary>chown: changing ownership: Operation not permitted</summary>

Менять владельца файла может только root. Выполните команду от имени `root` или через `sudo`.

</details>

<details>

<summary>Какие права ставятся новым файлам</summary>

Права новых файлов определяет маска `umask`. На тестовом сервере она равна `0022`, поэтому новые файлы получают права `644`, а новые папки `755`. Посмотреть маску можно командой `umask`.

</details>

***

## Наши ресурсы

**Telegram-канал:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Официальный сайт:** [https://f3cloud.com](https://f3cloud.com/ru)
