Модуль 04 — Пользователи, группы и права

Кто может читать, менять и запускать каждый файл

Прогресс курса Модуль 4 из 9

Что вы освоите в этом модуле

01

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

Linux — многопользовательская система: каждая программа работает от имени какого-то пользователя, и доступ к файлам определяется этим именем. Пользователи бывают трёх видов.

ВидUIDПримерЗачем
Суперпользователь0rootМожет всё; проверки прав на него не действуют
Системные1–999www-data, postgres, sshdОт их имени работают службы; войти под ними нельзя
Обычные1000 и вышеstudentЛюди

Система различает пользователей по числу UID, имя — для людей. Группа объединяет пользователей, чтобы выдать права сразу нескольким. У каждого пользователя есть основная группа (обычно с тем же именем) и дополнительные.

$ id
uid=1000(student) gid=1000(student) группы=1000(student),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),100(users),101(netdev)

Пользователь student состоит в группе sudo — поэтому ему доступна команда sudo. Остальные группы дают доступ к устройствам (звук, видео, съёмные диски).

Сведения хранятся в текстовых файлах:

$ grep student /etc/passwd
student:x:1000:1000:Student,,,:/home/student:/bin/bash
#  имя :x:UID :GID :описание  :домашний каталог:оболочка
$ grep ^sudo: /etc/group
sudo:x:27:student
$ cat /etc/shadow
cat: /etc/shadow: Отказано в доступе

В /etc/passwd на месте пароля стоит x: сами хеши паролей лежат в /etc/shadow, который может читать только root. Файл /etc/passwd читают все — по нему программы переводят UID в имена.

02

Создать пользователя и группу

В Debian пользователей удобно создавать командой adduser: она сделает домашний каталог, скопирует в него файлы настроек из /etc/skel и спросит пароль. Вопросы о полном имени и телефоне можно пропустить клавишей Enter.

$ sudo adduser anna                   # создать, задать пароль
$ sudo groupadd web                   # создать группу
$ sudo usermod -aG web anna           # добавить anna в группу web
$ groups anna
anna : anna users web
$ ls -ld /home/anna
drwx------ 2 anna anna 4096 окт 14 21:38 /home/anna
В usermod -aG буква a (append) обязательна. Без неё usermod -G web anna заменит все дополнительные группы на одну web — так по ошибке лишают пользователя sudo.

Новая группа начинает действовать при следующем входе пользователя: уже запущенная оболочка о ней не знает. Остальные команды:

КомандаЧто делает
sudo passwd annaЗадать пароль другому пользователю; passwd без имени — себе
sudo usermod -aG sudo annaДать права администратора
sudo gpasswd -d anna webУбрать из группы
sudo usermod -L annaЗаблокировать вход по паролю (-U — разблокировать)
sudo deluser --remove-home annaУдалить вместе с домашним каталогом

В других дистрибутивах adduser может отсутствовать — там используют низкоуровневую useradd -m -s /bin/bash anna и затем passwd anna.

03

Права rwx

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

$ ls -l report.txt
-rw-r----- 1 anna web 1204 окт 14 11:02 report.txt

 -   rw-   r--   ---       anna   web
 │   └┬┘   └┬┘   └┬┘        │      └─ группа файла
 │    │     │     └─ остальные: ничего
 │    │     └─ группа web: чтение
 │    └─ владелец anna: чтение и запись
 └─ тип: обычный файл

Права проверяются по первому совпадению: если вы владелец — действует первая тройка, даже если у группы прав больше. Если не владелец, но в группе — вторая. Иначе — третья.

Одни и те же буквы значат разное для файла и для каталога:

ПравоДля файлаДля каталога
r — readЧитать содержимоеВидеть список имён (ls)
w — writeИзменять содержимоеСоздавать, удалять и переименовывать файлы внутри
x — executeЗапускать как программуВходить (cd) и обращаться к файлам по имени

Из таблицы два неочевидных следствия. Удалить файл можно и без прав на сам файл — достаточно права w на каталог. А каталог с r, но без x показывает имена, но не пускает внутрь:

$ ls -ld dd
drw------- 2 student student 60 окт 14 21:35 dd
$ ls dd
f
$ cd dd
-bash: cd: dd: Отказано в доступе
04

chmod: символьная и числовая запись

Символьная запись меняет отдельные права: кому (u владелец, g группа, o остальные, a все), что сделать (+ добавить, - убрать, = установить ровно так) и какие права.

$ chmod u+x deploy.sh          # владельцу — запуск
$ chmod go-w report.txt        # группе и остальным — убрать запись
$ chmod u+x,o-r u.txt
$ ls -l u.txt
-rwxr----- 1 student student 0 окт 14 21:35 u.txt

Числовая запись задаёт все права сразу. Каждая тройка — сумма: r = 4, w = 2, x = 1.

ЧислоПраваТипичное применение
644rw-r--r--Обычный файл: владелец пишет, остальные читают
640rw-r-----Конфигурация с паролем: группа службы читает, остальные — нет
600rw-------Секреты: закрытый SSH-ключ, файл с паролем
755rwxr-xr-xКаталог или программа, доступные всем
700rwx------Личный каталог: ~/.ssh, домашний
$ chmod 640 u.txt
$ ls -l u.txt
-rw-r----- 1 student student 0 окт 14 21:35 u.txt
$ chmod -R g+rX shared/      # рекурсивно; X — запуск только каталогам
chmod 777 — «разрешить всем всё» — не решение проблемы с доступом, а новая проблема: любой процесс на сервере, в том числе взломанный сайт, сможет изменить файл. Ищите, от чьего имени работает программа, и давайте права ей.
05

Владелец и группа: chown

Сменить владельца может только root: иначе можно было бы «подарить» файл другому и обойти квоты.

$ chown root u.txt
chown: изменение владельца 'u.txt': Операция не позволена
$ sudo chown anna u.txt                  # владелец
$ sudo chown anna:web u.txt              # владелец и группа
$ sudo chown -R www-data:www-data /var/www/site   # рекурсивно

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

$ sudo mkdir /srv/shared
$ sudo chown root:web /srv/shared
$ sudo chmod 2775 /srv/shared       # 2 — setgid: новые файлы получат группу web
$ ls -ld /srv/shared
drwxrwsr-x 2 root web 4096 окт 14 11:20 /srv/shared
06

Права новых файлов: umask

Новый файл создаётся с правами 666, каталог — 777, из которых вычитаются биты маски umask.

$ umask
0002
$ touch u.txt; mkdir ud; ls -ld u.txt ud
drwxrwxr-x 2 student student 40 окт 14 21:35 ud
-rw-rw-r-- 1 student student  0 окт 14 21:35 u.txt

Маска 002 убирает запись для остальных: 666 → 664, 777 → 775. Это безопасно, потому что в Debian у каждого пользователя своя основная группа из него одного. У root и во многих других дистрибутивах маска 022 — файлы получаются 644. Изменить маску на сеанс — umask 027, навсегда — в ~/.bashrc.

07

sudo и особые права

sudo выполняет одну команду от имени root и записывает её в журнал. Пароль спрашивается ваш, а не root, и запоминается на 15 минут. Кому что разрешено — в /etc/sudoers; в Debian там строка %sudo ALL=(ALL:ALL) ALL: участники группы sudo могут выполнять любые команды.

$ sudo apt update               # одна команда от root
$ sudo -u postgres psql         # от имени другого пользователя
$ sudo -i                       # оболочка root — только когда без неё никак, выход exit
$ sudo visudo                   # править sudoers только так: проверяет синтаксис
Ошибка синтаксиса в /etc/sudoers отключает sudo для всех — без пароля root систему придётся чинить через загрузку в режиме восстановления. Поэтому файл правят только через visudo, а свои правила кладут отдельными файлами в /etc/sudoers.d/.

Кроме rwx, в правах встречаются особые биты:

$ ls -ld /tmp /usr/bin/passwd
drwxrwxrwt 12 root root   3100 окт 14 21:35 /tmp
-rwsr-xr-x  1 root root 118168 апр 19  2025 /usr/bin/passwd
БитГде виденСмысл
setuid (4000)s у владельца: /usr/bin/passwdПрограмма работает с правами владельца файла. passwd запускает любой, а записать новый пароль в /etc/shadow она может, потому что работает как root
setgid (2000)s у группы: общий каталогНовые файлы в каталоге получают его группу
sticky (1000)t у остальных: /tmpПисать могут все, а удалять — только свои файлы

Ключевые выводы модуля

Запомните главное

  • Пользователи — /etc/passwd, группы — /etc/group, хеши паролей — /etc/shadow
  • Добавляя в группу, пишите usermod -aG: без -a остальные группы пропадут
  • Права — три тройки rwx: владелец, группа, остальные; для каталога x — право войти
  • chmod 640 или chmod g+r; 600 — секреты, 644 — обычные файлы, 755 — каталоги и программы
  • Владельца меняет только root: sudo chown пользователь:группа
  • sudo — одна команда от root с записью в журнал; sudoers правится через visudo
Практические задания — на учебном портале. Задания, критерии оценивания, сдача работ и оценки преподавателя — в курсе на portal.nevabit.ru. Учётную запись выдаёт преподаватель.
Модуль 03: Файлы Все модули Модуль 05: Процессы