Jak korzystać z chmod na komputerze Mac, aby nowe pliki dziedziczyły uprawnienia do katalogu nadrzędnego?

23

Jestem na Macu. Chcę to zrobić, aby wszystkie nowe pliki / foldery tworzone w określonym folderze miały takie same uprawnienia (nie grupowe, o które już zadbano) jak uprawnienia do katalogu nadrzędnego. W Linuksie zwykle używałbym setfacl, ale wygląda na to, że chmod na Macu może zrobić to, czego szukam. Przeczytałem stronę podręcznika dla chmod, ale wciąż nie mogę wymyślić, jak poprawnie sformatować polecenie, aby uzyskać to, czego chcę.

Jeremy Hicks
źródło
Chcę, aby nowe pliki / foldery były czytelne dla grupy i do zapisu.

Odpowiedzi:

33

Najpierw trochę tła wyjaśniającego, co się dzieje: Pliki w OS X mogą mieć dwa zupełnie różne rodzaje ustawień uprawnień: POSIX i ACL.

Pliki zawsze (cóż, prawie zawsze) mają zastosowane uprawnienia POSIX, składające się z właściciela, grupy i innych (z pewną kombinacją odczytu, zapisu i wykonania dla każdego z nich). Nie ma sposobu na kontrolowanie dziedziczenia uprawnień POSIX: nowe elementy są zawsze własnością każdego użytkownika, który je utworzył, przypisanie grupy jest dziedziczone z folderu, w którym się znajdują, a dostęp jest określany przez umask (który prawie zawsze: właściciel otrzymuje pełny dostęp, grupa i inni tylko do odczytu + uruchom foldery). Więc uprawnienia POSIX nie będą działać dla tego, co próbujesz zrobić.

Pliki mogą mieć również zastosowaną listę kontroli dostępu (ACL). Jest to lista wpisów kontroli dostępu (ACE), z których każdy dotyczy użytkownika lub grupy, określa typy dostępu (bardzo szczegółowo), czy są one dozwolone, czy odmówione, oraz czy ACE należy również skopiować do elementy utworzone w folderze. Ten ostatni kawałek jest tą częścią, która sprawia, że ​​jest to dla ciebie przydatne; musisz utworzyć pozycję ACE w folderze, który określa żądaną grupę, typy żądanego dostępu i pełne dziedziczenie.

chmod w OS X może manipulować ACE za pomocą opcji uprawnień + a, -a itp. Jeśli rozumiem, czego chcesz, możesz użyć tego (z podaniem nazwy grupy i ścieżki folderu), aby utworzyć ACE:

chmod +a "group:examplegroup allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" /path/to/folder

Zauważ, że dziedziczenie nie jest „aktywne”, tzn. Nie dotyczy elementów utworzonych przed przypisaniem ACE i nie dotyczy elementów utworzonych gdzieś indziej, a następnie przeniesionych do folderu. Możesz zastosować go do istniejącej zawartości za pomocą -R ( chmod -R +a ...). Nie znam sposobu (oprócz narzędzi administratora serwera Apple), aby wymusić dziedziczenie elementów przeniesionych do folderu.

Gordon Davisson
źródło
Dzięki za świetne wyjaśnienie. Właśnie go wypróbowałem i nadal utworzyłem nowy plik z użytkownikiem do odczytu / zapisu, wszyscy inni mają uprawnienia do odczytu. Folder nadrzędny (na zewnątrz) ma 775 uprawnień z moim użytkownikiem (jhicks) jako właścicielem i _www jako grupą. Dodałem się do grupy _www. drwxrwxr-x + 13 jhicks _www 442B 16 listopada 09:47 na zewnątrz Uruchomiłem polecenie w następujący sposób: chmod + a "grupa: _www zezwól na listę, dodaj_plik, szukaj, podkatalog_dodatkowy, delete_child, readattr, writeattr, readextattr, writeextattr, readsecurity, file_inherit, directory_inherit "na zewnątrz
Jeremy Hicks
ls -lpokazuje tylko uprawnienia POSIX (chociaż „+” po uprawnieniach wskazuje, że istnieje ACL). Służy ls -ledo wyświetlania list ACL.
Gordon Davisson
Jeśli w nazwie grupy znajduje się spacja, możesz użyć: jako separatora. Na przykład „grupa: moja grupa ze spacją: zezwól”
Doug Richardson,
Następnie na chmod +a ...komendę, potem stworzył abc.txt w folderze. Plik został przełączony na innego użytkownika i edytuj za pomocą TextEdit. Plik jest oznaczony jako Zablokowany i nie można go edytować.
ohho,
Robiłem z tym trochę zabawy. Myślę, że wymuszacie dziedziczenie z + ai
Robin
4

Spróbuj dodać -Rdo polecenia @ Gordon, tak:

chmod -R +a "group:_www allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" outdoors

-RWola opcja (jak wspomniano tutaj ):

Recurse: Zmień tryb hierarchii plików zakorzenionych w plikach zamiast samych plików.

Zmiana hierarchii plików wydaje się być tym, czego szukasz (dla nowych plików, katalogów itp.).

Możesz również sprawdzić ten post Apple.SE , który dotyczy sytuacji nieco podobnej do twojej (z wyjątkiem odnoszącej się do wspólnego katalogu), która wymagała sudoprzyczepienia na froncie.

JW8
źródło
4

To (-R) nie jest tym, co większość ludzi stara się robić; przez większość czasu woleliby zmienić listę ACL w najwyższym katalogu i zrobić coś magicznego, aby zmusić wszystkie zawarte obiekty do dziedziczenia flag zgodnie z listą ACL podaną w katalogu głównym tego poddrzewa. Jest to o wiele bardziej eleganckie, ponieważ listy ACL obiektów będą sortować te odziedziczone pozycje ACE zgodnie z zasadami.

I tak, musiałem napisać skrypt Pythona, aby to zrobić, nie znalazłem też niczego odpowiedniego.

nosy
źródło
2
Czy chcesz się dzielić (np. Na sedno ? Jeśli nie masz nic przeciwko, myślę, że to był miły gest.
myhd
1

chmod + ai, i = dziedzicz reguły acl

zaonline
źródło
0

Na komputerze Mac spróbuj użyć PathFindera , aby łatwo ustawić ACL i POSIX. Jeśli hostujesz WordPress na serwerze Mac, musisz także ustawić define('FS_METHOD', 'direct');plik wp-config.php, aby instalowanie wtyczek i uaktualnień nie wymagało podania szczegółów FTP.

Zasadniczo zachowujesz domyślne uprawnienia POSIX i dodajesz użytkownika _www (nie grupę) do ACL, a następnie kliknij Propaguj uprawnienia w oknie ACL.

Max
źródło