Wanneer ik setfacl gebruik om te beheren op welke machtigingen de kinderbestanden / -mappen moeten hebben, hebben de bestanden om de een of andere reden alle machtigingen behalve de uitvoering (“x”).
someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ getfacl . # file: . # owner: someuser # group: webs # flags: -s- user::rwx group::rwx other::rwx default:user::rwx default:group::rwx default:other::rwx someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l total 4 drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir -rw-rw-rw- 1 someuser webs 0 paź 31 13:35 file
Ik dacht dat het iets met umask te maken had, maar het op verschillende manieren veranderen geeft nooit het verwachte resultaat, tenzij ik iets mis.
Hoe kan dit worden opgelost?
Answer
Het antwoord van Hauke Laging probeert te zeggen:
Elk programma dat een bestand of map maakt, specificeert de modus (machtigingen) die het wil dat dat bestand heeft. Dit is bijna altijd hard gecodeerd in het C-programma (of welke taal dan ook wordt gebruikt ) en is bijna nooit direct toegankelijk voor de gebruiker. Dan kunnen de umask
-waarde en de standaard ACL machtigingsbits uitschakelen, maar niet voeg ze toe.
Uw probleem is dat, terwijl mkdir
een modus van 777 specificeert (rwxrwxrwx
), bijna alle programmas die bestanden maken specificeren 666 (rw-rw-rw-
). Dit omvat touch
, de shell (voor I / O-omleiding; bijv. program > file
), de editors (vi
, vim
, emacs
, enz …), dd
, split
, enzovoort. Daarom krijgt u geen permissies van rwxrwxrwx
voor een gewoon bestand onmiddellijk na het aanmaken (door een van deze programmas), ongeacht wat u met ACLs doet; je moet het bestand maken en vervolgens chmod
het.
Er zijn een paar uitzonderingen op deze regel:
-
cp
en gerelateerde programmas (bijv.cpio
,tar
, etc.) die kopiëren of anderszins -creëer een bestand, dat (zal proberen) het nieuwe bestand in dezelfde modus te zetten als het originele bestand. - Compilers, die binaire uitvoerbare bestanden maken, specificeren een modus van 777 (tenminste, als de compilatie lukt), zodat de gebruiker het programma dat hij zojuist heeft gecompileerd daadwerkelijk kan uitvoeren.
Opmerkingen
Antwoord
Je vermeldt niet wat de ” verwacht resultaat “is. Ik neem aan dat het de bestanden zijn met de x
bits ingesteld.
Je kunt dat niet afdwingen als standaard ACL (zoals umask), maar dit voorkomt alleen permissies, maar stelt ze zelf niet in. Een nieuwe map of bestand krijgt niet meer rechten (voor gebruiker, groep en andere) dan de open()
of mkdir()
aanroep die het aanroept.
Voor bestanden wordt meestal alleen lees- en schrijftoestemming gevraagd. Maar als een compiler een binair bestand maakt, vraagt het ook uitvoeringsmachtiging.
Opmerkingen
- Uw reactie is nogal chaotisch vanuit Engels oogpunt. Kunt u dit corrigeren? Ook ‘ ben ik niet zeker wat je bedoelt Kijk eens naar mijn code Voor directories werkt het altijd.Voor bestanden werkt het ook altijd behalve het ” x ” bit. Ook als het ‘ niet de juiste manier is om dit te doen, wat is dan anders dan het instellen van een umask elke keer dat een directory wordt geopend?
Antwoord
$ touch file && chmod a+x file
De uitleg in andere antwoorden is fantastisch. Ik wil iets toevoegen dat daadwerkelijk een antwoord geeft op de vraag,
Hoe kan dit worden opgelost?
met specifieke code. @Scott vertelde hoe je dit moet doen,
je moet het bestand maken en vervolgens
chmod
het.
De code in mijn antwoord laat zien hoe het moet en markeert het door het als eerste te plaatsen.
Meer uitleg
Om te beginnen voeg ik voor het gemak eenvoudig toe aan de touch
commando gegeven door het OP, specifiek touch file
wordt touch file && chmod a+x file
.
someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file && chmod a+x file someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l total 4 drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir -rwxrwxrwx 1 someuser webs 0 paź 31 13:35 file
Hier zal ik “dezelfde situatie op mijn machine (Cygwin) opzetten om te laten zien dat het werkt, en daarna hetzelfde doen op een virtuele Ubuntu-box om de verschillen in de setup te laten zien . (Merk op dat het eigenlijke commando voor het oplossen van dingen niet verandert, ik wil gewoon enkele verschillen laten zien die kunnen optreden met setfacl
, en ook om voor mezelf te verifiëren dat het werkt .)
$ uname -a | head -n 1 CYGWIN_NT-10.0 my_machine 2.10.0(0.325/5/3) 2018-02-02 15:16 x86_64 Cygwin $ pwd /home/me $ mkdir user294034 $ setfacl -m u::rwx user294034/ $ setfacl -m d:u::rwx user294034/ $ setfacl -m g::rwX user294034/ setfacl: illegal acl entries $ setfacl -m g::rws user294034/ setfacl: illegal acl entries $ # I guess I don"t know how to get the `flags: -s-` on Cygwin $ setfacl -m g::rwx user294034/ $ setfacl -m d:g::rwx user294034/ $ setfacl -m o::rwx user294034/ $ setfacl -m d:o::rwx user294034/ $ cd user294034 $ getfacl . # file: . # owner: me # group: my_group user::rwx group::rwx other:rwx default:user::rwx default:group::rwx default:other:rwx $ # I admitted that I don"t know how to get `# flags: -s-` $ umask 0022 $ umask 0000 $ touch file $ mkdir dir $ # Here, we"ll see the same problem $ ls -l total 0 drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir -rw-rw-rw- 1 me my_group 0 Sep 18 20:31 file $ # Here, we"ll fix the problem $ rm file $ touch file && chmod a+x file $ ls -l total 0 drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir -rwxrwxrwx 1 me my_group 0 Sep 18 20:32 file
Antwoord
U kunt proberen dat dit eenvoudige script de ACL-records voor elk bestand en elke map vervangt, met de standaard opgegeven machtigingen.
$ cd ~ $ mkdir .config $ cat <<"EOF" >> .config/dacl user::rwx group::rwx other:r-x default:user::rwx default:group::rwx default:other:r-x EOF $ cat <<"EOF" >> .config/facl user::rw- group::rw- other:r-- default:user::rw- default:group::rw- default:other:r-- EOF $ cd / $ find $1 -type d -exec setfacl -f ~/.config/dacl {} \; $ find $1 -type f -exec setfacl -f ~/.config/facl {} \; $ getfacl . # file: . # owner: MyUser # group: Administrators user::rwx group::rwx other::r-x default:user::rwx default:group::rwx default:other::r-x
user
,group
enother
ACL-vermeldingen. Als je standaard ACL-vermeldingen hebt voor benoemde gebruikers of groepen, ‘ zullen worden geërfd zoals gespecificeerd, toch?