Når jeg bruger setfacl til at styre, hvilke tilladelser børefilerne / mapperne skal have, af en eller anden grund har filerne alle tilladelser undtagen udfø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 troede, det har noget at gøre med umask, men at ændre det på forskellige måder giver aldrig det forventede resultat, medmindre jeg mangler noget.
Hvordan kan dette løses?
Svar
Hauke Lagings svar forsøger at sige:
Ethvert program, der opretter en fil eller et bibliotek, angiver den tilstand (tilladelser), det vil have, at filen skal have. Dette er næsten altid hårdkodet i C-programmet (eller hvilket sprog der bruges ) og er næsten aldrig direkte tilgængelig for brugeren. Derefter kan umask
-værdien og standard-ACL deaktivere tilladelsesbits, men ikke tilføj dem.
Dit problem er, at mens mkdir
angiver en tilstand på 777 (rwxrwxrwx
), næsten alle programmer, der opretter filer, angiver 666 (rw-rw-rw-
). Dette inkluderer touch
, skallen (til I / O-omdirigering; f.eks. program > file
), redaktørerne (vi
, vim
, emacs
osv …), dd
, split
og så videre. Derfor får du ikke tilladelser til rwxrwxrwx
på en almindelig fil umiddelbart efter oprettelsen (af et af disse programmer), uanset hvad du gør med ACLer; du skal oprette filen og derefter chmod
den.
Der er et par undtagelser fra denne regel:
-
cp
og relaterede programmer (f.eks.cpio
,tar
osv.), der kopierer eller på anden måde re -oprett en fil, som (forsøger at) indstille den nye fil til samme tilstand som den originale fil. - Kompilatorer, der opretter binære eksekverbare filer, angiver en tilstand på 777 (i det mindste, hvis kompilering lykkes), så brugeren faktisk kan udføre det program, de lige har kompileret.
Kommentarer
Svar
Du nævner ikke hvad ” forventet resultat “er. Jeg antager, at det er filerne, der har x
-sæt.
Du kan ikke håndhæve det som standard ACL (som umask) bare forhindrer tilladelser, men indstiller dem ikke selv. En ny mappe eller fil får ikke flere tilladelser (for bruger, gruppe og andet) end open()
eller mkdir()
-opkald, der opretter anmodninger.
For filer kræves der normalt kun læse- og skrivetilladelse. Men hvis en kompilator opretter en binær fil, anmoder den også om eksekveringstilladelse.
Kommentarer
- Dit svar er ret kaotisk set fra engelsk synspunkt. Kan du venligst rette det? Også er jeg ‘ ikke sikker hvad du mener. Se på min kode. For mapper fungerer det altid.For filer fungerer det også altid undtagen ” x ” bit. Også hvis det ‘ ikke er den rigtige måde at gøre dette på, hvad er der undtagen at indstille en umask hver gang en mappe åbnes?
Svar
$ touch file && chmod a+x file
Forklaringerne i andre svar er fremragende. Jeg vil tilføje noget, der faktisk giver et svar på spørgsmålet,
Hvordan kan dette løses?
med specifik kode. @Scott fortalte, hvordan man gør dette,
du skal oprette filen og derefter
chmod
den.
Koden i mit svar viser, hvordan man gør det og fremhæver det ved at sætte det først.
Flere forklaringer
For at begynde med tilføjer jeg simpelthen til touch
kommando givet af OP, specifikt touch file
bliver 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 oprette den samme situation på min maskine (Cygwin) for at vise, at den fungerer, og gør det samme i en virtuel Ubuntu-boks for at vise forskellene i opsætningen . (Bemærk, at den egentlige kommando til at rette ting ikke ændrer sig, jeg vil blot vise nogle forskelle, der kan komme op med setfacl
, samt at kontrollere for mig 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 script erstatter ACL-poster for hver fil og mappe, hvilket giver de angivne standardtilladelser.
$ 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
ogother
ACL-poster. Hvis du har standard ACL-poster for navngivne brugere eller grupper, skal de ‘ arves som angivet, ikke?