ACL-ek, EA-k FreeBSD-n (meg egy kicsit Linuxon)

Ma este ezekkel játszottam egy kicsit FreeBSD és Linux alatt. FreeBSD alatt az extended attributumok kezelése minden csak nem intuitív, de látszólag működik. Mondjuk a doksi vicces kissé, mert 4 parancsot is leír ugyanabban a man oldalban (setextattr, getextattr, lsextattr, rmextattr), de elfelejtették leírni, hogy pontosan melyik mire is jó :-) Még szerencse, hogy azért elég könnyű rájönni.

Ennél már csak a linuxos getfattr / setfattr viccesebb. Eleve ha szegény ember csak a setfattr man-t nézi meg nulla előismerettel, az életben nem fog tudni beállítani egyet sem, mert sehol nem szerepel az, hogy a megadandó attributumnév névtér.mezőnév formájú, ráadásul az se szerepel a doksiban, hogy mik a használható névterek (ami engem izgatott, az a user és system névtér). Szerencsére van nekünk getfattr manunk is, ebben van példa is, és máris látszik, hogy milyen formában várja a setfattr azt a nyavalyás opciót; valamint van nekünk man 5 attr, amiben legalább egyértelműen le van írva a használandó forma, és hogy egyébként milyen névterek vannnak. De a lényeg, némi küzdelem után azét csak sikerült dűlőre jutni.

Jöttek az ACL-ek FreeBSD-n. Vért pisáltam mire sikerült elérni, hogy ha beállítok egy ACL-t egy fájlra, akkor le tudjam törölni a maradványát. Ugye ha van ACL, akkor automatában lesz nekünk mask-ACL is. Igen ám, de ha törlöm az általan feltett ACL-t, a mask-ACL megmarad - ami ha másért nem, azért mindenképpen baj, mert elrontja az ls -l kimenetet a jogosultságok végére ragasztott +-jellel. Próbáltam mindent. Kitörölni magát a mask-ACL-t. Hibaüzenet, hogy olyan nincs. Akár mask::, akár az éppen aktuális mask::rw- formában próbálom. Hopp, a man szerint van az összel ACl eldobására egy -b opció. Csak épp nem takarít. Aztán továbbolvasva, meg kisérletezve, meglett a tuti megoldás:
Adjuk ki az ACL-törlő -x opciót, és az összes ACL-t törlő -b opciót *is*.
De nem jó az egyébként minden másra működő szimbolikus forma: -x mask:: , helyette az ACL sorszámát kell megadni.
Amit persze 0-tól indexel (és ha már minden egyéb ACL-t dobtunk - ugye mask csak ekkor dobható el -, akkor mindig a 2. pozíción lesz, tehát -x 2.
Ja és persze a két rohadt opció sorrendje se mindegy. Szóval a vége:
setfacl -x 2 -b fnév
végre eldobja még a mask ACL-t is :-)

Ehhez képest Linux alatt simán törölhető a mask-ACL a logikus -x mask:: paraméterrel, és persze a -b opció önmagában szintén teljesen megfelelő.

Már csak valami egyszerű eszköz lenne jó ahhoz, hogy kapásból lássam, ha egy fájlnak vannak extattr-jai. (Ahogyan az ACL-t jelzi az ls.)

Hozzászólások

Az élvezetek fokozhatóak. Fogj egy samba-t, kapcsold be benne az ACL támogatást, és kezdd el Windows kliensekről úgy használni, mintha a samba valóban egy Windows Server volna. (Állítsd ACL-eket Windows intézőből, stb.)

Néhány hét aktív használat után az eredmény garantáltan fantasztikus :(

Egyébként régóta mondom, hogy a Novell-féle trustee rendszert kellene már végre valakinek reimplementálni opensource módon. (Valaki elkezdte, de láthatóan elakadt a projekt sok évvel ezelőtt: http://trustees.sourceforge.net/ )

Bakker, számomra most derült ki, hogy ugyanezt a hibát már egyszer megtaláltam - az Ypszilon-szemináriumos FreeBSD-s előadásom III. részének videója pont ugyanezzel kezdődik - márpedig az az előadás 2009 februárjában volt. Mindenesetre a hibabejelentéstől eltelt szűk két év sem volt elég a hiba kijavítására.