2011-03-30 09:02:50 +0000 2011-03-30 09:02:50 +0000
37
37

Jak ustawić uprawnienia do plików, aby nowe pliki dziedziczyły te same uprawnienia?

Mam folder, w którym nowe podfoldery i pliki będą tworzone automatycznie, przez skrypt.

Chcę zachować uprawnienia użytkownika i grupy rekurencyjnie dla wszystkich nowych folderów i plików umieszczonych w katalogu nadrzędnym. Wiem, że wymaga to ustawienia lepkiego bitu, ale nie mogę znaleźć polecenia, które pokazuje dokładnie to, czego potrzebuję.

To jest to, co zrobiłem do tej pory:

sudo mkdir -p /path/to/parent
sudo chmod -R 660 myself:somegroup /path/to/parent

Następnie chcę, aby uprawnienia 660 zostały ustawione rekursywnie dla wszystkich folderów i plików umieszczonych w /path/to/parent.

Jednak wszystko, co do tej pory próbowałem, zawiodło. Czy ktoś może pomóc, proszę?

Właściwie flaga oktalna 660 prawdopodobnie nie jest nawet poprawna. Uprawnienia, które chcę, to:

  1. Katalogi umieszczone pod /path/to/parent są eXecutable przez użytkowników z uprawnieniami
  2. Pliki są read/writeable przez użytkownika myself i członków somegroup
  3. Pliki i foldery w /path/to/parent NIE są czytelne dla świata

Pracuję na Ubuntu 10.0.4 LTS.

Czy ktoś może pomóc, proszę?

Odpowiedzi (3)

64
64
64
2011-03-30 10:28:30 +0000

Bity uprawnień, których szukasz to 0770 i 0660.

  • rw- uprawnienia → 110 binarne → 6 ósemkowe

Własność grupy może być dziedziczona przez nowe pliki i foldery utworzone w folderze /path/to/parent przez ustawienie bitu setgid za pomocą chmod g+s w ten sposób:

chmod g+s /path/to/parent

Teraz wszystkie nowe pliki i foldery tworzone w ramach /path/to/parent będą miały przypisaną tę samą grupę, która jest ustawiona na /path/to/parent.


POSIX-owe uprawnienia do plików są nie dziedziczone; są one nadawane przez proces tworzący i łączone z jego aktualną wartością umask.

Jednakże, możesz użyć POSIX ACLs aby to osiągnąć. Ustaw domyślną ACL na katalogu:

setfacl -d -m u::rwX,g::rwX,o::- /path/to/parent

Spowoduje to zastosowanie setfacl do katalogu /path/to/parent, -m modyfikując -default ACLs - te, które będą stosowane do nowo utworzonych elementów. (Duże litery X oznaczają, że tylko katalogi otrzymają bit +x.)

(W razie potrzeby można dodać do ACLs u:someuser:rwX lub g:someuser:rwX - najlepiej grupę)


Uwaga: W starszych systemach używających ext3/ext4, trzeba było montować system plików z opcją acl, w przeciwnym razie ignorowałby on wszystkie ACLs i nie pozwalał na ustawianie nowych.

mount -o remount,acl /

Aby ustawić to na stałe, użyj tune2fs -o acl <device> lub edytuj /etc/fstab.

10
10
10
2011-03-30 12:09:01 +0000

Grawity daje doskonałą odpowiedź, ale podejrzewam, że edytowane pytanie mogło nieco zmienić rzeczy.

Sugerowałbym pozostawienie katalogu będącego własnością użytkownika / grupy apache. Prawdopodobnie będzie to albo apache lub httpd w zależności od twojej dystrybucji.

np.

chown -R apache:apache /path/to/parent

Możesz wtedy zrobić coś takiego jak https://serverfault.com/questions/164078/is-adding-users-to-the-group-www-data-safe-on-debian lub nawet dodać siebie do grupy apache, aby upewnić się, że masz dostęp grupowy do katalogu. (Coś jak usermod -aG apache username)

Nie używałbym chmod -R całego katalogu, ponieważ nie chcesz, aby skrypty html lub jpg lub losowe inne rzeczy były wykonywalne. Powinieneś zmienić uprawnienia zgodnie z wymaganiami. (chociaż zresetowanie ich do 660 może nie być najgorszym pomysłem).

Coś, co możesz wypróbować to:

chmod o+w file

‘o’ oznacza ‘inne’, a ‘w’ oznacza ‘zapis’. Możesz również mieć ‘u’ dla ‘user’ & ‘g’ dla ‘group’, jak również ‘r’ i ‘x’, które są prawdopodobnie oczywiste. Możesz usunąć uprawnienia używając ‘-’ zamiast ‘+’.

2
2
2
2011-03-30 14:22:39 +0000

Myślę, że za bardzo komplikujesz sprawę. Jeśli katalog najwyższego poziomu nie jest dostępny dla innych, to inni nie będą mogli tworzyć plików w obrębie drzewa. Grupowy dostęp do zapisu nie jest wymagany, jeśli tylko apache zajmuje się pisaniem.

Te kroki powinny zrobić to, co chcesz (zamień katalog w poleceniach na katalog, którego chcesz użyć):

  • dodaj umask 027 do skryptu apache defaults /etc/default/apache. Uniemożliwi to innym dostęp do plików i katalogów tworzonych przez apache.
  • wykonaj chown www-data:www-data directory na katalogu, do którego chcesz, aby apache mógł pisać.
  • wykonaj chmod 750 directory na katalogu, do którego chcesz, aby apache mógł pisać.

Zezwolenie apache'owi na pisanie do katalogu otwiera możliwość wstrzyknięcia wszelkiego rodzaju złośliwego oprogramowania do treści, którą serwujesz. Odpowiednio monitoruj zawartość tego drzewa katalogów.