Moje pytanie jest podobne do sposobu ustawiania domyślnych uprawnień do plików dla WSZYSTKICH nowo utworzonych plików w systemie Linux - różni się jednak w istotny sposób:
Chcę, aby wszystkie pliki utworzone w (lub skopiowane lub przeniesione) określonego katalogu odziedziczyły zestaw domyślnych uprawnień, które różnią się od domyślnych uprawnień systemowych.
Uzasadnienie: katalog, o którym mowa, to „lej zasysający” dla aplikacji. Użytkownicy w grupie umieszczają pliki w katalogu, a aplikacja (działająca pod innym identyfikatorem użytkownika w tej samej grupie) bierze je i przetwarza. Problem polega na tym, że właścicielem każdego pliku umieszczonego w katalogu jest użytkownik, który go tam umieścił, a uprawnienia są domyślnie ustawione na „rw-r - r--”; Chcę to zmienić na „rw-rw ----”. Aplikacja wykonująca pobieranie nie może tego zrobić jawnie, ponieważ identyfikator użytkownika, pod którym aplikacja jest uruchomiona, nie jest właścicielem danego pliku, a domyślne uprawnienia nie pozwalają aplikacji na chmod na pliku! Oczywiście użytkownik może zrobić chmod po umieszczeniu tam pliku - ale chcę, aby „upuszczenie” przez użytkownika było jak najprostsze. (Ci ludzie nie znają systemu Linux,
umask wydaje się zbyt potężny: nie chcę ustawiać domyślnych uprawnień dla każdego pliku utworzonego w dowolnym miejscu przez tych użytkowników - tylko tych utworzonych (lub umieszczonych) w tym katalogu.
Proszę doradź, dzięki!
acl
jako opcję wmount
poleceniu, kiedy masz to dodane/etc/fstab
. Będzie redundantne, a kiedy uruchomiszmount
polecenie w odpowiedzi, otrzymasz wynik w następujący sposób:/dev/vda1 on / type ext4 (rw,errors=remount-ro,acl,acl)
(patrzacl,acl
na końcu). Popraw to, jeśli się nie mylę.Mogę zaproponować obejście: Utwórz osobny katalog „upuść”, uruchom tam osobny minijob, który naprawia uprawnienia, a następnie przenosi pliki do katalogu danych aplikacji. Możesz do tego użyć incron, aby praktycznie nie było zauważalnego opóźnienia.
źródło
Mogę wymyślić cztery możliwe metody:
find $HOME/intake -type f -exec chmod 660 {} \;
, różne systemy mają ulepszenia w tym zakresie (jak-exec+
opcja)PROMPT_COMMAND='test -s $PWD/.umask && umask $(cat $PWD/.umask)'";$PROMPT_COMMAND"
byłoby najprostsze.źródło