176 lines
7.2 KiB
Markdown
176 lines
7.2 KiB
Markdown
---
|
||
title: Права доступа в Linux и команда chmod
|
||
slug: linux-управление-правами-доступа/права-доступа-в-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. Понимание цифрового и символьного форматов помогает эффективно настраивать безопасность системы.
|