Kun käytän setfacl-tiedostoa hallitakseni, millaisilla käyttöoikeuksilla lasten tiedostoilla / hakemistoilla tulisi olla, jostain syystä tiedostoilla on kaikki oikeudet paitsi suoritus (”x”) yksi.
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
Luulin, että sillä on jotain tekemistä umaskin kanssa, mutta sen muuttaminen eri tavoin ei koskaan anna odotettua tulosta, ellei minusta puutu jotain.
Kuinka tämä voidaan korjata?
vastaus
Hauke Lagingin vastaus yrittää sanoa:
Mikä tahansa tiedosto tai hakemiston luova ohjelma määrittää tilan (käyttöoikeudet), jonka se haluaa tiedostolle. Tämä on melkein aina kovakoodattu C-ohjelmassa (tai mitä tahansa kieltä käytetään) ) ja tuskin koskaan käyttäjän suoraan käytettävissä. Sitten umask
-arvo ja oletusarvoinen ACL voivat sammuttaa käyttöoikeusbitit, mutta eivät lisää ne.
Ongelmasi on, että vaikka mkdir
määrittelee tilan 777 (rwxrwxrwx
), melkein kaikki tiedostoja luovat ohjelmat määrittävät 666 (rw-rw-rw-
). Tämä sisältää touch
, kuoren (I / O-uudelleenohjausta varten; esim. program > file
), toimittajat (vi
, vim
, emacs
jne …), dd
, split
ja niin edelleen. Siksi et saa rwxrwxrwx
-käyttöoikeuksia tavalliseen tiedostoon heti luomisen jälkeen (millä tahansa näistä ohjelmista), riippumatta siitä, mitä teet ACL-luetteloiden kanssa; sinun on luotava tiedosto ja sitten chmod
se.
Tähän sääntöön on muutama poikkeus:
-
cp
ja siihen liittyvät ohjelmat (esim.cpio
,tar
jne.), jotka kopioivat tai muuten muokkaavat -luo tiedosto, joka asettaa (yrittää) asettaa uuden tiedoston samaan tilaan kuin alkuperäinen tiedosto. - Kääntäjät, jotka luovat binaarisia suoritettavia tiedostoja, määrittävät tilan 777 (ainakin, jos kääntäminen onnistuu), joten käyttäjä voi todella suorittaa juuri kokoamansa ohjelman.
Kommentit
Vastaus
Et mainitse mitä ” odotettu tulos ”on. Oletan, että tiedostoissa on x
-bittejä.
Et voi pakottaa sitä oletusarvoisena ACL-luettelona (kuten umask) vain estää käyttöoikeuksia ei aseta niitä itse. Uusi hakemisto tai tiedosto ei saa enempää käyttöoikeuksia (käyttäjille, ryhmille ja muille) kuin open()
tai mkdir()
kutsu, joka luo sen.
Tiedostoille vaaditaan yleensä vain luku- ja kirjoitusoikeuksia. Mutta jos kääntäjä luo binääritiedoston, se pyytää myös suorituslupaa.
Kommentit
- Vastauksesi on melko kaoottinen englanninkielisestä näkökulmasta. Voitteko korjata sen? En myöskään ole varma ’ mitä tarkoitat. Katso koodini. Hakemistoille se toimii aina.Tiedostoille se toimii myös aina paitsi ” x ” -bitti. Jos ’ ei ole oikea tapa tehdä niin, niin mitä paitsi asetetaan umask joka kerta, kun hakemistoa käytetään?
Vastaus
$ touch file && chmod a+x file
Muiden vastausten selitykset ovat erinomaisia. Haluan lisätä jotain, joka todella antaa vastauksen kysymykseen.
Kuinka tämä voidaan korjata?
tietyllä koodilla. @Scott kertoi kuinka tämä tehdään.
sinun on luotava tiedosto ja sitten
chmod
se.
Vastauksessani oleva koodi näyttää, miten se tehdään ja korostaa sen asettamalla sen ensin.
Lisää selitystä
Aloittaakseni yksinkertaisuuden vuoksi yksinkertaisesti lisätään touch
-operaation antama komento, erityisesti touch file
, muuttuu 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
Täällä asetan saman tilanteen koneelleni (Cygwin) osoittaakseni, että se toimii, ja teen saman virtuaalisessa Ubuntu-ruudussa näyttämään asennuksen erot . (Huomaa, että varsinainen komento asioiden korjaamiseksi ei muutu, haluan vain näyttää joitain eroja, jotka saattavat syntyä setfacl
kanssa, ja vahvistaa itse, että se toimii .)
$ 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
Vastaa
Voit kokeilla tätä yksinkertaista komentosarjaa korvaamaan kunkin tiedoston ja hakemiston ACL-tietueet antamalla määritetyt oletusoikeudet.
$ 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
jaother
ACL-merkinnät. Jos sinulla on oletusarvoisia ACL-merkintöjä nimetyille käyttäjille tai ryhmille, ne ’ peritään määritetyllä tavalla, eikö?