Mam kilka długo działających skryptów i aplikacji, które przechowują wyniki w katalogu udostępnionym kilku użytkownikom. Chciałbym mieć pewność, że każdy plik i katalog utworzony w tym katalogu współdzielonym ma automatycznie u=rwxg=rwxo=r
uprawnienia.
Wiem, że mógłbym używać umask 006
na czele różnych moich skryptów, ale nie podoba mi się to podejście, ponieważ wielu użytkowników pisze własne skrypty i może zapomnieć o samodzielnym ustawieniu umask.
Naprawdę chcę, aby system plików ustawiał nowo utworzone pliki i katalogi z określonymi uprawnieniami, jeśli znajdują się w określonym folderze. Czy to w ogóle możliwe?
Aktualizacja : Myślę , że można to zrobić za pomocą list ACL POSIX , używając funkcji domyślnej listy ACL, ale w tej chwili to wszystko jest trochę ponad moją głową. Jeśli ktoś mógłby wyjaśnić, jak używać domyślnych list ACL, prawdopodobnie ładnie odpowiedziałby na to pytanie.
źródło
Odpowiedzi:
Aby uzyskać prawo własności, możesz ustawić bit setuid grupy w katalogu za pomocą
Zapewni to, że pliki utworzone w katalogu należą do grupy. Powinieneś wtedy upewnić się, że każdy pracuje z umask 002 lub 007 lub czymś w tym rodzaju - dlatego Debian i wiele innych systemów linuxowych jest domyślnie skonfigurowanych z grupami na użytkownika.
Nie znam sposobu na wymuszenie żądanych uprawnień, jeśli umask użytkownika jest zbyt silna.
źródło
+s
część? Dzięki.Oto jak to zrobić przy użyciu domyślnych list ACL, przynajmniej w Linuksie.
Po pierwsze, może być konieczne włączenie obsługi ACL w systemie plików. Jeśli używasz ext4, to jest już włączony. Inne systemy plików (np. Ext3) muszą być montowane z
acl
opcją. W takim przypadku dodaj opcję do swojego/etc/fstab
. Na przykład, jeśli katalog znajduje się w głównym systemie plików:Następnie zamontuj go ponownie:
Teraz użyj następującego polecenia, aby ustawić domyślną listę ACL:
Wszystkie nowe pliki w programie
/shared/directory
powinny teraz uzyskać żądane uprawnienia. Oczywiście zależy to również od aplikacji tworzącej plik. Na przykład, większość plików nie będzie wykonywana przez nikogo od początku (w zależności od argumentu mode wywołania open (2) lub creat (2)), tak jak przy użyciu umask. Niektóre narzędzia podobacp
,tar
irsync
postara się zachować uprawnienia pliku źródłowym (S), który maskuje swój domyślny ACL, jeśli plik źródłowy nie była grupa zapisu.Mam nadzieję że to pomoże!
źródło
umask
dla wszystkich użytkowników. = / unix.stackexchange.com/questions/71743/ ...cp
, spróbuje skopiować uprawnienia pliku źródłowego. Nawet nieumask
pomaga podczas używaniacp
. Widziałem ten sam problem ztar
. Zobacz to pytanie .umask
.setfacl
works correctly
- zakładam, że powinno się nie udać, ale nie jestem pewien, bo odpowiedź mija się z tym punktem.Jest brzydki, ale możesz użyć polecenia setfacl, aby osiągnąć dokładnie to, co chcesz.
Na komputerze z systemem Solaris mam plik zawierający listy ACL dla użytkowników i grup. Niestety, musisz wymienić wszystkich użytkowników (przynajmniej nie mogłem znaleźć sposobu, aby to działało inaczej):
Nazwij plik acl.lst i wpisz swoje prawdziwe nazwy użytkowników zamiast user_X.
Możesz teraz ustawić te listy ACL w swoim katalogu, wydając następujące polecenie:
źródło
w swoim skrypcie powłoki (lub
.bashrc
) możesz użyć czegoś takiego jak:umask 022
umask
to polecenie określające ustawienia maski kontrolującej sposób ustawiania uprawnień do nowo tworzonych plików.źródło
umask 002
w moim .bashrc.umask 002
ogranicza dostęp do innych, pozostawiając grupę bez zmian. Pamiętaj, że tougo
- to jest grupa użytkowników innych. Pamiętaj też, że umask w zasadzie oznacza odejmowanie od wartości domyślnych. Dla plików:666 - 002
oznaczałoby 664, co oznacza, że nie ma to wpływu na grupę.