Kiedy używam setfacl do zarządzania uprawnieniami plików / katalogów podrzędnych, z jakiegoś powodu pliki te mają wszystkie uprawnienia oprócz uprawnienia do wykonania („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 

Myślałem, że ma to coś wspólnego z umaską, ale zmienianie jej na różne sposoby nigdy nie daje oczekiwanego rezultatu, chyba że czegoś mi brakuje.

Jak można to naprawić?

Odpowiedź

Odpowiedź Hauke Laginga próbuje powiedzieć:

Każdy program, który tworzy plik lub katalog określa tryb (uprawnienia), które chce, aby ten plik miał. Jest to prawie zawsze zakodowane na stałe w programie C (lub jakimkolwiek innym używanym języku ) i prawie nigdy nie są bezpośrednio dostępne dla użytkownika. Wtedy wartość umask i domyślna lista ACL mogą wyłączać bity uprawnień, ale nie dodaj je.

Twój problem polega na tym, że chociaż mkdir określa tryb 777 (rwxrwxrwx), prawie wszystkie programy tworzące pliki określają 666 (rw-rw-rw-). Obejmuje to touch, powłokę (do przekierowania I / O; np. program > file), edytory (vi, vim, emacs, etc…), dd, split i tak dalej. Dlatego nie otrzymasz uprawnień rwxrwxrwx do zwykłego pliku natychmiast po jego utworzeniu (przez którykolwiek z tych programów), bez względu na to, co zrobisz z listami ACL; musisz utworzyć plik, a następnie chmod go.

Jest kilka wyjątków od tej reguły:

  • cp i powiązane programy (np. cpio, tar itp.), które kopiują lub w inny sposób – utwórz plik, który (spróbuje) ustawić nowy plik w tym samym trybie co oryginalny plik.
  • Kompilatory, które tworzą binarne pliki wykonywalne, 777 określają tryb (przynajmniej jeśli kompilacja się powiedzie), więc użytkownik faktycznie będzie mógł wykonać program, który właśnie skompilował.

Komentarze

  • Zakładam, że to tylko dotyczy tradycyjnych trybów uprawnień systemu Unix, które odpowiadają user, group i other Wpisy ACL. Jeśli masz domyślne wpisy ACL dla nazwanych użytkowników lub grup, to ' zostaną odziedziczone zgodnie z opisem, prawda?
  • Czy to skądś cytat? Jeśli tak, dodaj źródło, a jeśli nie, usuń formatowanie cytatu.
  • @terdon: To nie jest cytat; jest (zgodnie z opisem) parafrazą odpowiedzi Hauke Laging . Jak należy sobie z tym radzić? (1) Mógłbym zredagować drugą odpowiedź, ale wiem, że masowe przeróbki postów innych ludzi są mile widziane. (Zauważ, FWIW, że moim przedstawicielem na tej stronie był < 2000 w październiku 2014). (2) Mogłem to opublikować jako komentarz do innej odpowiedzi. A raczej mógłbym opublikować go jako serię trzech komentarzy, ponieważ ma > 1200 znaków. Ale to nie jest zgodne z moim rozumieniem celu komentarzy. … (Ciąg dalszy)
  • Hej, to nie była ' skarga! To dobra odpowiedź i znalazłem ją tylko dlatego, że zastanawiałem się nad tym samym. Po prostu usunąłbym formatowanie cytatu, które jest wszystkim '. Opublikowanie odpowiedzi wyjaśniającej istniejącą jest w porządku, o ile wspominasz o oryginale (co zrobiłeś). Tak, dodanie linku byłoby dobrym pomysłem, ale ' to nic wielkiego. Najwyraźniej nie kopiujesz tylko jego odpowiedzi do swojej.
  • Nie sądziłem, że to była skarga; dzięki za pochwałę. Ale z pewnością zdajesz sobie sprawę, że każda prośba osoby o kształcie rombu ma wyraz żelaznej pięści w aksamitnej rękawiczce. 🙂 P.S. Zmieniłem moją odpowiedź zgodnie z twoją sugestią.

Odpowiedź

Nie wspominasz o tym, co jest ” oczekiwany wynik „to. Zakładam, że są to pliki mające ustawione bity x.

Nie można tego wymusić jako domyślnej listy ACL (np. umask) po prostu uniemożliwiającej uprawnienia, ale nie ustawia ich samodzielnie. Nowy katalog lub plik nie ma więcej uprawnień (dla użytkownika, grupy i innych) niż open() lub mkdir(), które go tworzy, żąda.

W przypadku plików zwykle wymagane są tylko uprawnienia do odczytu i zapisu. Ale jeśli kompilator tworzy plik binarny, żąda również uprawnień do wykonywania.

Komentarze

  • Twoja odpowiedź jest dość chaotyczna z angielskiego punktu widzenia. Czy możesz ją poprawić? Również ja ' nie jestem pewien co masz na myśli Spójrz na mój kod. W przypadku katalogów to zawsze działa.W przypadku plików działa to zawsze, z wyjątkiem bitu ” x „. Również jeśli ' nie jest właściwym sposobem, aby to zrobić, to co jest wyjątkiem ustawiania umaski za każdym razem, gdy uzyskuje się dostęp do katalogu?

Odpowiedź

$ touch file && chmod a+x file

Wyjaśnienia w innych odpowiedziach są znakomite. Chcę dodać coś, co faktycznie daje odpowiedź na pytanie,

Jak można to naprawić?

z określonym kodem. @Scott powiedział, jak to zrobić,

musisz utworzyć plik, a następnie chmod go.

Kod w mojej odpowiedzi pokazuje, jak to zrobić i podkreśla , umieszczając go na pierwszym miejscu.


Więcej wyjaśnień

Na początek, dla uproszczenia, dodaję do touch komenda podana przez OP, w szczególności touch file staje się 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 

Tutaj skonfiguruję tę samą sytuację na moim komputerze (Cygwin), aby pokazać, że działa, a następnie zrobię to samo na wirtualnym pudełku Ubuntu, aby pokazać różnice w konfiguracji . (Zauważ, że faktyczne polecenie naprawiania rzeczy się nie zmienia, po prostu chcę pokazać pewne różnice, które mogą wyniknąć z setfacl, a także sprawdzić, czy to działa .)

$ 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 

Odpowiedź

Możesz spróbować tego prostego skryptu, który zastępuje rekordy ACL dla każdego pliku i katalogu, nadając określone domyślne uprawnienia.

$ 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 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *