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

35

Mam folder, w którym nowe podfoldery i pliki zostaną utworzone automatycznie za pomocą skryptu.

Chcę zachować rekursywnie uprawnienia użytkownika i grupy dla wszystkich nowych folderów i plików umieszczonych w katalogu nadrzędnym. Wiem, że wiąże się to z lepkim ustawieniem, ale nie mogę znaleźć polecenia, które pokazuje dokładnie to, czego potrzebuję.

Oto co dotychczas zrobiłem:

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

Następnie chcę, aby uprawnienia 660 były rekurencyjnie ustawione na dowolne foldery i pliki w nich umieszczone /path/to/parent.

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

W rzeczywistości ósemkowa flaga 660 prawdopodobnie nawet nie jest poprawna. Uprawnienia, których chcę, to:

  1. Katalogi umieszczone pod /path/to/parentsą eXecutable przez użytkowników z uprawnieniami
  2. pliki są odczytywane / zapisywane przez użytkownika i członków grupy
  3. Pliki i foldery w /path/to/parentNIE są czytelne na całym świecie

Korzystam z systemu Ubuntu 10.0.4 LTS.

Czy ktoś może pomóc?

oompahloompah
źródło

Odpowiedzi:

10

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

Sugeruję pozostawienie katalogu należącego do użytkownika / grupy Apache. Prawdopodobnie będzie to apache lub httpd, w zależności od dystrybucji.

na przykład

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

Następnie możesz zrobić coś takiego jak https://serverfault.com/questions/164078/is-adding-users-to-the-group-www-data-safe-on-debian, a nawet dodać się do grupy Apache, aby zapewnić sobie mieć dostęp do grupy do katalogu. (Coś jak usermod -aG apache username)

Nie chciałbym chmod -Rcałego katalogu, ponieważ nie chcesz skryptów HTML, plików JPG lub losowych innych rzeczy wykonywalnych. Powinieneś zmienić uprawnienia zgodnie z wymaganiami. (chociaż zresetowanie go do 660 może nie być najgorszym pomysłem).

Możesz spróbować:

chmod o+w file

„O” oznacza „inne”, a „w” oznacza „pisz”. Możesz również użyć „u” dla „użytkownika” i „g” dla „grupy”, a także „r” i „x”, które, mam nadzieję, są oczywiste. Możesz usunąć uprawnienia, używając „-” zamiast „+”.

Drogie
źródło
Myślę, że najprostszym rozwiązaniem jest dodanie się do grupy użytkowników Apache. Dzięki za sugestię. Nie wiem, dlaczego sam o tym nie pomyślałem!
oompahloompah
1
Czy o+wto dobry wybór? Czy zmiany nie powinny ograniczać się do ui g? W przeciwnym razie, po co próbować zachować bezpieczeństwo katalogu i podkatalogów?
jww
61

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

  • rw-uprawnienia → 110binarne → 6ósemkowe

Własność grupy mogą być dziedziczone przez nowych plików i folderów utworzonych w folderze / ścieżka / do / rodzica przez ustawienie bitu setgid używając chmod g+stak:

chmod g+s /path/to/parent

Teraz do wszystkich nowych plików i folderów utworzonych w / path / to / parent zostanie przypisana ta sama grupa, która jest ustawiona na / path / to / parent.


Uprawnienia do plików POSIX nie są dziedziczone; są one podawane przez proces tworzenia i łączone z jego bieżącą wartością umask.

Aby to osiągnąć , możesz jednak użyć list ACL POSIX . Ustaw domyślną listę ACL w katalogu:

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

Będzie to setfaclmiało zastosowanie do katalogu / path / to / parent, -modating -default ACLs - te, które zostaną zastosowane do nowo utworzonych elementów. (Wielkie litery Xoznaczają, że +xbit otrzymają tylko katalogi ).

(W razie potrzeby możesz dodać u:someuser:rwXlub g:someuser:rwX- najlepiej grupę - do list ACL.)


Uwaga: W starszych systemach korzystających z ext3 / ext4 trzeba było zamontować system plików z aclopcją, w przeciwnym razie zignorowałby wszystkie listy ACL i uniemożliwiłby ustawienie nowych.

mount -o remount,acl /

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

grawitacja
źródło
5
Dzięki za poświęcenie czasu na odpowiedź. Niestety, jestem całkiem nowy w tym wszystkim, a to, co napisałeś, jest dla mnie nie do odróżnienia od greckiego (przepraszam dla wszystkich greckich SO!). Nie rozumiałem większości tego, co napisałeś. Mam proces sieciowy i chcę dać Apache możliwość tworzenia folderów i plików w folderze nadrzędnym, w którym tylko Apache (właściciel) i ja (grupa) mają możliwość rw plików i przechodzenia do katalogów. Wszyscy inni są zbanowani. to wszystko, co próbuję zrobić. Apache musi mieć możliwość tworzenia podfolderów i przechowywania w nich plików.
oompahloompah 30.03.11
To nie działa z unzip?
datasn.io
2

Myślę, że nadmiernie komplikujesz ten problem. Jeśli katalog najwyższego poziomu nie jest dostępny dla innych, inni nie będą mogli tworzyć plików w drzewie. Grupowy dostęp do zapisu nie jest wymagany, jeśli tylko apache wykonuje zapis.

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

  • dodaj umask 027do domyślnego skryptu apache /etc/default/apache. Uniemożliwi to innym dostęp do jakichkolwiek plików lub katalogów tworzonych przez apache.
  • uruchom chown www-data:www-data directoryw katalogu, do którego apache ma mieć możliwość zapisu.
  • uruchom chmod 750 directoryw katalogu, do którego apache ma mieć możliwość zapisu.

Zezwolenie apache'owi na zapis do katalogu otwiera możliwość wstrzykiwania wszelkiego rodzaju złośliwego oprogramowania do obsługiwanej zawartości. Monitoruj odpowiednio zawartość tego drzewa katalogów.

BillThor
źródło