> For the complete documentation index, see [llms.txt](https://voltbro.gitbook.io/arduino-ros/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://voltbro.gitbook.io/arduino-ros/2_linux/3_users.md).

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

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

Тема пользователей и их прав в системе в первую очередь относится к функционированию самой операционной системы. Оболочка лишь предоставляет утилиты, позволяющие анализировать доступы и изменять их.

Абсолютно любой процесс, запускаемый в операционной системе, стартует от имени некоторого пользователя. Соответственно, его возможности по влиянию на файловую систему ограничены теми правами, которые есть у пользователя, от имени которого процесс запущен.

Взаимодействие с файловой системой происходит через запуск тех или иных утилит, модифицирующих, создающих или анализирующих файловую структуру. Это значит, что запуская, например, `touch`, мы стартуем процесс от своего имени, внутри которого запускается программа `touch`. Она, в свою очередь, создаёт файл (если его не было) и делает вас владельцем нового файла.

Чтобы понять "кто я" в системе необходимо выполнить команду `whoami` и мы получим имя пользователя.

```bash
whoami 
===
cola
```

### Отображение владельца файла или каталога

В Linux у каждого файла и каждого каталога есть два владельца: пользователь и группа.

Эти владельцы устанавливаются при создании файла или каталога. Пользователь, который создаёт файл становится владельцем этого файла, а первичная группа, в которую входит этот же пользователь, так же становится владельцем этого файла. Чтобы определить, есть ли у вас как у пользователя права доступа к файлу или каталогу, оболочка проверяет владение ими.

Чтобы увидеть текущие назначения владельца, вы можете использовать команду `ls -l`. Эта команда показывает пользователя и группу-владельца.

```
drwxr-xr-x  2 cola cola  4096 Aug 27  2020  test11
drwxr-xr-x  2 cola cola  4096 Aug 26  2020  test111
drwxr-xr-x  2 cola cola  4096 Aug 28  2020  test55
```

`cola` Это имя пользователя и имя группы

### Изменение владельца

Чтобы применить соответствующие разрешения, первое, что нужно учитывать, это владение. Для этого есть команда chown. Синтаксис этой команды несложен для понимания:

chown кто что

Например, следующая команда меняет владельца каталога /home/account на пользователя linda:

```bash
chown linda /home/account
```

Команда `chown` имеет несколько опций, одна из которых особенно полезна: -R. Вы можете догадаться, что она делает, потому что эта опция доступна и для многих других команд. Это позволяет вам рекурсивно устанавливать владельца, что позволяет вам установить владельца текущего каталога и всего, что находится ниже.

### Изменение владельца группы

Есть два способа изменить владение группой. Вы можете сделать это, используя chown, но есть специальная команда с именем `chgrp`, которая выполняет эту работу. Если вы хотите использовать команду chown, используйте . или : перед названием группы.

Установим пользователя `lisa` и группу `account`

```
chown lisa:account /home/account
```

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

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

### Права доступа к файлам

Кроме имени пользователя и группы, с каждым файлом ассоциированы права доступа: *r* — чтение, *w* — запись и *x* — исполнение. Причём эти права задаются для трёх типов пользователей: владельца (Owner), пользователей, входящих в ту же группу (Group) и остальных (Other) — тех, кто не попал в предыдущие две.

Разберём на примере:

```
ls -l
-rw-r--r--  1 cola cola    13 Aug 26  2020  1.py
```

Сточка результата начинается с `-`, это означает что это обычный файл

Далее мы видим три группы данные

* `rw-` Права для "Владельца". Означает что владелец может читать и записывать файл
* `r--` Права для группы. Означает что пользователи группы могут читать файл
* `r--` Права для "остальных". Все могут читать этот файл

### Права доступа к директориям

Как и для файлов, в Linux организованна и система доступа к директории. Единственно отличие, что права доступа имеют специфичную для директорий доступ. *r* — разрешенное получение списка файлов, *w* — разрешит создавать, удалять и менять права доступа к файлам и *x* разрешить переход в каталог.

Разберём на примере:

```
ls -l
drwxr-xr-x  2 cola cola  4096 Nov 12  2020  world
```

Сточка результата начинается с `d`, это означает что мы видим директорию

Далее мы видим три группы данные

* `rwx` Права для "Владельца". Означает что владелец может в директории делать все
* `r-x` Права для группы. Означает что пользователи группы могут читать получать список файлов и переходить в каталог.
* `r-x` Права для "остальных". Аналогично строчке выше.

### Числовые кода доступа

Часто также используется другой способ описания прав доступа, с использованием цифр: `755`. Это не одно число, а три числа, каждое из которых представляет собой группу `rwx` для наших типов пользователя в том же порядке: для владельца, входящих в группу и всех остальных. 0 — означает, что нет никаких прав для данного типа пользователей.

Рассмотрим таблицу

| Число | Доступ                     | rwx | Бинарное значение |
| ----- | -------------------------- | --- | ----------------- |
| 7     | чтение, запись, выполнение | rwx | 111               |
| 6     | чтение, запись             | rw- | 110               |
| 5     | чтение и выполнение        | r-x | 101               |
| 4     | только чтение              | r-- | 100               |
| 3     | запись и выполнение        | -wx | 011               |
| 2     | только запись              | -w- | 010               |
| 1     | выполнение only            | --x | 001               |
| 0     | нет прав                   | --x | 001               |

`drwxr-xr-x` в числовой форме соответствует `755`, а `-rw-r--r--` — `644`.

## Изменение прав доступа

Для управления правами используется команда chmod. При использовании chmod вы можете устанавливать разрешения для пользователя (user), группы (group) и других (other). Вы можете использовать эту команду в двух режимах: относительный режим и абсолютный режим. В абсолютном режиме три цифры используются для установки основных разрешений.

При настройке разрешений рассчитайте необходимое вам значение. Если вы хотите установить чтение, запись и выполнение для пользователя, чтение и выполнение для группы, а также чтение и выполнение для других в файле `/somefile`, то вы используете следующую команду `chmod`:

```bash
chmod 755 /somefile
```

Если вы хотите изменить разрешения относительно текущих разрешений, вы можете использовать `chmod` в относительном режиме. При использовании `chmod` в относительном режиме вы работаете с тремя индикаторами, чтобы указать, что вы хотите сделать:

* Сначала вы указываете, для кого вы хотите изменить разрешения. Для этого вы можете выбрать между пользователем (u), группой (g) и другими (o).
  * Затем вы используете оператор для добавления или удаления разрешений из текущего режима или устанавливаете их абсолютно.
  * В конце вы используете r, w и x, чтобы указать, какие разрешения вы хотите установить.

При изменении разрешений в относительном режиме вы можете пропустить часть «кому», чтобы добавить или удалить разрешение для всех объектов. Например, эта команда добавляет разрешение на выполнение для всех пользователей:

```bash
chmod +x somefile
```

При работе в относительном режиме вы также можете использовать более сложные команды. Например, эта команда добавляет разрешение на запись в группу и удаляет чтение для других:

```bash
chmod g+w,o-r somefile
```
