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

Часть 1 из 7

Учётные записи

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

  1. 1.1 Кто работает в системе
  2. 1.2 Файл /etc/passwd
  3. 1.3 Служебные учётные записи

1.1 Кто работает в системе

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

Внутри системы пользователь — это прежде всего номер UID (user identifier). Имя нужно людям, а ядро сравнивает номера: в свойствах файла записан UID владельца, у процесса — UID того, кто его запустил. Номер группы называется GID (group identifier).

Сравнить можно с пропуском в офисное здание. На пропуске есть фамилия, но турникет проверяет номер карты. Два пропуска с одной фамилией турникет различит, а один номер на двух картах он будет считать одним человеком.

Команда whoami выводит имя текущего пользователя. Команда id выводит все номера сразу: UID, GID основной группы и список всех групп, в которых пользователь состоит. В Live-сеансе Ubuntu пользователь называется ubuntu и имеет UID 1000. У суперпользователя root UID всегда равен 0.

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

    Что делает команда. Выводит имя пользователя, от имени которого работает оболочка.

    По частям:

    whoami
    вывести имя текущего пользователя
  2. id# номера и группы
    что делает

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

    По частям:

    id
    вывести номера пользователя и его группы
  3. id root# номера пользователя root
    что делает

    Что делает команда. Выводит номера и группы учётной записи root.

    По частям:

    id
    вывести номера пользователя и его группы
    root
    чей номер показать
Результат

whoami выводит ubuntu; id — UID 1000 и девять групп; у root UID и GID равны 0.

Снимок 1.1Ubuntu 24.04
  1. 1имя текущего пользователя
  2. 2UID — номер пользователя
  3. 3GID — номер основной группы
  4. 4groups — все группы пользователя
  5. 5у root UID 0
whoami и id: имя, номер пользователя, основная группа и все группы.Весь снимок ↗

whoami и id: имя, номер пользователя, основная группа и все группы.

Что показывает снимок. Текущий пользователь — ubuntu с UID 1000; основная группа ubuntu, всего девять групп; у root UID и GID равны 0.

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

1.2 Файл /etc/passwd

Учётные записи хранятся в текстовом файле /etc/passwd, по одной строке на запись. На прошлом занятии мы открывали его описание командой man 5 passwd. Строка состоит из семи полей, разделённых двоеточием.

№ПолеПример для ubuntu
1имя входаubuntu
2пароль: x означает, что хеш пароля в /etc/shadowx
3UID1000
4GID основной группы1000
5комментарий: полное имя или описаниеLive session user,,,
6домашний каталог/home/ubuntu
7оболочка, которая запускается после входа/bin/bash

Команда getent passwd имя выводит строку из базы учётных записей. Она читает и /etc/passwd, и другие источники, например сетевой каталог пользователей в организации, поэтому в скриптах предпочитают её. Команда cut -d: -f1,3,7 вырезает из строк поля 1, 3 и 7: -d: задаёт разделитель, -f — номера полей.

Схема · анатомия строки учётной записи

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

В терминалеСтроки учётных записей
  1. getent passwd ubuntu root# две строки из базы
    что делает

    Что делает команда. Выводит строки учётных записей ubuntu и root из базы пользователей.

    По частям:

    getent
    получить запись из системной базы данных
    passwd
    база учётных записей
    ubuntu
    какая запись
    root
    какая запись
  2. wc -l /etc/passwd# сколько строк в файле
    что делает

    Что делает команда. Считает строки в /etc/passwd, то есть число учётных записей.

    По частям:

    wc
    посчитать строки, слова или байты
    -l
    считать только строки
    /etc/passwd
    какой файл (абсолютный путь)
  3. cut -d: -f1,3,7 /etc/passwd | head -8# имя, UID и оболочка первых восьми записей
    что делает

    Что делает команда. Вырезает из строк /etc/passwd имя, UID и оболочку и оставляет первые восемь строк.

    По частям:

    cut
    вырезать из строк нужные поля
    -d:
    поля разделены двоеточием
    -f1,3,7
    взять поля 1, 3 и 7: имя, UID и оболочку
    /etc/passwd
    из какого файла (абсолютный путь)
    |
    передать вывод левой команды на вход следующей
    head
    оставить только первые строки
    -8
    сколько первых строк оставить: 8
Результат

строки ubuntu и root по семь полей; в файле 50 записей; у большинства первых записей оболочка /usr/sbin/nologin.

Снимок 1.2Ubuntu 24.04
  1. 1имя входа
  2. 2x — пароль хранится в /etc/shadow
  3. 3UID
  4. 4GID основной группы
  5. 5комментарий
  6. 6домашний каталог
  7. 7оболочка
  8. 8в файле 50 учётных записей
  9. 9системные записи с оболочкой nologin
Строка учётной записи ubuntu по полям; число записей в /etc/passwd.Весь снимок ↗

Строка учётной записи ubuntu по полям; число записей в /etc/passwd.

Что показывает снимок. Строка ubuntu в базе учётных записей состоит из семи полей; в /etc/passwd 50 записей, у большинства оболочка nologin.

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

1.3 Служебные учётные записи

Оболочка /bin/bash в Live-сеансе есть только у двух записей — root и ubuntu, а всего записей в файле пятьдесят. Остальные записи служебные: от их имени работают программы. Веб-сервер работает от имени www-data, журнал ведёт syslog, время синхронизирует systemd-timesync.

Служебные записи нужны для разграничения доступа между программами. Если веб-сервер работает от имени www-data, то ошибка в нём даёт доступ только к файлам, которые принадлежат www-data; остальные файлы системы для него закрыты. У служебных записей UID меньше 1000, а вместо оболочки указана программа /usr/sbin/nologin: она печатает отказ и завершает сеанс, поэтому войти в систему под такой записью нельзя.

Диапазон UIDКому выдаётся
0root — суперпользователь
1–999системные и служебные учётные записи программ
1000 и большеобычные пользователи, первый созданный получает 1000
65534nobody — запись без прав, для программ, которым права не нужны

Команда ps -eo user= выводит владельца каждого процесса системы; sort сортирует список, а uniq -c считает одинаковые строки подряд. В результате видно, от имени каких учётных записей работают процессы.

В терминалеСлужебные записи и процессы
  1. grep bash /etc/passwd# записи с оболочкой bash
    что делает

    Что делает команда. Выводит строки /etc/passwd, в которых встречается bash, — учётные записи с оболочкой bash.

    По частям:

    grep
    отобрать строки, в которых есть образец
    bash
    образец
    /etc/passwd
    в каком файле искать (абсолютный путь)
  2. grep -c nologin /etc/passwd# сколько записей без входа
    что делает

    Что делает команда. Считает строки /etc/passwd со словом nologin — учётные записи без входа в систему.

    По частям:

    grep
    отобрать строки, в которых есть образец
    -c
    вывести не строки, а их количество
    nologin
    образец
    /etc/passwd
    в каком файле искать (абсолютный путь)
  3. getent passwd www-data# учётная запись веб-сервера
    что делает

    Что делает команда. Выводит строку служебной учётной записи веб-сервера www-data.

    По частям:

    getent
    получить запись из системной базы данных
    passwd
    база учётных записей
    www-data
    какая запись
  4. ps -eo user= | sort | uniq -c# сколько процессов у каждой записи
    что делает

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

    По частям:

    ps
    вывести список процессов
    -eo user=
    -e — все процессы системы; -o user= — выводить только владельца, знак = убирает заголовок столбца
    |
    передать вывод левой команды на вход следующей
    sort
    отсортировать строки
    |
    передать вывод левой команды на вход следующей
    uniq
    объединить одинаковые соседние строки
    -c
    перед каждой строкой вывести, сколько раз она повторилась
Результат

оболочка bash только у root и ubuntu; 39 записей с nologin; процессы работают от имени root, ubuntu и служебных записей.

Снимок 1.3Ubuntu 24.04
  1. 1у root и ubuntu оболочка /bin/bash
  2. 239 записей с nologin
  3. 3UID 33 — служебная запись www-data
  4. 4домашний каталог веб-сервера
  5. 5nologin: войти под этой записью нельзя
  6. 6процессы root
  7. 7процессы пользователя ubuntu
Оболочка bash у двух записей, nologin у служебных; процессы по учётным записям.Весь снимок ↗

Оболочка bash у двух записей, nologin у служебных; процессы по учётным записям.

Что показывает снимок. Оболочка bash есть только у root и ubuntu; 39 записей не могут входить в систему; процессы работают от имени root, ubuntu и служебных записей.

Где это пригодится. Если служба ведёт себя странно, по ps проверяют, от имени какой учётной записи она работает и к каким файлам поэтому имеет доступ.

Итоги части 1

  • Учётная запись — имя, UID, основная группа, домашний каталог и оболочка.
  • Ядро различает пользователей по номерам: UID и GID; у root UID 0.
  • В /etc/passwd одна строка на запись, семь полей через двоеточие.
  • Служебные записи с UID меньше 1000 и оболочкой nologin нужны программам.

В отчётСнимок id и строка вашей учётной записи из getent passwd с подписанными полями.

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