> Köszönöm hogy részletesen leírtad, továbbra sem értem a chmod - acl - mask kapcsoltát.
Pedig nagyon egyszerű:
a chmod és az ACL egymással abszolút semmilyen kapcsolatban nincsenek. Az ACL *csak* akkor hat, amikor létrehozol egy fájlt és soha később (ugyanúgy, mint az umask); a chmod pedig bármikor később hat - amennyiben a fájl már létezik.
A valódi probléma még mindig az, hogy a fájl létrehozásakor (ekkor umask / ACL van érvényben) te azt nem tudod megmondani, hogy mit szeretnél, csak azt, hogy mit NEM, ugyanis ezt határozza meg az umask.
umask 077 jelentése: tulajnak nem tiltunk semmit; ellenben nem engedem, hogy a a fájl csoportjogai, és a fájl egyéb jogai közül is bármi be legyen állítva. Ami nagyon nem azt jelenti, hogy a tulajnak lesz rwx, mert itt viszont mint írtam, a létrehozó szoftveren múlik. Ha az a tulajnak rwx-et állít, akkor azok mind megmaradnak. De ha a szoftver csak rw-t, akkor nem lesz a tulajnak x joga. Ha a szoftver rx-et állít, akkor meg az írásjog fog hiányozni a tulajtól (is).
umask 027: tulajnak nem tiltunk semmit; csoportnak nem engedjük az írást; mindenki másnak *semmit* sem. (De változatlanul nem jelenti azt, hogy a tulajnak meglesz minden joga, vagy hogy a csoportnak biztosan lesz pl. olvasási joga.)
umask 002: tulajnak és csoportnak semmit nem tiltok, mindenki mástól tiltom az írás jogot. (De változatlanul nem jelenti azt, hogy a tulajnak meglesz minden joga, vagy hogy a csoportnak biztosan lesz pl. olvasási joga.)
umask 700: klasszikus hiba: a tulajtól minden jogot megtiltunk, senki másnál nem tiltunk semmit.
No most ha van ACL, akkor a mask ACL is hat, azaz nem csak az umask-kal tudsz a létrehozáskor korlátozni, hanem a mask-ACL-lel is. (Annyi a nehezítés, hogy a mask-ACL egyaránt hat a tulajra is, meg mindenki másra is.) És ami külön öröm, hogy az umask a default mask ACL-ből eredeztetett mask-ACL-re is hat :-(
Mutatom a példát. Van egy mask-ACL-lel és default-mask-ACL-lel rendelkező, üres könyvtár. Csinálok benne két fájlt, az első esetben van valami halvány umask (002), a második létrehozásának idejére viszont ideiglenesen 000-ra teszem az umaskot, azaz semmit nem tiltok.
$ rm -f ACL/*
$ umask
0002
$ touch ACL/p1
$ ( umask 0 ; umask; touch ACL/p2 ) ; umask
0000
0002
$ getfacl ACL ACL/p?
# file: ACL
# owner: zgabor
# group: zgabor
user::rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:tss:r--
default:group::rwx
default:mask::rwx
default:other::r-x
# file: ACL/p1
# owner: zgabor
# group: zgabor
user::rw-
user:tss:r--
group::rwx #effective:rw-
mask::rw-
other::r--
# file: ACL/p2
# owner: zgabor
# group: zgabor
user::rw-
user:tss:r--
group::rwx #effective:rw-
mask::rw-
other::r--
És ha megvizsgáljuk a két fájt, az látszik, hogy nincs semmi különbség. Viszont az is látszik, hogy noha senki nem tiltotta a futtatási jogot, egyik fájlon sincs futtatási jog, ráadásul az x-jog a (default-mask-ACL-ből származó) megörökölt mask-ACL-ből is elveszett.
Miért veszett el?
Ennek megértéséhez még egy kis példa. Az előzőek után az umask 0002-n áll, és létrehozunk még egy fájlt olyan módon, aminél a létrehozó program eleve be akarja állítani a futtatási jogot (erre nagyon alkalmas egy fordítóprogram, ami *futtatható* állományt csinál).
$ tcc lo.c -o ACL/lo.tcc
$ getfacl ACL/lo.tcc
# file: ACL/lo.tcc
# owner: zgabor
# group: zgabor
user::rwx
user:tss:r--
group::rwx
mask::rwx
other::r-x
És mit látunk? A fájlon (tulaj, csoport és egyéb) van x-jog, ráadásul a default-mask-ACL -ből örökölt mask-ACL-ben is megmaradt.
Azaz hiába, hogy a default-mask-ACL-ben te mindent engedsz, mert ha a létrehozó program tilt bizonyos jogokat, akkor már a megörökölt mask-ASL-ben is hiányozni fog a megfelelő jog. És hasonlóan, az umask is tilt bizonyos jogokat. Sajnos az umask lekérdezhető, de hogy egy konkrét program pontosan milyen jogokkal akarna egy fájlt létrehozni, azt max. tesztekkel, vagy a forrás tanulmányozásával lehet kideríteni.