# Права доступа

`chmod` (*change mode*) — команда для изменения прав доступа к файлам и каталогам.

Синтаксис:

```sh
chmod опции права /путь/к/файлу
```

где `опции`:

- `-c` - выводить информацию обо всех изменениях
- `-f` - не выводить сообщения об ошибках
- `-v` - выводить максимум информации
- `-R` - включить поддержку рекурсии

## Права и пользователи

Основные права на файл (директорию):

||Атрибут|Описание|
|:-:|:-:|-|
|Первый символ|`r`| чтение (*reading*)|
|Второй символ|`w`| запись (*writing*)|
|Третий символ|`x`| выполнение (*execution*)|

Расширенные права:

|Права|Числовое значение|Относительный режим|Применение к файлам|Применение к каталогам|
|:-:|:-:|:-:|-|-|
|`SUID`|`4`|`u+s`|Пользователь выполняет файл с разрешениями владельца файла|Нет смысла применять|
|`SGID`|`2`|`g+s`|Пользователь выполняет файл с разрешениями владельца группы|Файлы, созданные в каталоге получают одного и того же владельца группы|
|`sticky bit`|`1`|`+t`|Нет смысла применять|Запрещает пользователям удалять файлы от других пользователей|

Категории пользователей, для которых вы можете установить эти права на файл:

- `u` - владелец файла;
- `g` - группа файла;
- `o` - все остальные пользователи;
- `a` - все пользователи (или `ugo`)

```sh
400 r-- --- --- │
200 -w- --- --- ├── права пользователя (u - user)
100 --x --- --- │

040 --- r-- --- │
020 --- -w- --- ├── права группы (g - group)
010 --- --x --- │

004 --- --- r-- │
002 --- --- -w- ├── права всех остальных (o - other)
001 --- --- --x │
```

Расширенные права:

```sh
400 --s          ── SUID
200 --s          ── SGID
100 --t          ── sticky bit
```

Если в триаде присутствует право на выполнение (`x`), то символ устанавливает строчный, иначе - заглавный:

```sh
drwSr-sr-T 2 alexander alexander  4096 мая 10 19:36  folder
```

Комбинации прав:

```sh
r--     4                 100
-w-     2                 010
--x     1                 001
rw-     6 (4 + 2)         110
r-x     5 (4 + 1)         101
-wx     3 (2 + 1)         011
rwx     7 (4 + 2 + 1)     111
```

или

```sh
--x     1                 001
-w-     2                 010
-wx     3 (2 + 1)         011
r--     4                 100
r-x     5 (4 + 1)         101
rw-     6 (4 + 2)         110
rwx     7 (4 + 2 + 1)     111
```

Значениями по умолчанию являются:

- для файлов: `644` (`-rw-r--r--`)
- для каталогов: `755` (`drwxr-xr-x`), где `d` - directory

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

Установка|добавление|изменение|удаление прав может осуществляться как установкой цифровым значением, так и символьным:

- Установка: `=`
- Добавление: `+`
- Удаление: `-`

Например, установка прав:

```sh
u=rwx,g=rx,o=rx
```

или

```sh
u=rwx,go=rx
```

Добавление прав:

```sh
u+s,go+w
```

Удаление прав:

```sh
ug-wx,o=
```

## Примеры

Установка прав на чтение и запись пользователю и группе и на только чтение всем остальным:

```sh
chmod 664 file
```

или

```sh
chmod ug=rw,o=r file
```

результат:

```sh
-rw-rw-r-- 1 alexander alexander 0 мая 10 19:05 file
```

Установить права на чтение, запись и выполнение только пользователю:

```sh
chmod 700 file
```

или

```sh
chmod u=rwx,go= file
```

результат:

```sh
-rwx------ 1 alexander alexander 0 мая 10 19:05 file
```

а теперь добавить только на выполнение группе и всем остальным:

```sh
chmod 711 file
```

или

```sh
chmod go+x file
```

результат:

```sh
-rwx--x--x 1 alexander alexander 0 мая 10 19:05 file
```

Установить права на каталог (`drwxr-xr-x`), чтобы удалить файл внутри каталога мог только владелец файла:

```sh
chmod 1755 folder
```

или

```sh
chmod +t folder
```

результат:

```sh
drwxr-xr-t 2 alexander alexander  4096 мая 10 19:36  folder
```
