---
title: chmod
slug: администрирование-linux-управление-правами-доступа/chmod
---

Команда `chmod` используется в Linux и других Unix-подобных системах для изменения прав доступа к файлам и каталогам.

## Формат команды и аргументы

```bash
chmod [опции] права файл
```

Например:

```bash
chmod 755 script.sh
```

## Подробности об аргументах `chmod`

Команда `chmod` принимает различные аргументы:

### Общий синтаксис

```bash
chmod [опции] [символьные или числовые права] файл(ы)
```

### Часто используемые опции:

| Опция              | Описание                                                                          |
| ------------------ | --------------------------------------------------------------------------------- |
| `-R`               | Рекурсивно изменить права во всех подкаталогах и файлах                           |
| `-v`               | Подробный вывод — показывает, какие изменения были сделаны                        |
| `-c`               | Показывает изменения только для тех файлов, чьи права действительно были изменены |
| `--reference=ФАЙЛ` | Установить права доступа, как у другого файла                                     |

Примеры:

```bash
chmod -R 755 /var/www           # Рекурсивно задать права
chmod -v 644 file.txt           # Показать результат изменения прав
chmod --reference=example.txt config.txt  # Установить такие же права, как у example.txt
```

## Чтение прав доступа

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

```bash
-rwxr-xr-- 1 user group 1234 Май 7 12:00 script.sh
```

Разбор:

* Первая буква `-` — тип (файл, каталог и т.д.)
* Далее три блока по 3 символа:

  * `rwx` — для владельца (user)
  * `r-x` — для группы (group)
  * `r--` — для остальных (others)

## Таблица прав и чисел

Каждое разрешение соответствует числу:

| Символы | Значение | Описание              |
| ------- | -------- | --------------------- |
| `r`     | 4        | чтение (read)         |
| `w`     | 2        | запись (write)        |
| `x`     | 1        | исполнение (execute)  |
| `-`     | 0        | отсутствие разрешения |

Комбинации:

| Права | Цифра | Обозначение |
| ----- | ----- | ----------- |
| `rwx` | 7     | 4 + 2 + 1   |
| `rw-` | 6     | 4 + 2       |
| `r-x` | 5     | 4 + 1       |
| `r--` | 4     | 4           |
| `-wx` | 3     | 2 + 1       |
| `-w-` | 2     | 2           |
| `--x` | 1     | 1           |
| `---` | 0     | 0           |

## Примеры chmod

```bash
chmod 755 file     # Владелец: rwx, группа: r-x, остальные: r-x
chmod 644 file     # Владелец: rw-, группа: r--, остальные: r--
chmod 700 file     # Владелец: rwx, остальные: ---
chmod 600 secret   # Только владелец может читать и писать
chmod +x script.sh # Добавить право на выполнение для всех
chmod -x script.sh # Убрать право на выполнение для всех
```

## Работа с каталогами

Для каталогов флаг `x` означает "доступ внутрь каталога". Без него пользователь не может зайти в папку, даже если у него есть `r` (чтение).

Пример:

```bash
chmod 755 mydir    # Владелец: полный доступ, другие могут просматривать
chmod 700 mydir    # Только владелец может заходить в каталог
```

## Рекурсивное изменение прав

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

```bash
chmod -R 755 /путь/к/каталогу
```

Это установит одинаковые права на все каталоги и файлы внутри указанного пути.

### Осторожно с 777

```bash
chmod -R 777 /var/www  # Очень небезопасно! Все получат полный доступ
```

### Рекомендованный способ — разделять файлы и каталоги:

```bash
# Установить права 755 на все каталоги
find /путь -type d -exec chmod 755 {} \;

# Установить права 644 на все файлы
find /путь -type f -exec chmod 644 {} \;
```

### Пояснение к аргументам:

* `find` — команда поиска файлов и каталогов
* `/путь` — начальный путь, где выполняется поиск
* `-type f` — искать только обычные файлы (`-type d` — каталоги)
* `-exec` — выполнить указанную команду над каждым найденным элементом
* `chmod 644 {}` — применить `chmod` к текущему найденному файлу (подставляется вместо `{}`)
* `\;` — завершает команду `-exec` (обязательно экранировать точку с запятой в bash)

````

Это особенно полезно для веб-серверов и проектов, где важно разграничивать доступ к файлам и каталогам.

## Изменение прав по символам

Вместо чисел можно использовать буквенную форму:

```bash
chmod u+x file     # Добавить исполнение владельцу
chmod go-w file    # Убрать запись для группы и остальных
chmod a+r file     # Добавить чтение всем (u+g+o)
````

Где:

* `u` — владелец (user)
* `g` — группа (group)
* `o` — остальные (others)
* `a` — все (all)

## Проверка прав

```bash
ls -l filename      # Просмотр прав
stat filename       # Подробная информация о файле
```

## Заключение

Команда `chmod` — важный инструмент для управления доступом к файлам и каталогам в Linux. Понимание цифрового и символьного форматов помогает эффективно настраивать безопасность системы.
