Portál AbcLinuxu, 31. července 2025 15:24
$ id uid=1001(U) gid=2000(A) groups=3000(B),3001(C)Ako taký užívateľ spustí program P tak, aby ten bežiaci program nemal prístup skupiny B? To znamená, že dostane permission denied pri prístupe k súboru s právami
$ stat /tmp/subor1 ... Access: (0040/----r-----) Uid: ( 1002/ U2) Gid: ( 3000/ B) ...ale bude mať prístup skupiny C a teda úspešne otvorí súbor
$ stat /tmp/subor2 ... Access: (0040/----r-----) Uid: ( 1002/ U2) Gid: ( 3001/ C) ...? Ak tomu dobre rozumiem, tak skupiny B a C sa nazývajú "supplementary groups" a program sa sám môže vzdať niektorých skupín volaním setgroups(2). Mňa ale zaujíma, či to môžem programu nanútiť zvonku?
/proc/$PID/gid_map
(man user_namespaces) namapováním jen těch skupin, které procesu chcete povolit, ale nezkoušel jsem.
sudo
, jste si jistý?
V systemd
se to dá nastavit pomocí SupplementaryGroups
.
Tím, že to neumí sudo
, jste si jistý?
Nie som. Ale, ak dobre rozumiem manuálovej stránke, sudo dovoľuje stanoviť effective GID parametrom "-g" (čo ale nie je riešením), alebo dovoľuje použiť parameter "-P", ktorý ovplyvňuje suppl. groups, ale len prepína či použiť suppl. groups spúšťajúceho užívateľa, alebo substituovaného užívateľa.
Ak systém nerobí kontrolu, že povolí setgroups() len na podmnožinu toho, čo vráti getgroups() (teda, že zoznam sa dá len okresávať, nie rozširovať), tak má Sten pravdu a ten môj nápad nie je užitočný.
HAFRTFM?
setgroups()
sets the supplementary group IDs for the calling process. Appropriate privileges (Linux: theCAP_SETGID
capability) are required.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.