Команда id: проверка UID и групп, whoami, groups и дополнительные группы

Тестовая средаСемейство RHELAlmaLinux 9.8coreutils 8.32Учётная запись rootDebian 12 · coreutils 9.1 обычная учётная запись
Команды для пользователей · группid, whoami, groupsРасположение/usr/bin/id

На сервере Linux UID и группы текущей учётной записи проверяют командой id; если нужно только имя учётной записи, используют whoami, а если только имена групп — groups. При запуске трёх команд по очереди на серверах AlmaLinux 9 и Debian 12 и сравнении вывода id -un и whoami вывели одно и то же имя учётной записи, а groups вывела список групп из id, оставив только имена.

Вывод ниже получен на сервере AlmaLinux 9.8 под учётной записью root и на сервере Debian 12 под обычной учётной записью. Имя и номера учётной записи для входа и её дополнительные группы заменены примерными значениями (user1, 1000, adm, systemd-journal).

1️⃣ Базовое использование команды id

  • ↪️ Как читать три поля uid, gid и groups

При запуске id без опций сведения об учётной записи, запустившей текущую оболочку, выводятся одной строкой. Под учётной записью root все три поля были равны 0(root).

id
uid=0(root) gid=0(root) groups=0(root)

Поле uid — это номер и имя учётной записи, поле gid — номер и имя основной группы (primary group). Поле groups — это все группы, в которые входит учётная запись, причём первой идёт основная группа.

Если после id указать имя учётной записи, выводятся сведения об этой учётной записи. При проверке обычной учётной записи user1, у которой есть дополнительные группы, в поле groups после основной группы user1 шли adm и systemd-journal. Эти группы, в которые учётная запись входит помимо основной, и есть дополнительные группы (supplementary group).

id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1),4(adm),190(systemd-journal)

У многих учётных записей номера UID и gid совпадают, поэтому два числа легко принять за одно значение, но у учётной записи adm, которая есть на сервере по умолчанию, UID был равен 3, а номер основной группы — 4. У учётной записи operator основной группой была root.

id adm
uid=3(adm) gid=4(adm) groups=4(adm)
id operator
uid=11(operator) gid=0(root) groups=0(root)

Если указать несколько учётных записей, они выводятся по одной в строке.

id root bin
uid=0(root) gid=0(root) groups=0(root)
uid=1(bin) gid=1(bin) groups=1(bin)

Если указать несуществующую учётную запись, появляется ошибка [no such user], а код завершения был равен 1.

id no-such-user9
id: 'no-such-user9': no such user
echo $?
1

Код завершения для существующей учётной записи равен 0, поэтому в скрипте его можно использовать как условие проверки, существует ли учётная запись.

2️⃣ Опции команды id

  • ↪️ -u, -g, -G для номеров и -n для имён

Чтобы передать скрипту только один номер из всего вывода, опцией выбирают одно поле. -u выводит UID, -g — номер основной группы, а -G — все номера групп, в которые входит учётная запись.

id -u
0
id -u daemon
2
id -G user1
1000 4 190

Вместе с -n вместо номеров выводятся имена. При проверке групп user1 через [id -Gn] три номера превратились в три имени.

id -Gn user1
user1 adm systemd-journal
id -gn user1
user1

-n и -r используют вместе с одной из опций -u, -g и -G. При указании только -n появилась ошибка ниже.

id -n
id: cannot print only names or real IDs in default format

-r выводит реальный (real) ID вместо эффективного (effective) ID. Запуск [id -ur] в оболочке учётной записи root вывел 0. Если указать вместе две или больше опций, выбирающих номер, например -u и -g, появляется ошибка [cannot print "only" of more than one choice]. Опции собраны ниже.

ОпцияКопироватьОписание
-u--userВыводит номер UID
-g--groupВыводит номер основной группы
-G--groupsВыводит все номера групп, в которые входит учётная запись
-n--nameВместе с -u, -g или -G выводит имя вместо номера
-r--realВместе с -u, -g или -G выводит реальный (real) ID вместо эффективного ID
ОпцияКопироватьОписание
-Z--contextВыводит только контекст безопасности процесса
-z--zeroРазделяет элементы вывода символами NUL вместо пробелов; недоступно в формате по умолчанию
-aПринимается только для совместимости с другими версиями id и игнорируется
--helpВыводит справку
--versionВывести версию

🔲 Симулятор команды id

Симулятор ниже начинает работу под учётной записью user1, у которой есть дополнительные группы. Добавив группу wheel чипом [🖊 Other window], можно сравнить [id] и [id user1], а чипом [🔁 Log in again] проверить группы новой оболочки.

Симулятор команды idcoreutils 8.32
[root@server work]#
Работает только в браузере. Измените группы чипом [🖊 Other window], затем сравните [id] и [id user1] и проверьте группы новой оболочки чипом [🔁 Log in again].

3️⃣ Команда whoami и id -un

  • ↪️ Проверка имени текущей учётной записи и проверка других учётных записей

Если нужно только имя учётной записи текущей оболочки, запускают whoami. Страница man описывает whoami как ту же команду, что и [id -un]. Под учётной записью root обе команды вывели root.

whoami
root
id -un
root

Под обычной учётной записью на сервере Debian 12 обе команды тоже вывели одно и то же имя учётной записи.

whoami
user1
id -un
user1

whoami выводит имя учётной записи, соответствующее текущему эффективному (effective) UID. Команда проверяет только текущую учётную запись, поэтому, если добавить после неё имя учётной записи, появляется ошибка.

whoami user1
whoami: extra operand 'user1'
Try 'whoami --help' for more information.

Имя или номер другой учётной записи проверяют, указав эту учётную запись после id.

id -un user1
user1

Если вместо -un указать -u, на том же месте вместо имени учётной записи выводится номер UID.

4️⃣ Команда groups и дополнительные группы

  • ↪️ Основная и дополнительные группы и оболочка после изменения групп

groups выводит только имена групп одной строкой. Без имени учётной записи выводятся группы текущей оболочки, и под учётной записью root это была одна группа root.

groups
root

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

groups user1 daemon
user1 : user1 adm systemd-journal
daemon : daemon

Основная группа и дополнительные группы записываются в разных местах. Дополнительные группы записаны как участники в четвёртом поле базы данных групп (/etc/group), а основная группа — как номер в четвёртом поле сведений об учётной записи (/etc/passwd).

getent group adm
adm:x:4:user1
getent group user1
user1:x:1000:
getent passwd daemon
daemon:x:2:2:daemon:/sbin:/sbin/nologin

У группы user1, основной группы user1, четвёртое поле было пустым, а в дополнительной группе adm user1 был записан как участник. Число 2 в четвёртом поле строки учётной записи daemon — это номер основной группы.

Для добавления учётной записи в дополнительную группу служит команда usermod в виде [usermod -aG группа учётная запись]. Если указать только -G без -a, учётная запись выпадет из прежних дополнительных групп, не указанных в списке, поэтому -a указывают вместе с ней.

groups, запущенная без имени учётной записи, выводит группы процесса текущей оболочки. Страница man объясняет, что при изменении базы данных групп это значение может отличаться от базы данных.

Поэтому сразу после изменения групп проверьте группы в базе данных через [groups учётная запись] или [id учётная запись], а чтобы они применились в оболочке, войдите заново. Команда, которая меняет текущий ID группы без выхода из системы, — newgrp.

🔢 FAQ & рекомендуемые материалы

Можно. Запуск [id 0] на сервере AlmaLinux 9.8 вывел то же, что и [id root]: uid=0(root) gid=0(root) groups=0(root).

С номера, указанного в UID_MIN в файле /etc/login.defs. На сервере AlmaLinux 9.8 это было 1000, а SYS_UID_MIN и SYS_UID_MAX в том же файле были равны 201 и 999 — это диапазон системных учётных записей.

who am i — это who с двумя добавленными словами; команда работает так же, как опция -m, и выводит одну строку со сведениями о входе для терминала, в котором идёт ввод. whoami выводит только одну строку с именем учётной записи текущего эффективного UID.

ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Докажите, что вы человек: 0   +   3   =