Når jeg bruker setfacl til å styre hvilke tillatelser bør barnefilene / katalogene har, av en eller annen grunn har filene alle tillatelser bortsett fra utførelsen («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 

Jeg trodde det har noe å gjøre med umask, men å endre det på forskjellige måter gir aldri forventet resultat med mindre jeg savner noe.

Hvordan kan dette løses?

Svar

Hauke Lagings svar prøver å si:

Ethvert program som oppretter en fil eller katalog, spesifiserer modusen (tillatelser) den vil at filen skal ha. Dette er nesten alltid hardkodet i C-programmet (eller hvilket språk som brukes ) og er nesten aldri direkte tilgjengelig for brukeren. Da kan umask -verdien og standard ACL slå av tillatelsesbiter, men ikke legg til dem.

Problemet ditt er at mens mkdir angir en modus på 777 (rwxrwxrwx), nesten alle programmer som oppretter filer, spesifiserer 666 (rw-rw-rw-). Dette inkluderer touch, skallet (for I / O-omdirigering; f.eks. program > file), redaksjonen (vi, vim, emacs, etc…), dd, split, og så videre. Derfor vil du ikke få tillatelser til rwxrwxrwx på en ren fil umiddelbart etter opprettelsen (av noen av disse programmene), uansett hva du gjør med ACL-er; du må opprette filen og deretter chmod den.

Det er et par unntak fra denne regelen:

  • cp og relaterte programmer (f.eks. cpio, tar osv.) som kopierer eller på annen måte -opprett en fil som vil (forsøke å) sette den nye filen i samme modus som den opprinnelige filen.
  • Kompilatorer som lager binære kjørbare filer, angir en modus på 777 (i det minste hvis kompilering lykkes), slik at brukeren faktisk kan utføre programmet de nettopp kompilerte.

Kommentarer

  • Jeg antar bare dette gjelder de tradisjonelle Unix-tillatelsesmodusene, som tilsvarer user, group og other ACL-oppføringer. Hvis du har standard ACL-oppføringer for navngitte brukere eller grupper, vil de ‘ bli arvet som angitt, ikke sant?
  • Er dette et sitat fra et sted? Hvis ja, vennligst legg til kilden, og hvis ikke, vennligst fjern sitatformateringen.
  • @terdon: Det er ikke et tilbud; det er (som beskrevet) en omskrivning av Hauke Lagings svar . Hvordan skal dette håndteres? (1) Jeg kunne ha redigert det andre svaret, men jeg vet at massive omskrivninger av andres innlegg er mislikt. (Og merk deg, FWIW, at representanten min på dette nettstedet var < 2000 i oktober 2014.) (2) Jeg kunne ha postet det som en kommentar til det andre svaret. Eller rettere sagt, jeg kunne ha postet det som en serie med tre kommentarer, siden det er > 1200 tegn. Men det stemmer ikke med min forståelse av formålet med kommentarer. … (forts.)
  • Hei, det var ikke ‘ t en klage! Dette er et fint svar, og jeg fant det bare fordi jeg lurte på det samme. Jeg vil bare fjerne sitatformateringen, det ‘ er alt. Det er greit å legge ut et svar som avklarer et eksisterende så lenge du nevner originalen (som du gjorde). Ja, det kan være lurt å legge til en lenke, men det ‘ er ikke så farlig. Du kopierer tydeligvis ikke bare svaret til ditt.
  • Jeg trodde ikke det var en klage; takk for ros. Men sikkert vet du at enhver forespørsel fra en rombe-person har luften til en jernhånd i en fløyelshanske. 🙂 P.S. Jeg har redigert svaret mitt i samsvar med ditt forslag.

Svar

Du nevner ikke hva » forventet resultat «er. Jeg antar at det er filene som har x -bitene.

Du kan ikke håndheve det som standard ACL (som umask) bare forhindrer tillatelser, men setter dem ikke selv. En ny katalog eller fil får ikke flere tillatelser (for bruker, gruppe og annet) enn open() eller mkdir() samtale som skaper forespørsler.

For filer blir det vanligvis bare bedt om lese- og skrivetillatelse. Men hvis en kompilator oppretter en binær fil, ber den om å utføre tillatelse også.

Kommentarer

  • Svaret ditt er ganske kaotisk sett fra engelsk synspunkt. Kan du rette det? Også jeg ‘ er ikke sikker hva du mener. Ta en titt på koden min. For kataloger fungerer det alltid.For filer fungerer det også alltid bortsett fra » x » bit. Også hvis det ‘ ikke er den riktige måten å gjøre dette på, hva er bortsett fra å sette en umask hver gang en katalog åpnes?

Svar

$ touch file && chmod a+x file

Forklaringene i andre svar er fantastiske. Jeg vil legge til noe som faktisk gir et svar på spørsmålet,

Hvordan kan dette løses?

med spesifikk kode. @Scott fortalte hvordan du gjør dette,

du må opprette filen og deretter chmod den.

Koden i svaret mitt viser hvordan du gjør det og fremhever det ved å sette det først.


Mer forklaring

For å begynne med legger jeg bare til touch kommando gitt av OP, spesielt touch file blir 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 

Her vil jeg sette opp den samme situasjonen på maskinen min (Cygwin) for å vise at den fungerer, og gjør det samme i en virtuell Ubuntu-boks for å vise forskjellene i oppsettet . (Merk at den faktiske kommandoen for å fikse ting ikke endrer seg, jeg vil bare vise noen forskjeller som kan komme opp med setfacl, samt å bekrefte selv at det fungerer .)

$ 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 

Svar

Du kan prøve dette enkle skriptet erstatter ACL-postene for hver fil og katalog, og gir standard tillatelser som er spesifisert.

$ 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 

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *