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

  • Ik neem dit alleen aan is van toepassing op de traditionele Unix-toestemmingsmodi, die overeenkomen met de user, group en other ACL-vermeldingen. Als je standaard ACL-vermeldingen hebt voor benoemde gebruikers of groepen, ‘ zullen worden geërfd zoals gespecificeerd, toch?
  • Is dit een citaat ergens vandaan? Als dit het geval is, voeg dan de bron toe en, zo niet, verwijder dan de opmaak van de offerte.
  • @terdon: Het is geen citaat; het is (zoals beschreven) een parafrase van het antwoord van Hauke Laging . Hoe moet dit worden aangepakt? (1) Ik had het andere antwoord kunnen bewerken, maar ik weet dat massaal herschrijven van posts van anderen wordt afgekeurd. (En merk op, FWIW, dat mijn vertegenwoordiger op deze site < 2000 was in oktober 2014.) (2) Ik had het kunnen plaatsen als een opmerking bij het andere antwoord. Of beter gezegd, ik had het kunnen posten als een reeks van drie opmerkingen, aangezien het > 1200 tekens bevat. Maar dat strookt niet met mijn begrip van het doel van opmerkingen. … (Vervolg)
  • Hé, het was geen ‘ t een klacht! Dit is een prima antwoord en ik vond het alleen omdat ik me hetzelfde afvroeg. Ik zou gewoon de citaatopmaak verwijderen, die ‘ is alles. Het plaatsen van een antwoord ter verduidelijking van een bestaand antwoord is prima, zolang je het origineel noemt (wat je ook deed). Ja, het toevoegen van een link zou een goed idee zijn, maar het ‘ doet er niet toe. Je kopieert duidelijk niet alleen zijn antwoord naar het jouwe.
  • Ik dacht niet dat het een klacht was; bedankt voor de lof. Maar je realiseert je zeker dat elk verzoek van een ruiter de uitstraling heeft van een ijzeren vuist in een fluwelen handschoen. 🙂 P.S. Ik heb mijn antwoord aangepast in overeenstemming met uw suggestie.

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 

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *