podivny problem s prikazem groups (nekdy vypise pouze 32 skupin)

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Neděle Říjen 29 11:30:29 CET 2006


On Tue, 24 Oct 2006, Pavel Lisý wrote:

> dnes jsem zjistil, že příkaz groups vykazuje podivné anomálie (systém
> RHEL-3 Update 8, ověřování uživatelů proti LDAP)
> 
> root# groups username
> vrátí seznam skupin daného uživatele v pořádku
> username$ groups username
> vrátí seznam skupin daného uživatele v pořádku

Tyto dva příkazy udělají to, že k zadanému uživateli zjistí z databáze 
skupiny, do kterých je zařazen jako člen.

> username$ groups 
> spouštěný daným uživatelem bez parametrů - vrátí seznam skupin o několik
> posledních skupin menší ??? Nechápu proč? Kvůli tomu se danému uživateli
> zřejmě nedaří připojit přes ssh k danému serveru (v logu se objeví:
> sshd: getgrouplist: groups list too small)

Tento příkaz provede volání getgroups(2) a přeloží výsledné gidy na jména.
Čili rozdíl je zřejmý: výše uvedené zkoumají datové soubory (nebo ve vašem 
případě LDAP), tento zkoumá aktuální nastavení v jádře.

> id vykazuje stejné chování:

To bude tím, že groups je vlastně zkratka za id -Gn.

> Navíc to celé nefunguje pro jednoho uživatele. Má těch skupin hodně.

Ha!

> Teď jsem to spočítal, bez parametru (username) to vypisuje prvních 32
> skupin, jinak správně všech 40.

Tak to je jasné. Kolik máte "getconf NGROUPS_MAX". Není to náhodou 32?
Prostě má jádro limit 32 na počet supplementary groups. A tudíž se po 
přihlášení podaří nastavit jen některé.

Je možné, že bez nscd se tenhle problém nějak ignoruje, zatímco s nscd se 
stane fatálním (což je tedy divné, ale nelze to vyloučit), a proto 
přítomnost nscd ovlivňuje, jak se to chová.

> Je to normální chování nebo to mám nahlásit jako chybu k opravení?

Je to vlastnost. Už se to tady v minulosti řešilo. Můžete si zkusit 
vyrobit jádro, co bude mít vyšší NGROUPS_MAX. Jestli jste velký jaderný 
hacker, tak můžete třeba zkusit i dynamickou alokaci. Ale otázka je, 
jestli stejně nebudete muset přizpůsobit Glibc a spoustu programů 
v userlandu.

Nebo můžete zapřemýšlet, jak redukovat počet skupin, do kterého 
potřebujete toho jednoho uživatele zařadit.


--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux