2010-06-12 04:06:50 +0000 2010-06-12 04:06:50 +0000
86
86

Hoe nieuwe bestandstoestemmingen erven van de bovenliggende map?

Ik heb een map genaamd data. Dan draai ik een script onder de user id ‘robot’. robot schrijft naar de data directory en update bestanden daarin. Het idee is dat data open is voor zowel mij als de robot om te updaten.

Dus ik stel de permissie en eigenaarsgroep als volgt in

drwxrwxr-x 2 me robot-grp 4096 Jun 11 20:50 data

waarbij zowel ik als robot tot de ‘robot-grp’ behoren. Ik verander de permissie en de eigenaarsgroep recursief zoals de bovenliggende map.

Ik upload regelmatig nieuwe bestanden in de data directory met behulp van rsync. Helaas erven de geuploade nieuwe bestanden niet de permissies van de hoofdmap zoals ik hoop. In plaats daarvan ziet het er als volgt uit

-rw-r--r-- 1 me users 6 Jun 11 20:50 new-file.txt

Wanneer de robot probeert om new-file.txt te updaten, mislukt dat door een gebrek aan bestandstoestemmingen.

Ik ben niet zeker of het instellen van umask helpt. In ieder geval volgen de nieuwe bestanden het niet echt.

$ umask -S
u=rwx,g=rx,o=rx

Ik ben vaak in de war door Unix bestandstoestemmingen. Heb ik wel een juist plan? Ik gebruik Debian lenny.

Antwoorden (4)

53
53
53
2010-06-13 02:10:58 +0000

U wilt de standaard umask van uw systeem niet veranderen, dat is een veiligheidsrisico. De sticky bit optie zal tot op zekere hoogte werken, maar het gebruik van ACL’s is de beste manier om te gaan. Dit is eenvoudiger dan u denkt. Het probleem met basis ACL’s is dat ze standaard niet recursief zijn. Als je een ACL instelt op een directory, erven alleen de bestanden in die directory de ACL. Als je een subdirectory aanmaakt, krijgt die niet de ouder ACL, tenzij de ACL is ingesteld om te recurseren.

Controleer eerst of ACL’s zijn ingeschakeld voor het volume waar de directory op staat. Als je tune2fs hebt, kun je het volgende doen:

# tune2fs -l /dev/sda1 | grep acl
Default mount options: user_xattr acl

Als je geen tune2fs hebt, onderzoek dan fstabs:

# cat /etc/fstab 
/dev/system/root / ext3 defaults 1 1
/dev/system/home /home ext3 defaults 1 2
/dev/storage/data /data ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2

De 4e kolom met “defaults” betekent dat op mijn systeem (CentOS 5.5), ACL’s aan staan. Bij twijfel, laat het zoals standaard. Als je de ACL probeert in te stellen en hij geeft een foutmelding, ga dan terug en voeg de acl optie toe aan /etc/fstab direct na defaults: defaults,acl.

Van wat ik begrijp, wil je dat iedereen in de gebruikersgroep schrijftoegang heeft tot de gegevensmap. Dat wordt bereikt door het volgende:

setfacl -Rm g:users:rwX,d:g:users:rwX data/
32
32
32
2010-06-12 04:13:24 +0000

Het markeren van een directory setgid (g+s) zal ervoor zorgen dat nieuwe bestanden het groepseigendom van de directory erven, maar de -g optie van rsync zal proberen dit te overschrijven.

4
4
4
2015-09-03 15:36:56 +0000

Andere antwoorden zijn van toepassing in een algemeen geval, maar aangezien je vermeldt dat rsync een bron van het probleem is, moet je misschien gewoon de aanroep ervan afstellen.

Om te beginnen, de populaire -a vlag zorgt ervoor dat rsync permissies kopieert; gebruik -r in plaats van -a of voeg -no-p toe (voor geen permissie sync) en -no-g (voor geen groepssync). Ook ondersteunt rsync de --chmod vlag om permissies op nieuw aangemaakte bestanden te wijzigen.

3
3
3
2010-06-12 04:43:45 +0000

Je umask is verkeerd voor de permissies die je wilt. U wilt een umask van 002. Je hebt momenteel een umask van 022. Ook de opmerking over het setgid maken van de directory is correct, maar ik weet niet zeker of het eigendom van de bestandsgroep iets is dat je wil veranderen of niet.

Unix bestandspermissies zijn eigenlijk een heel eenvoudig model. Ik vind ACL’s zelf compleet verwarrend. :-)