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
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
user
,group
ochother
ACL-poster. Om du har ACL-standardinställningar för namngivna användare eller grupper, kommer de ’ att vara ärvda som specificerat, eller hur?