GID, поточні, первинні, додаткові, ефективні та реальні ідентифікатори групи?


22

Наступні посилання обговорюють ці поняття в різних контекстах. Я прочитав їхні визначення, але все ще не можу сказати, як вони пов’язані між собою, або якщо деякі з них точно такі самі.

Ось один приклад джерела моєї плутанини:

Відповідно man id, якщо я набираю id, я повинен отримати те, що вони називають ефективними та реальними ідентифікаторами групи.

id uid=501(joe) gid=501(joe) groups=501(joe), 100(users)

Однак Вікіпедія посилається на вихід, idщоб розрізняти первинні та додаткові ідентифікатори. Більше того, Вікіпедія розрізняє первинні та додаткові та ефективні проти реальних ідентифікаторів групи. Як ці поняття співвідносяться між собою?

Також, чи правда, що основний ідентифікатор групи = ідентифікатор групи = поточний ідентифікатор групи?


Питання незрозуміле: надані вами посилання дають багато інформації. Що з цим не зрозумієш?
psusi

Відповіді:


24

Ви змішуєте дві різні відмінності тут:

  1. Між реальними та ефективними груповими ідентифікаторами
  2. Між групами основних та додаткових користувачів

Перша відмінність стосується способів запуску процесів . Зазвичай, коли ви запускаєте команду / програму, вона виконується з привілеями вашого користувача. Він має справжній ідентифікатор групи, такий же, як і основний. Це може бути змінено процесом, щоб виконувати деякі завдання як член іншої спеціальної групи. Для цього програми використовують setgidфункцію, яка змінює їх ефективний ідентифікатор групи.

Друга відмінність стосується користувачів . Кожен користувач має свою основну групу . Існує лише один на кожного користувача і згадується як gid у висновку idкоманди. Крім цього, кожен користувач може належати до ряду додаткових груп - і вони перераховані в кінці idвиходу.

[Редагувати]:

Я погоджуюся, що розміщення сторінки idтут дещо вводить в оману. Це, мабуть, тому, що це скорочений варіант опису, наданий інформаційним документом. Щоб побачити це більш чітко, запустіть info coreutils "id invocation"(як це запропоновано в кінці idпосібника).


Спасибі @rozcietrzewiacz. Це було дуже корисно. Чи можу я тоді припустити, що поточний ідентифікатор групи = первинна група?
Амеліо Васкес-Рейна

1
Загалом, ні. Поточну "справжню" групу можна змінити за допомогою newgrpкоманди - дивіться другий абзац посібника у своєму першому посиланні!
rozcietrzewiacz

18

Вигляд ядра

Концептуально існує три групи груп, до складу яких входить процес. Кожен набір є підмножиною наступного.

  1. Єдина група, яка є групою за замовчуванням процесу, до якої будуть належати файли, створені цим процесом.
  2. Набір груп, які перевіряються, коли група вимагає дозволу на відкриття файлу.
  3. Набір груп, до яких може залучатися процес із додатковими привілеями.

З історичних причин ці набори відповідно:

  1. ефективний ідентифікатор групи (EGID);
  2. ефективний ідентифікатор групи плюс додаткові ідентифікатори групи ;
  3. все вищезазначене плюс реальний ідентифікатор групи та збережений ідентифікатор групи set .

Зазвичай програма має єдиний ідентифікатор користувача. Якщо виконуваний має Setuid режим встановлений біт, то програма має два ідентифікатора користувача: його ефективний ідентифікатор користувача є той , який має значення для прав доступу до файлів, на користувача, визначення меж чи процес працює як корінь і так далі. Процес може перемикатися між ефективними та реальними ідентифікаторами користувачів, якщо йому не потрібні додаткові привілеї весь час, або якщо йому потрібно перемикатися між двома некористувальними користувачами.

Той самий механізм існує для групи. Для груп є додаткова функція, яка не існувала при проектуванні системи: процес може бути членом будь-якої кількості груп; це додаткові ідентифікатори групи.

Перегляд бази даних користувачів

Після аутентифікації користувача процес входу переходить до цього користувача, безпосередньо перед запуском оболонки користувача (або будь-якої програми, яку запитував користувач). Незадовго перед переходом на потрібного користувача (і втрату кореневих привілеїв) процес входу переходить на потрібні групи.

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

Сьогодні процес може бути в декількох групах, тож користувачі також можуть бути в декількох групах. Групова база даних (як правило /etc/group) містить список користувачів для кожної групи. Ці групи стають додатковими ідентифікаторами групи для програми, запущеної процесом входу.


Спасибі. У мене є запитання, які розуміють вашу відповідь. unix.stackexchange.com/questions/466742/…
Тім

1

Тут багато чудових відповідей, але якщо ви все ще плутаєтесь, як я, ось інший підхід. Зверніть увагу, що я є лише студентом цього матеріалу, а не майстром , тому ця відповідь є незавершеною роботою, і не вважатись грунтовною відповіддю, принаймні поки що. Розглянемо цю відповідь v0.2.

Групи одночасно прості та складні.

Ключ до ідентифікаторів, які використовуються нижче:

KEY  Full name --------  Description---------------------------------------------

 u   User                 uID = User  ID (a unique # associated with each user)
 g   Group                gID = Group ID (a unique # associated with each group)
                            While each /etc/passwd entry has one uID and one gID,
                            additional gIDs can be associated with a users via
                            /etc/group.


 L   Login          IDs - uID and gID produced from the Login process.  
                            ('L' is not exactly standard Linux terminology, but
                            useful for explanations below.)

 F   File           IDs - uID and gID retrieved from a file's ownership.
                            ('F' is not exactly standard Linux terminology, but
                            useful for explanations below.)


 R   Real           IDs - Who actually                      runs a process 
 E   Effective      IDs - Who spoofed via setuid or setgid, runs a process
 O   Original Eff.  IDs - Place to save the original Effective ID when changing 
                          it (e.g. temporarily downgrading it) so can later 
                          restore it.  Also called "Saved ID"; (but 'S' was not 
                          used for here to help avoid confusion with the 'S' in  
                          'SetUserID' & SetGroupID.)
 +   Supplimentary gIDs - Optional, additional groups (none or more) running 
                          this process which can be used to test for permissions.

Імена користувачів та ідентифікаторів групи:

Category          USER  GROUP  Notes  
----------------- ----  -----  -------------------------------------------  
 From login:      LuID  LgID   From /etc/passwd lookup

 From files:      FuID  FgID   Each file has these. Set by creator process.


 For each running process:

            Real  RuID  RgID   Actual   user starting the program
       Effective  EuID  EgID   Assigned user starting the program*
           Saved  OuID  OgID   Saves original effective ID.
   Supplementary        +gID1  (optional, additional groups)
                        +gID2     
                         ...  

Як процеси набувають ідентифікатори:

1) Вхід підтверджує ім'я користувача, а також повертає LuIDі LgIDз /etc/passwd.

2) Перший процес встановлює ефективні = реальні = вхід, тобто

EuID=RuID=LuID 
EgID=RgID=LgID

3) роздвоєні діти успадковують RuID, EuID, RgIDі EgID, (& , можливо , врятував і зірр), проте,

  • Якщо S U бітовий ідентифікатор (и) встановлюється на файл нової програми для виконання, а потім встановити ефективний з файлу:

    EuID = FuID

  • Якщо біт (и) s g id встановлено у файлі нової програми для виконання, тоді встановіть дію з файлу:

    EgID = FgID

Примітка: основна файлова система в SUID і nosuid опція монтування також може бути застосована.

4a) Якщо для встановлення використовувався s u idEuID , його EuIDможна тимчасово змінити (наприклад, знизити з корінця), але спочатку його первісне значення зберігається, OuIDщоб його можна було відновити пізніше, якщо потрібно.

4b) Якщо для встановлення використовувався s g idEgID , він EgIDможе бути тимчасово змінений (наприклад, понижений з корінця), але спочатку його первісне значення зберігається, OgIDщоб його можна було відновити пізніше, якщо потрібно.


Коли слід створити файл:

File's new id's are set from effective id's: FuID=EuID and FgID=EgID
(Permissions are set from umask.)

Щоб відкрити для читання:

If FuID = EuID  and  user-read bit is set, or  
If FgID = EgID  and group-read bit is set, or  
If FgID = +gID1 and group-read bit is set, or  
If FgID = +gID2 and group-read bit is set, ...  
then allow reading.

Щоб відкрити для написання:

(Same as above but write bit set to allow writing.)

Щоб відкрити для виконання:

(Same as above but execute bit set to allow execution.)

Коли повідомлення потрібно надіслати:

Use RuID and RgID.  (Not EuID or EgID). *(Not sure where I read this.)*

Довідники: повноваження людини

Додатково: Ось утиліта для гарного друку файлу / etc / group:

cat /etc/group | sort -t: -k3n | awk  -F ':' \
  'BEGIN{printf "\n%-20s %-3s %-8s %s", \
           "Group name","pw", "Group ID ", "User list"}\
   BEGIN{printf "\n%-20s %-3s %-8s %s\n", \
           "----------","--", "---------", "---------"} \
        { printf "%-20s %-3s %8d %s\n", $1, $2, $3, $4 }'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.