Když používám setfacl ke správě toho, jaká oprávnění by měly mít podřízené soubory / adresáře, z nějakého důvodu mají soubory všechna oprávnění kromě toho spouštěcího („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 

Myslel jsem, že to má něco společného s umask, ale jeho změna různými způsoby nikdy nedává očekávaný výsledek, pokud mi něco nechybí.

Jak to lze opravit?

Odpověď

Odpověď Hauke Laging se snaží říci:

Jakýkoli program, který vytvoří soubor nebo adresář, určuje režim (oprávnění), který daný soubor chce mít. To je téměř vždy napevno v programu C (nebo v jakémkoli použitém jazyce) ) a málokdy je uživatel přímo přístupný. Potom může hodnota umask a výchozí seznam ACL vypnout bity oprávnění, ale ne přidejte je.

Váš problém je v tom, že zatímco mkdir určuje režim 777 (rwxrwxrwx), téměř všechny programy, které vytvářejí soubory, specifikují 666 (rw-rw-rw-). To zahrnuje touch, prostředí (pro přesměrování I / O; např. program > file), editory (vi, vim, emacs atd.), dd, split atd. Proto nedostanete oprávnění rwxrwxrwx k prostému souboru ihned po vytvoření (kterýmkoli z těchto programů), bez ohledu na to, co děláte s ACL; musíte soubor vytvořit a poté chmod ho.

Z tohoto pravidla existuje několik výjimek:

  • cp a související programy (např. cpio, tar atd.), které kopírují nebo jinak znovu -vytvoří soubor, který (pokusí se) nastaví nový soubor do stejného režimu jako původní soubor.
  • Kompilátory, které vytvářejí binární spustitelné soubory, určují režim 777 (alespoň pokud kompilace úspěšná), takže uživatel bude ve skutečnosti schopen spustit program, který právě zkompiloval.

Komentáře

  • Předpokládám pouze toto platí pro tradiční režimy oprávnění Unixu, které odpovídají user, group a other Záznamy ACL. Pokud máte výchozí položky ACL pro pojmenované uživatele nebo skupiny, budou ‚ zděděny, jak je uvedeno, že?
  • Je to odněkud citace? Pokud ano, přidejte prosím zdroj, a pokud ne, odstraňte formát nabídky.
  • @terdon: Není to nabídka; je to (jak je popsáno) parafráze na odpověď Hauke Laging . Jak by to mělo být řešeno? (1) Mohl jsem upravit druhou odpověď, ale vím, že se masivně přepisují příspěvky jiných lidí. (A všimněte si, FWIW, že můj zástupce na tomto webu byl < 2000 v říjnu 2014.) (2) Mohl jsem to zveřejnit jako komentář k druhé odpovědi. Nebo spíš bych to mohl zveřejnit jako sérii tří komentářů, protože je to > 1200 znaků. Ale to není v souladu s mým chápáním účelu komentářů. … (Pokračování)
  • Hej, nebyla to ‚ t stížnost! To je skvělá odpověď a našel jsem ji jen proto, že mě zajímalo to samé. Jen bych odstranil formátování nabídky, které je ‚ vše. Zveřejnění odpovědi objasňující stávající je v pořádku, pokud uvedete originál (který jste udělali). Ano, přidání odkazu by byl dobrý nápad, ale ‚ to není žádný problém. Zjevně nekopírujete jen jeho odpověď do své.
  • Nemyslel jsem si, že to byla stížnost; děkuji za pochvalu. Určitě si ale uvědomíte, že jakýkoli požadavek kosočtverce má v sametové rukavici nádech železné pěsti. 🙂 P.S. Upravil jsem svou odpověď v souladu s vaším návrhem.

Odpověď

Nezmiňujete, co je “ očekávaný výsledek „je. Předpokládám, že se jedná o soubory, které mají nastavenou bitovou sadu x.

Nelze to vynutit jako výchozí ACL (jako umask), jen brání oprávnění, ale nenastavuje je sám. Nový adresář nebo soubor nezíská více oprávnění (pro uživatele, skupinu a další) než open() nebo mkdir() volání, které jej vytvoří.

U souborů se obvykle vyžaduje pouze oprávnění ke čtení a zápisu. Pokud však kompilátor vytvoří binární soubor, požaduje také oprávnění ke spuštění.

Komentáře

  • Vaše odpověď je z anglického hlediska docela chaotická. Můžete to prosím opravit? Také si ‚ nejsem jistý co tím myslíš. Podívejte se na můj kód. Pro adresáře to vždy funguje.U souborů to také vždy funguje kromě bitů “ x „. Pokud to také ‚ není správný způsob, co jiného než nastavení umask při každém přístupu do adresáře?

Odpověď

$ touch file && chmod a+x file

Vysvětlení v ostatních odpovědích jsou vynikající. Chci přidat něco, co ve skutečnosti dává odpověď na otázku,

Jak to lze opravit?

s konkrétním kódem. @Scott řekl, jak to udělat,

musíte vytvořit soubor a poté chmod jej.

Kód v mé odpovědi ukazuje, jak na to a zvýrazní ho tak, že jej uvede jako první.


Další vysvětlení

Pro začátek jednoduše přidám do touch příkaz daný OP, konkrétně touch file se stane 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 

Tady nastavím stejnou situaci na svém počítači (Cygwin), abych ukázal, že to funguje, pak udělám totéž na virtuálním boxu Ubuntu, abych ukázal rozdíly v nastavení . (Všimněte si, že skutečný příkaz pro opravu věcí se nemění, chci jednoduše ukázat některé rozdíly, které by mohly přijít s setfacl, a také si sám ověřit, že to funguje .)

$ 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 

Odpověď

Můžete zkusit tento jednoduchý skript, který nahradí záznamy ACL pro každý soubor a adresář a poskytne výchozí zadaná oprávnění.

$ 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 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *