Jak nadać plikom i katalogom utworzonym przez FTP odpowiednie uprawnienia dla Apache do ich odczytu i zapisu?

8

Jestem bardziej osobą z Windows, więc proszę wybacz moją ignorancję w tym podstawowym pytaniu o Linuksa.

Dbam o serwer Linux (Debian), na którym jest zainstalowany tylko Apache2 i vsftp.

To, co się dzieje, polega na ciągłej walce z tym, kto jest właścicielem plików i folderów i wydaje się, że nie udało się tego naprawić.

Oto moje dotychczasowe zrozumienie:

  • Użytkownik www-data potrzebuje własności folderów i plików, ponieważ wszystkie pliki w katalogu / var / www / html uruchamiają skrypty, które wymagają zapisania w swoim folderze. I oczywiście musi być w stanie obsługiwać strony przez http.
  • Mój użytkownik ftp (nazwijmy go ftpuser ) również wymaga pozwolenia na zapis do folderu / var / www / html (rekurencyjny), ponieważ muszę móc przesyłać nowe pliki.

Mając to na uwadze, stworzyłem grupę o nazwie ftpandwww i przeszukałem wszystkie foldery i pliki w tej grupie. To działało do pewnego stopnia ...

Jestem prawie we właściwym miejscu, z wyjątkiem faktu, że wszelkie nowe foldery utworzone za pomocą mojego klienta FTP mają nieprawidłowe uprawnienia (które mogę poprawić, zmieniając je w kliencie FTP), ale dane www nie mogą do nich zapisywać ponieważ są one własnością ftpuser, a ja w końcu muszę połączyć się z SSH i uruchomić grupę chown na ftpandwww, aby oboje byli szczęśliwi.

Jak sprawić, aby wszystkie nowe foldery, które tworzę na FTP, miały odpowiednie uprawnienia (774) i były automatycznie własnością grupy ftpandwww , do której mogę przesyłać i udostępniać przez Internet (z uprawnieniami do zapisu) bez konieczności wchodzenia i przeglądania wszystkich nowe foldery i pliki za każdym razem?

omega1
źródło

Odpowiedzi:

10

Użyj uprawnień SetGID w głównym katalogu internetowym i rozpowszechnij je wśród dzieci.

Kiedy zastosujesz SetGID w katalogu, wszystkie nowe elementy w tym katalogu zostaną utworzone z tą samą grupą, co ich rodzic, niezależnie od domyślnego członkostwa użytkownika w grupie.

Aby zastosować SetGID do obiektu systemu plików, użyj chmodz 2 przed kodem uprawnień.
(np .: 740 => 2740).

Używam SetGID na wielu moich udziałach Samba, dzięki czemu pliki zawsze mają własną grupę, Usersa każdy członek grupy może je odczytać (zwykle używam 2750, aby tylko użytkownik właściciela mógł pisać do pliku).

W twoim przypadku uruchom coś takiego (zastąp XXX żądanymi uprawnieniami):

sudo chown -R  root:ftpandwww /var/www
sudo chmod -R 2XXX /var/www 

Wtedy pojawią się nowe pliki i foldery z własnością jak ftpuser:ftpandwww.

Edytować:

W zależności od przypadku użycia SetGID prawdopodobnie wystarczy do rozwiązania problemu, ale jeśli nadal występują problemy, w których odmówiono zapisu jednemu lub drugiemu użytkownikowi, z powodu niepoprawnego pozwolenia grupy (ale własność jest prawidłowa), najlepszym rozwiązaniem jest ustawienie zwyczaj UMASK dla użytkownika, który tworzy pliki .

Jeśli masz trudności z ustawieniem UMASK dla użytkownika (ponieważ jest to demon), sprawdź ten wątek na temat opcji ustawiania UMASK użytkownika-demona .

Poleciłbym maskę, 007jeśli chcesz, aby członkowie grupy mogli zapisywać i usuwać pliki oraz nie mieli uprawnień dla osób niebędących właścicielami.

Frank Thomas
źródło
Dzięki, spróbuję tego, kiedy wspomnicie, że wszystkie pliki i foldery będą miały tę własność ftpuser: ftpandwww będzie nadal je obsługiwał i dane (za pomocą skryptu) również do zapisu w folderach? Dzięki jeszcze raz.
omega1
Rzeczywistym właścicielem-użytkownikiem będzie prawdopodobnie użytkownik prowadzący proces, chyba że użyje lokalnego uwierzytelnienia (ale jest to całkowicie zależne od aplikacji). Tak czy inaczej odpowiedź na Twoje pytanie zależy od wybranego przez Ciebie XXX. ponieważ zarówno wwwdata, jak i ftpdata są w tej samej grupie, jeśli podasz 770, to tak, oba konta będą mogły zapisywać do obiektów. jeśli jednak podasz 740, tylko użytkownik będzie mógł pisać, ale każdy członek ftpandwww będzie mógł czytać. Chodzi o to, że do tych operacji używasz perm grupowych zamiast permsowych.
Frank Thomas