GNU/Linux >> Znalost Linux >  >> Linux

Otázky týkající se uloženého ID uživatele

Nebylo by uložením efektivního ID uživatele do proměnné na začátku programu zbytečným uloženým ID uživatele?

Nejde o to, co si program v uživatelském prostoru pamatuje, ale jaká práva mu jádro dovolí používat. Aby oddělení mezi uživateli fungovalo, musí to být systém, který řídí, jaká uživatelská ID může proces používat. Jinak by jakýkoli proces mohl požádat, aby se stal rootem.

Jak mohu získat uložené ID uživatele v programu C? Nebyl jsem schopen najít žádné funkce, které by to dělaly.

Se standardními funkcemi nemůžete (existuje pouze getuid() a geteuid() ). Linux má alespoň getresuid() které však vrátí všechna tři ID uživatele.

Každopádně byste to většinou nemuseli číst. Je tam proto, aby umožňoval přepínání mezi skutečným ID uživatele a ID efektivního uživatele v případě programu setuid, takže začíná jako kopie skutečného ID uživatele.

V programu setuid je skutečné ID uživatele ID uživatele, který jej spouští, a efektivní a uložená ID uživatele jsou ID uživatele, který program vlastní. Efektivní ID uživatele je to, které je důležité pro kontrolu oprávnění, takže pokud chce proces dočasně zrušit oprávnění, změní ID skutečného uživatele mezi skutečným a uloženým ID uživatele.

Jakým způsobem používá jádro uložené ID uživatele ke kontrole, zda proces může nebo nemůže změnit své ID uživatele? Znamená to, že když se proces pokusí změnit své efektivní ID uživatele, jádro zkontroluje uložené ID uživatele, aby se ujistilo, že to má proces povoleno?

Ano. Manuálová stránka Linuxu pro setuid() zmiňuje to, ale je to poněkud skryté:

ERRORS     
EPERM  The user is not privileged and uid does not match the real
       UID or saved set-user-ID of the calling process.

Jinými slovy, (efektivní) ID uživatele můžete nastavit pouze na jedno ze skutečných nebo uložených ID.

Manuál pro setreuid() je v tom jasnější:

Unprivileged processes may only set the effective user ID to the real
user ID, the effective user ID, or the saved set-user-ID.

Linux
  1. Příručka správce systému SELinux:42 odpovědí na velké otázky

  2. Linux – použití volby -o v příkazu Useradd?

  3. Funkce kořene uživatelské skupiny??

  1. Theths about malware in Unix / Linux?

  2. Zakázat uživatele správce ve Windows

  3. Jaký je účel uživatele „mysql.sys@localhost“.

  1. Nastavení umask uživatele Apache

  2. Otázky týkající se putenv() a setenv()

  3. Co je na tomto kódu C zranitelné?