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
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
user
,group
iother
Wpisy ACL. Jeśli masz domyślne wpisy ACL dla nazwanych użytkowników lub grup, to ' zostaną odziedziczone zgodnie z opisem, prawda?