2010-06-12 04:06:50 +0000 2010-06-12 04:06:50 +0000
86
86

Jak sprawić, aby nowe uprawnienia do plików dziedziczyły po katalogu nadrzędnym?

Mam katalog o nazwie data. Następnie uruchamiam skrypt pod identyfikatorem użytkownika ‘robot’. robot zapisuje do katalogu data i aktualizuje pliki w środku. Chodzi o to, że data jest otwarty zarówno dla mnie, jak i dla robota, aby aktualizować.

Więc ustawiłem uprawnienia i grupę właścicieli w ten sposób

drwxrwxr-x 2 me robot-grp 4096 Jun 11 20:50 data

gdzie zarówno ja jak i robot należymy do ‘robot-grp’. Zmieniam uprawnienia i grupę właścicieli rekursywnie jak w katalogu nadrzędnym.

Regularnie wgrywam nowe pliki do katalogu data używając rsync. Niestety, nowo wgrywane pliki nie dziedziczą uprawnień katalogu nadrzędnego, jak mam nadzieję. Zamiast tego wygląda to tak

-rw-r--r-- 1 me users 6 Jun 11 20:50 new-file.txt

Kiedy robot próbuje zaktualizować new-file.txt, kończy się to niepowodzeniem z powodu braku uprawnień do pliku.

Nie jestem pewien, czy ustawienie umask pomoże. W każdym bądź razie nowe pliki nie podążają za nim.

$ umask -S
u=rwx,g=rx,o=rx

Często jestem zdezorientowany przez Unixowe uprawnienia do plików. Czy ja w ogóle mam właściwy plan? Używam Debiana lenny.

Odpowiedzi (4)

53
53
53
2010-06-13 02:10:58 +0000

Nie chcesz zmieniać domyślnego umask systemu, jest to ryzyko dla bezpieczeństwa. Opcja sticky bit będzie działać do pewnego stopnia, ale najlepszym sposobem jest użycie ACL. Jest to łatwiejsze niż myślisz. Problem z podstawowymi listami ACL polega na tym, że domyślnie nie są one rekurencyjne. Jeśli ustawisz ACL na katalogu, tylko pliki wewnątrz tego katalogu dziedziczą ACL. Jeśli utworzysz podkatalog, nie otrzyma on nadrzędnego ACL, chyba że ACL jest ustawiony na rekurencję.

Po pierwsze, upewnij się, że ACL są włączone dla woluminu, na którym znajduje się katalog. Jeśli masz tune2fs, możesz wykonać następujące czynności:

# tune2fs -l /dev/sda1 | grep acl
Default mount options: user_xattr acl

Jeśli nie masz tune2fs, to zbadaj fstabs:

# cat /etc/fstab 
/dev/system/root / ext3 defaults 1 1
/dev/system/home /home ext3 defaults 1 2
/dev/storage/data /data ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2

Czwarta kolumna, która mówi “defaults” oznacza, że w moim systemie (CentOS 5.5), ACL’s są włączone. Jeśli masz wątpliwości, pozostaw to jako domyślne. Jeśli spróbujesz ustawić ACL i system się pomyli, wróć i dodaj opcję acl do /etc/fstab zaraz po defaults: defaults,acl.

Z tego, co rozumiem, chcesz, aby wszyscy z grupy users mieli dostęp do zapisu w katalogu z danymi. Można to osiągnąć w następujący sposób:

setfacl -Rm g:users:rwX,d:g:users:rwX data/
32
32
32
2010-06-12 04:13:24 +0000

Oznaczenie katalogu setgid (g+s) sprawi, że nowe pliki będą dziedziczyć własność grupy w katalogu, ale opcja -g rsync będzie próbowała to obejść.

4
4
4
2015-09-03 15:36:56 +0000

Inne odpowiedzi mają zastosowanie w ogólnym przypadku, ale ponieważ wspomniałeś, że rsync jest źródłem problemu, być może trzeba będzie po prostu dostroić jego wywołanie.

Na początek, popularna flaga -a powoduje, że rsync kopiuje uprawnienia; użyj -r zamiast -a lub dodaj -no-p (dla braku synchronizacji uprawnień) i -no-g (dla braku synchronizacji grup). Również rsync obsługuje flagę --chmod do zmiany uprawnień na nowo utworzonych plikach.

3
3
3
2010-06-12 04:43:45 +0000

Twój umask jest nieprawidłowy dla uprawnień, które chcesz. Chcesz umask o wartości 002. Obecnie masz umask równy 022. Ponadto, komentarz o tworzeniu katalogu setgid jest poprawny, ale nie jestem pewien, czy własność grupy plików jest czymś, co chcesz zmienić, czy nie.

Unixowe uprawnienia do plików są w rzeczywistości bardzo prostym modelem. Sam uważam, że ACLs są całkowicie mylące :-)