Amikor a setfacl segítségével kezelem, hogy a gyermekfájloknak / könyvtáraknak milyen jogosultságokkal kell rendelkezniük, valamilyen okból a fájlok rendelkeznek az összes engedéllyel, kivéve az execute (“x”) egyet.
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
Úgy gondoltam, hogy köze van az umask-hoz, de a különféle módon történő megváltoztatása soha nem adja meg a várt eredményt, hacsak nem hiányzik valami.
Hogyan lehet ezt kijavítani?
Válasz
Hauke Laging válasza azt próbálja mondani:
Bármely program, amely fájlt vagy könyvtárat hoz létre, meghatározza azt a módot (jogosultságokat), amelyre a fájlnak szüksége van. Ezt szinte mindig keményen kódolják a C programban (vagy bármilyen nyelven használják) ), és szinte soha nem érhető el közvetlenül a felhasználó számára. Ekkor a umask
érték és az alapértelmezett ACL kikapcsolhatja az engedélybiteket, de nem add hozzá őket.
A problémád az, hogy míg a mkdir
777-es módot ad meg (rwxrwxrwx
), szinte az összes A fájlokat létrehozó programok 666-ot (rw-rw-rw-
) adnak meg. Ide tartozik a touch
, a shell (I / O átirányításhoz; pl. program > file
), a szerkesztők (vi
, vim
, emacs
stb …), dd
, split
stb. Ezért a létrehozás után (e programok egyikével sem) azonnal megkapja a (z) rwxrwxrwx
engedélyeket egy sima fájlra, függetlenül attól, hogy mit tesz az ACL-ekkel; létre kell hoznia a fájlt, majd chmod
.
Ez a szabály néhány kivételt tartalmaz:
-
cp
és a kapcsolódó programok (pl.cpio
,tar
stb.), amelyek lemásolják vagy más módon újra – hozzon létre egy fájlt, amely az új fájlt ugyanabba az üzemmódba állítja, mint az eredeti fájlt. - A bináris futtatható fájlokat létrehozó fordítók 777-es módot adnak meg (legalábbis, ha a fordítás sikeres), így a felhasználó valóban képes lesz végrehajtani az imént összeállított programot.
Megjegyzések
Válasz
Nem említi, hogy mi a ” a várható eredmény “. Feltételezem, hogy azok a fájlok, amelyek x
bitekkel vannak beállítva.
Ezt nem lehet kikényszeríteni, mivel az alapértelmezett ACL (például az umask) csak megakadályozza az engedélyeket, de nem állítja be őket maga. Egy új könyvtár vagy fájl nem kap több engedélyt (felhasználó, csoport és egyebek számára), mint a open()
vagy mkdir()
hívás, amely létrehozza.
A fájlokhoz általában csak olvasási és írási engedély szükséges. De ha a fordító bináris fájlt hoz létre, akkor végrehajtási engedélyt is kér.
Megjegyzések
- Válasza angol szempontból meglehetősen kaotikus. Kérem, javítsa ki? Én sem vagyok biztos abban, hogy ‘ mire gondolsz. Nézd meg a kódomat. A könyvtáraknál ez mindig működik.A fájlok esetében ez mindig működik, kivéve a ” x ” bitet. Akkor is, ha ‘ ez nem a megfelelő módja ennek, akkor mi az, kivéve az umask beállítását minden egyes könyvtár elérésekor?
Válasz
$ touch file && chmod a+x file
A többi válasz magyarázata kiváló. Szeretnék hozzáadni valamit, ami valóban választ ad a kérdésre.
Hogyan lehet ezt kijavítani?
meghatározott kóddal. @Scott elmondta, hogyan kell ezt csinálni,
létre kell hoznod a fájlt, majd
chmod
.
A válaszomban található kód megmutatja, hogyan kell csinálni és kiemeli t azáltal, hogy első helyre helyezi.
További magyarázat
Először is, az egyszerűség kedvéért egyszerűen hozzáadom a touch
parancs, konkrétan touch file
touch file && chmod a+x file
lesz.
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
Itt ugyanazt a helyzetet állítom be a gépemen (Cygwin), hogy bebizonyítsam, hogy működik, majd ugyanezt tegyem egy virtuális Ubuntu dobozon, hogy megmutassam a beállítás különbségeit . (Ne feledje, hogy a tényleges javítási parancs nem változik, egyszerűen meg akarok mutatni néhány különbséget, ami felmerülhet setfacl
-vel, valamint magam is ellenőrizni, hogy működik-e. .)
$ 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
Válasz
Megpróbálhatja ezt az egyszerű parancsfájlt kicserélni az egyes fájlok és könyvtárak ACL rekordjait, megadva az alapértelmezett engedélyeket.
$ 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
ésother
ACL bejegyzések. Ha alapértelmezett ACL bejegyzései vannak a megnevezett felhasználókhoz vagy csoportokhoz, akkor azok ‘ a meghatározottak szerint öröklődnek, igaz?