Під час запуску він шукає 1 даного користувача в і (хоча це може бути LDAP, NIS або щось інше 2 ) і показує всі знайдені групи.groups username
/etc/passwd
/etc/group
З іншого боку, коли ви запускаєте groups
команду без будь-яких аргументів, вона просто перераховує всі групи, до яких вона сама належить 3, - що не обов'язково те саме, що вказано в /etc/group
. (Дивіться нижче для пояснення.) Насправді, тільки пошуки зроблені /etc/group
призначені для перекладу GIDs для імен груп.
Кожен процес має набір облікових даних , який містить (серед іншого) "реальний ідентифікатор групи" (первинний GID), "ефективний ідентифікатор групи" (EGID) та список ідентифікаторів "додаткової групи" (вторинні GID). За замовчуванням процес успадковує свої облікові дані від свого батьківського; однак процесам, що працюють як root (UID 0) або мають CAP_SETUID
можливість встановлювати довільні облікові дані.
Зокрема, коли ви входите в Linux (будь то в tty, X11 або через SSH), процес входу (/ bin / login, gdm, sshd) шукає ваше ім'я користувача, щоб визначити ваш UID, первинний GID та вторинний GID . На персональному комп'ютері, це просто означає , що читання відповідні рядки з passwd
і group
файлів (або NIS, LDAP і т.д.).
Потім процес переходить Ввійти 4 на ці облікові дані перед початком сеансу, і кожен процес запуску тепер матиме такий самий UID і GIDs - система не перевіряє , /etc/group
більше 5 і не підберуть будь-які зміни , зроблені.
Таким чином, /usr/bin/groups
процес буде належати до тих самих груп, що і ви, коли ви входили в систему , а не те, що в базі даних йдеться.
Примітка: Наведене пояснення стосується також майже всіх Unixes; до сімейства Windows NT (крім UID та GID всі називаються "SID", немає "первинної групи", облікові дані називаються "маркер процесу", і CAP_SETUID
це SeCreateTokenPrivilege або SeTcbPrivilege ); і, ймовірно, для більшості інших багатокористувацьких операційних систем.
1 getpwuid () та getgrouplist () використовуються для пошуку груп користувачів.
2 В Linux glibc використовує /etc/nsswitch.conf
для визначення місця пошуку цієї інформації.
3 groups
використовує getgid (), getegid () та getgroups () для отримання власних облікових даних.
4 setuid (), setgid (), initgroups () та пов'язані з ними.
5 Виняток, звичайно, різні інструменти , які працюють підвищені ( Setuid ) , такі як su
, sudo
, sg
, newgrp
, pkexec
, і так далі. Це означає, що su $USER
буде породжено оболонку оновленим списком груп.