2015-04-15 16 views
5

Młodszy członek zespołu zrobił paskudną chmod -R 777 w /etc/ i spowodował, że SSH nie mógł się zalogować zdalnie na serwerze Ubuntu. Teraz naprawiłem ten problem z logowaniem ręcznie, ustawiając poprawne uprawnienia do plików na /etc/ssh/*, /etc/sudoers, , porównując inny normalny system. Ale jest tak wiele innych plików, które mogą powodować problemy w przyszłości.Uprawnienia do plików synchronizacji * tylko *

Zamierzam użyć rsync do wykonania pracy, ale nie chcę, aby zsynchronizowała zawartość plików, tylko uprawnienia, nie więcej pracy.

Czy to możliwe? Widzę, że rsync ma opcję -a, ale robi zbyt wiele.

+0

To, o co prosisz, jest możliwe, ale nie z rsync, obawiam się. – 4ae1e1

+0

Dziękuję za odpowiedź, więc co to jest? Jestem otwarty na inne narzędzia. – kyrre

+0

Cóż, możesz napisać skrypt, aby odczytać atrybuty plików w jednym systemie i ustawić atrybuty na drugim. Nic magicznego. – 4ae1e1

Odpowiedz

8

Jeśli masz „normalna” zawartość/etc dostępne w tym samym systemie (jak zamontowane w jakimś innym katalogu, powiedzmy /mnt/correct/etc), można użyć parametru --reference do chmod i chown poleceń i połączyć je z find który rozpoczyna się od "normalnego" katalogu:

$ cd /mnt/correct/etc 
$ find . ! -type l -exec chown -v --reference='{}' /etc/'{}' \; 
$ find . ! -type l -exec chmod -v --reference='{}' /etc/'{}' \; 

(Zakładam, że jesteś na systemie UNIX z GNU coreutils wersjach chmod i chown.)

Warunkiem "! -type l" w find wyklucza dowiązania symboliczne, ponieważ w przeciwnym razie chmod użyje uprawnień łącza do zmiany pliku, do którego prowadzi łącze (i to samo dotyczy chown).

+0

To działa bardzo dobrze ale chciałem tylko zwrócić uwagę, że powinieneś "chown" przed zrobieniem 'chmod', ponieważ chown wyczyści bity setuid/setgid. –

Powiązane problemy