Чому висновок від `groups` відрізняється від` user groups`, якщо я наразі увійшов як користувач?


21

Я не впевнений, чому наступні мають різний вихід. Я розумію, що групи, не вказуючи користувача, дають всі групи, членами яких в даний час є користувач.

jacob@box:~$ groups
jacob adm lp dialout cdrom plugdev lpadmin sambashare

jacob@box:~$ groups jacob
jacob : jacob

Також що це означає "групи поточного процесу" (зі сторінки групи груп)? Де вони встановлені?

ПРИМІТКА: Мій дистрибутив - Ubuntu.


@Jake Спробуйте вийти, а потім знову.

1
У мене виникає це питання навпаки. "Моє ім'я групи" дає мені всі групи, які я маю у файлі / etc / groups, але лише "групи" показує мені лише мою основну групу. І, дійсно, команди, які вимагають, щоб я був у певній додатковій групі, відмовляються через відсутність дозволів. Звичайно, я хотів би знати, що це спричиняє.
Тодд Уолтон

Відповіді:


11

Це може бути одне з наступних:

  • Це може бути помилка (хоча я сумніваюся в цьому)
  • Можливо, вам доведеться знову вийти та увійти

Групи встановлені в /etc/group.


8

Так само, як кожен процес має поточний реальний та ефективний ідентифікатор користувача та реальний та ефективний ідентифікатор групи, він також має список додаткових груп . Це числа (а не імена), які підтримуються ядром. Вони встановлюються процесом входу (або менеджером дисплеїв), коли ви реєструєте його, як і ваш ідентифікатор користувача. Вони успадковуються підпроцесами, як і ваш ідентифікатор користувача.

Якщо ви groupsне працюєте з аргументами, він в кінцевому підсумку викликає getgroups () для отримання додаткового списку груп з ядра. (У моїй системі Linux / usr / bin / groups - це сценарій оболонки, який виконує "id -Gn", який, в свою чергу, викликає getgroups ().)

Під час запуску groups usernameкоманда повинна "здогадатися" про те, якими будуть додаткові групи, коли цей користувач увійде в систему. Це, як правило, це робить, читаючи / etc / group або розмовляючи з NIS або розмовляючи з nscd або ... Ну, є багато способів це може працювати.

Те, що ви спостерігаєте, схоже на виявлення того, що ваш поточний реальний ідентифікатор користувача та ваш запис у / etc / passwd несуперечливі. Це означає, що у налаштуваннях вашої системи є щось мало дивне, але важко сказати, що без додаткового дослідження.


3

(Зауваження: groupsКоманда, хоча все ще корисна, здебільшого витісняється командою id .)

Користувач має первинну групу, яку традиційно визначають у файловому /etc/passwdфайлі, з яким він входить, але сьогодні він може мати інші джерела. Він також може бути членом додаткових груп, відомих як вторинні або додаткові групи, традиційно зазначені у файлі /etc/groups, але які сьогодні також можуть надходити або мати на увазі додаткові джерела (наприклад, NIS, LDAP, SAMBA тощо).

Первинні та додаткові групи визначаються під час входу та залишаються поточними . Однак користувач може в будь-який момент змінити свою поточну активну первинну групу за допомогою newgrpкоманди.

Процес входу задає первинну та додаткову групи. Надалі він, як правило, викликає функцію libc initgroups , яка збирає список додаткових групових даних і передає їх функції функції setgroups , яка встановлює їх у контексті процесу.

Джерелами інформації для initgroups:

використовуються бібліотекою GNU C та деякими іншими програмами для визначення джерел, з яких можна отримати інформацію про службу імен у ряді категорій та в якому порядку. Кожна категорія інформації ідентифікується ім'ям бази даних.

У groupsкоманді показує групи в даний час застосовуються до вашого користувачеві, і список буде почати з поточної основною групою , за яким слід додатковим групи з моменту входу в системі . Будь-які зміни джерел даних після часу входу не відображаються у відображеному списку.

groups usernameКоманда просить Linux , щоб обчислити групи для цього користувача, що він буде робити , використовуючи головним чином файли /etc/password і /etc/groupsпотім додаткові джерела. Це відобразить поточну ситуацію системних файлів і може не дорівнювати поточній групі, яка діє ще з моменту входу.

groups usernameКоманда може дати інший результат , якщо він не використовує всі джерела, процес Логіна , використовувані для розрахунку ваших додаткових груп, що і по- видимому , відбулися у вашому випадку. Ці джерела можуть бути недоступними у вашому вході або можуть просто не звертатися до команди.

Використання id usernameкоманди може дати кращі результати, хоча також не гарантується, що вона буде такою ж повною, як і процес входу. idКоманда пізніша , ніж та повинна була бути більш точними , ніж, стара groupsкоманда.

Незважаючи на те, що groupsкоманда дає точний і правильний результат, ви добре продемонстрували, що groups usernameкоманда не може покладатися на те саме.

Не вивчаючи вихідний код groupsкоманди, я б здогадався, що реалізація groups usernameкоманди у ваших аналізах дистрибуції Linux /etc/groups, яка у вашому випадку нічого не містить, але не використовує /etc/nsswitch.conf, звідки вийшли всі ваші додаткові групи. Тому в списку тільки ім'я основної групи, jacob.

Для отримання додаткової інформації див:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.