ОП.05Пользователи, группы и sudoзанятие 5Материалы

Часть 3 из 7

Группы

В этой части разберём основную и дополнительные группы пользователя, файл /etc/group и то, как членство в группе даёт доступ к файлам.

  1. 3.1 Основная и дополнительные группы
  2. 3.2 Группа даёт доступ к файлам

3.1 Основная и дополнительные группы

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

У каждого пользователя одна основная группа и сколько угодно дополнительных. Основная группа записана номером в четвёртом поле /etc/passwd. Файлы, которые создаёт пользователь, получают эту группу. В Ubuntu для каждого пользователя создаётся личная основная группа с тем же именем: у ubuntu это группа ubuntu. Дополнительные группы перечислены в файле /etc/group.

Строка /etc/group состоит из четырёх полей: имя группы, пароль группы (x, пароли групп практически не используются), GID и список участников через запятую. В этом списке указаны только те, для кого группа дополнительная. Поэтому в строке личной группы ubuntu:x:1000: участников нет: основную группу пользователь получает через поле GID в /etc/passwd.

ГруппаЗачем нужна
sudoучастники выполняют команды от имени root через sudo
admучастники читают системные журналы в /var/log
cdrom, plugdevдоступ к оптическому приводу и съёмным устройствам
usersобщая группа обычных пользователей

Команда groups выводит имена групп пользователя. Тот же список выводит id -Gn: ключ -G — все группы, -n — имена вместо номеров. Команда getent group выводит строки групп из базы.

В терминалеГруппы пользователя
  1. groups# группы текущего пользователя
    что делает

    Что делает команда. Выводит имена групп текущего пользователя; первая — основная.

    По частям:

    groups
    вывести группы пользователя
  2. id -Gn# то же самое через id
    что делает

    Что делает команда. Выводит имена всех групп текущего пользователя.

    По частям:

    id
    вывести номера пользователя и его группы
    -G
    вывести все группы
    -n
    имена вместо номеров
  3. getent group sudo adm# строки двух групп
    что делает

    Что делает команда. Выводит строки групп sudo и adm из базы групп.

    По частям:

    getent
    получить запись из системной базы данных
    group
    база групп
    sudo
    какая запись
    adm
    какая запись
  4. grep ubuntu /etc/group# все группы, где встречается ubuntu
    что делает

    Что делает команда. Выводит строки /etc/group, в которых встречается ubuntu.

    По частям:

    grep
    отобрать строки, в которых есть образец
    ubuntu
    образец
    /etc/group
    в каком файле искать (абсолютный путь)
Результат

у ubuntu девять групп, первая — основная ubuntu; в строке sudo среди участников есть ubuntu.

Снимок 3.1Ubuntu 24.04
  1. 1первая в списке — основная группа ubuntu
  2. 2остальные — дополнительные группы
  3. 3имя группы
  4. 4пароль группы не используется
  5. 5GID группы
  6. 6участники через запятую
  7. 7личная группа: участников в строке нет
Группы пользователя ubuntu и строки файла /etc/group.Весь снимок ↗

Группы пользователя ubuntu и строки файла /etc/group.

Что показывает снимок. У ubuntu основная группа ubuntu и восемь дополнительных; в строке sudo среди участников есть ubuntu; личная группа ubuntu участников не перечисляет.

Где это пригодится. Когда пользователю нужен доступ к устройству, журналам или правам администратора, его добавляют в соответствующую группу; права самих файлов при этом не меняют.

3.2 Группа даёт доступ к файлам

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

Системный журнал /var/log/syslog принадлежит служебной записи syslog и группе adm, права rw-r-----. Владелец пишет в журнал, участники группы adm читают его, остальным доступ закрыт. Пользователь ubuntu состоит в adm, поэтому может читать системные журналы без sudo.

Домашний каталог /home/ubuntu имеет права rwxr-x---. Для каталога r означает право читать список файлов, x — право входить в каталог, w — право создавать и удалять файлы в нём. Остальные пользователи не могут даже открыть каталог, поэтому личные файлы одного пользователя закрыты от другого.

ПравоДля файлаДля каталога
rчитать содержимоевыводить список имён
wизменять содержимоесоздавать, удалять и переименовывать файлы внутри
xзапускать как программувходить в каталог и обращаться к файлам внутри
В терминалеВладелец, группа и права
  1. ls -l /var/log/syslog# журнал: группа adm
    что делает

    Что делает команда. Выводит владельца, группу и права системного журнала.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, группа, размер
    /var/log/syslog
    что показать (абсолютный путь)
  2. ls -ld /home/ubuntu# домашний каталог
    что делает

    Что делает команда. Выводит права самого домашнего каталога ubuntu, не заходя внутрь.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, группа, размер
    -d
    показать сам каталог, а не его содержимое
    /home/ubuntu
    что показать (абсолютный путь)
Результат

журнал принадлежит syslog и группе adm; домашний каталог закрыт для остальных.

Снимок 3.2Ubuntu 24.04
  1. 1владелец rw-, группа r--, остальные ---
  2. 2владелец — служебная запись syslog
  3. 3группа adm: её участники читают журнал
  4. 4домашний каталог: группа читает, остальные — нет
Права на системный журнал и на домашний каталог.Весь снимок ↗

Права на системный журнал и на домашний каталог.

Что показывает снимок. Журнал syslog принадлежит syslog и группе adm и закрыт для остальных; домашний каталог ubuntu закрыт для остальных пользователей.

Где это пригодится. Чтобы разработчик читал журналы сервера без sudo, его добавляют в группу adm.

Итоги части 3

  • Группа — набор учётных записей; права, выданные группе, получают все участники.
  • Основная группа записана в /etc/passwd, дополнительные — в /etc/group.
  • Строка /etc/group: имя, пароль группы, GID, участники.
  • Права проверяются по первой подходящей тройке: владелец, группа, остальные.

В отчётСнимок groups и getent group sudo с объяснением, где основная группа, а где дополнительные.

Открыть в отдельной вкладке ↗