chmod -R -r nie działa na macOS High sierra

1

Uaktualniłem z El Capitan do High Sierra (beta 9). Na El Capitan uruchomienie polecenia chmod -R -r <path to dir>działa poprawnie (rekurencyjnie cofanie uprawnień do odczytu). W High Sierra pojawia się komunikat o błędzie bez sensu chmod: <path to dir>: Permission denied.

Należy pamiętać, że dodatki takie jak polecenia chmod -R +r <path to dir> nie działają dobrze na High Sierra.

Przetestowałem to na głównym woluminie systemowym mojego wewnętrznego dysku MPB (system plików APFS, ponieważ instalator konwertuje woluminy HFS + automatycznie na dyski SSD) i na dysku HFS + RAM. Zachowanie było takie samo.

Czy to jest warte zgłoszenia błędu do Apple? Czy coś brakuje?

NazwaZero912
źródło
1
Dowolny folder lub konkretny? Myślę SIP ...
Tetsujin
1
Czy to możliwe, że High Sierra najpierw rozpocznie zmiany uprawnień w folderze TOP? Czyli może faktycznie usunęło uprawnienia do odczytu w górnym folderze, a to uniemożliwiło chmodowi dalsze zejście?
jimtut
Hm, po kilku kolejnych testach odkryłem, że problem dotyczy również El Capitan. Zwracam się do normalnego pustego folderu, który utworzyłem, do którego (domyślnie) mam uprawnienia drwxr-xr-x (czyli 755 zasadniczo). Powiedzmy, że folder znajduje się w /tmp/somefolder, a następnie chmod -R -r /tmp/somedirzawsze kończy się niepowodzeniem (bez względu na to, czy ma obiekty potomne, czy nie), podczas gdy się sudo chmod -R -r /tmp/somedirpowiedzie. Dlaczego potrzebuję uprawnień sudo / admin do rekurencyjnego usuwania uprawnień do odczytu z katalogu?!?
NameZero912,
Po dalszych eksperymentach mogę powiedzieć, że nawet jeśli się chmod -R -r /tmp/somedirnie powiedzie, uprawnienia do odczytu są cofane /tmp/somedir, ale nie dla żadnych podkatalogów (w przypadku, gdy takie istnieją) - sudojest wymagane, aby naprawdę dokonać rekurencyjnej zmiany uprawnień. To nie ma żadnego sensu i sugeruje, że chmod jest wdrożony bardzo słabo (i z jakiegoś powodu nigdy go nie odkryto ... to po prostu nie może być prawda!). Wydaje mi się, że chmod najpierw stosuje operację do katalogu najwyższego poziomu, a następnie nie stosuje jej do podkatalogów (a nawet kończy się niepowodzeniem, jeśli nie ma żadnych).
NameZero912,
find <path> -d -exec chmod -r {} ";"jest droga.
NameZero912,