När jag använder setfacl för att hantera vilka behörigheter som barnfilerna / katalogerna ska ha, av någon anledning har filerna alla behörigheter utom exekvera (”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 

Jag trodde att det har något att göra med umask men att ändra det på olika sätt ger aldrig det förväntade resultatet om jag inte saknar något.

Hur kan det åtgärdas?

Svar

Hauke Lagings svar försöker säga:

Alla program som skapar en fil eller katalog anger det läge (behörigheter) som filen vill ha. Detta är nästan alltid hårt kodat i C-programmet (eller vilket språk som helst som används ) och är knappast direkt tillgänglig för användaren. Då kan värdet umask och standard ACL stänga av behörighetsbitar, men inte lägg till dem.

Ditt problem är att, medan mkdir anger läget 777 (rwxrwxrwx), nästan alla program som skapar filer anger 666 (rw-rw-rw-). Detta inkluderar touch, skalet (för I / O-omdirigering; t.ex. program > file), redaktörerna (vi, vim, emacs, etc…), dd, split, och så vidare. Därför får du inte behörigheter för rwxrwxrwx på en vanlig fil direkt efter skapandet (av något av dessa program), oavsett vad du gör med ACL: er; Du måste skapa filen och sedan chmod den.

Det finns ett par undantag från denna regel:

  • cp och relaterade program (t.ex. cpio, tar, etc.) som kopierar eller på annat sätt -skapa en fil som (försöker) ställa in den nya filen i samma läge som den ursprungliga filen.
  • Kompilatorer som skapar binära körbara filer, ange ett läge på 777 (åtminstone om kompilering lyckas), så att användaren faktiskt kan köra programmet de just kompilerade.

Kommentarer

  • Jag antar att detta bara gäller de traditionella Unix-tillståndslägena, som motsvarar user, group och other ACL-poster. Om du har ACL-standardinställningar för namngivna användare eller grupper, kommer de ’ att vara ärvda som specificerat, eller hur?
  • Är detta ett citat från någonstans? Om så är fallet, lägg till källan och om inte, ta bort offertformateringen.
  • @terdon: Det är inte en offert; det är (som beskrivet) ett parafras av Hauke Lagings svar . Hur ska detta hanteras? (1) Jag kunde ha redigerat det andra svaret, men jag vet att massiva omskrivningar av andra människors inlägg är misshandlade. (Och notera, FWIW, att min representant på den här webbplatsen var < 2000 i oktober 2014.) (2) Jag kunde ha lagt upp det som en kommentar till det andra svaret. Eller snarare kunde jag ha lagt upp det som en serie med tre kommentarer, eftersom det är > 1200 tecken. Men det överensstämmer inte med min förståelse för syftet med kommentarer. … (Fortsatt)
  • Hej, det var inte ’ t ett klagomål! Det här är ett bra svar och jag hittade det bara för att jag undrade samma sak. Jag skulle bara ta bort offertformateringen, det ’ är allt. Att skicka ett svar som klargör ett befintligt svar är bra så länge du nämner originalet (vilket du gjorde). Ja, det skulle vara en bra idé att lägga till en länk men ’ är ingen stor sak. Du kopierar helt klart inte bara hans svar till ditt.
  • Jag tyckte inte att det var ett klagomål. tack för beröm. Men säkert inser du att varje förfrågan från en romb-person har luften av en järnhand i en sammethandske. 🙂 P.S. Jag har redigerat mitt svar i enlighet med ditt förslag.

Svar

Du nämner inte vad ” förväntat resultat ”är. Jag antar att det är filerna som har x -bitarna.

Du kan inte genomdriva det som standard ACL (som umask) bara förhindrar behörigheter men ställer inte in dem själv. En ny katalog eller fil får inte fler behörigheter (för användare, grupp och annat) än open() eller mkdir() -anrop som skapar begäranden.

För filer begärs vanligtvis endast läs- och skrivbehörighet. Men om en kompilator skapar en binär fil begär den också exekveringsbehörighet.

Kommentarer

  • Ditt svar är ganska kaotiskt ur engelsk synvinkel. Kan du snälla korrigera det? Jag ’ är inte säker vad du menar. Titta på min kod. För kataloger fungerar det alltid.För filer fungerar det alltid alltid utom ” x ” biten. Också om det ’ inte är rätt sätt att göra detta, vad är då att ställa in en umask varje gång en katalog öppnas?

Svar

$ touch file && chmod a+x file

Förklaringarna i andra svar är fantastiska. Jag vill lägga till något som faktiskt ger ett svar på frågan,

Hur kan detta åtgärdas?

med specifik kod. @Scott berättade hur man gör detta,

du måste skapa filen och sedan chmod den.

Koden i mitt svar visar hur man gör det och markerar det genom att sätta det först.


Mer förklaring

För att börja med lägger jag helt enkelt till touch kommando från OP, specifikt 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 

Här kommer jag att ställa in samma situation på min maskin (Cygwin) för att visa att den fungerar, gör sedan samma sak i en virtuell Ubuntu-ruta för att visa skillnaderna i installationen . (Observera att det faktiska kommandot för att fixa saker inte ändras, jag vill helt enkelt visa några skillnader som kan komma med setfacl, samt att själv verifiera att det fungerar .)

$ 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 prova det här enkla skriptet ersätter ACL-posterna för varje fil och katalog, vilket ger de angivna standardbehörigheterna.

$ 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 

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *