SFTP, ChrootDirectory, a přístup uživatelů do VirtualHost (každý odděleně)

Zdravím.
Na mém serveru bude hostováno několik domén, každý ve svém VirtualHost. Potřebuji nastavit SFTP přístup externích uživatelů tak, aby si mohly do stránek nahrát vlastní soubory, ale nemohli ovlivnit jiné domény (jen tu svoji). Bohužel nějak mě uniká jak toho docílím. Adresáře mám:

/var/www/domena1_cz/www/
/var/www/domena2_cz/www/
/var/www/domena3_eu/www/
....

Každá doména bude mít vlastní chroot (dále příklady pro první doménu) /var/www/domena1_cz/, který vlastní root:root 775 (včetně všech rodičů).
Virtuální adresáře Apache pak odkazují na složky /var/www/domena1_cz/www/. Tuto složku vlastní www-data:www-data 775.
Mám vytvořeného uživatele sftp_uzivatel který patří do skupiny sftp_domena1_cz. Skupinu chci využít pro případ, že by bylo potřeba více uživatelů s právy zápisu ve složce.
A teď jak udělat, nebo co udělat, aby uživatelé ze skupiny sftp_domena1_cz mohli zapisovat, mazat a měnit soubory v /var/www/domena1_cz/www/ která patří www-data.
A dále když se podaří zápis, jak automaticky nastavit novému souboru stejná práva jako složce /var/www/domena1_cz/www/, tedy www-data:www-data 775. Je to z důvodu, aby nebyl problém ve Wordpressu.
ACL se mi nechce používat, ale určitě tu je někdo, kdo již tento problém řešil a vyřešil.
Děkuji za pomoc.


RDa

  • *****
  • 2 465
    • Zobrazit profil
    • E-mail
Imho SFTP bezi v ssh a to ma prava jako prihlaseny user, takze ti zbyva takove bleh reseni, ze si ty webovy slozky namountujes po jedny s overridnutim usera.

Muzes to resit pres fuse:bindfs, nebo sambu a jeji konfigurak. Jednu dobu jsem preferoval tu sambu, protoze skrze openvpn slo pak pohodlne a bezpecne nasdilet hostingovy uloziste.

  • skupina pro nově vytvářené soubory - tj. nastavím adresáři aby se skupina dědila pro nově zakládané soubory a adresáře
Kód: [Vybrat]
chmod g+s www

  • nevím jak SFTP ale VSFTPD to co chceš umí, teď sem si to pokusně nastavil
Kód: [Vybrat]
ftpd_banner=Turris_at_home

#local_root=/srv/vsftpd/$USER
local_root=/srv/vsftpd/$USER/www
user_sub_token=$USER

userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.users

# chroot_local_user=YES - tj. všichni jsou v chrootu kromě seznamu z chroot_list_file
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.users
allow_writeable_chroot=YES

background=YES
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
#local_umask=022  # hodnota se určí  777 - local_umask ( 022 ) => chgrp 755
local_umask=002    # => nastav chgrp 775
check_shell=NO
session_support=NO
    (neřeším nastavení TLS/SSL)

« Poslední změna: 13. 01. 2022, 21:27:23 od drobek1 »

Děkuji, zítra se podívám na obě metody.

Každá doména bude mít vlastní chroot (dále příklady pro první doménu) /var/www/domena1_cz/, který vlastní root:root 775 (včetně všech rodičů).
Virtuální adresáře Apache pak odkazují na složky /var/www/domena1_cz/www/. Tuto složku vlastní www-data:www-data 775.

Jak dlouho chcete cekat, nez ten server nekdo hackne? Tohle neni multiuzivatelsky bezpecne ani na prvni pohled.


Každá doména bude mít vlastní chroot (dále příklady pro první doménu) /var/www/domena1_cz/, který vlastní root:root 775 (včetně všech rodičů).
Virtuální adresáře Apache pak odkazují na složky /var/www/domena1_cz/www/. Tuto složku vlastní www-data:www-data 775.

Jak dlouho chcete cekat, nez ten server nekdo hackne? Tohle neni multiuzivatelsky bezpecne ani na prvni pohled.

jj, tohle je skvělé, každá aplikace může číst soubory té druhé, stačí znát doménu/cestu, to znamená, že si může přečíst vše vč. hesel do databáze a potají jen doufám, že php server neběží také pod uživatelem www-data, to by si mohli i navzájem zapisovat :). Takhle přesně to měl před 15 lety banán, než ho hackli a Radovan se ještě kasal, jací bezpečnostní experti mu s tím pomáhali.

Tohle opravdu není dobrý nápad.

Správné řešení je mít uživatele pro každý účet, nevázej to na doménu, stejně tak název domény by se neměl objevit v názvu účtu, protože např. délka domény může být delší než je povolena délka uživatelského jména na linuxu a jiné špeky, je tedy vhodné název účtu generovat. PHP proces by měl být uzavřený v chrootu, neměl by vidět nic víc než svoji složku, veřejně viditelné věci jako /etc/passwd, /etc/hosts a jiné bys měl generovat pro něj extra, aby neviděl tvoji infrastrukturu nebo jiné uživatele. Uživatelsky přívětivější verze chrootu je docker či containery obecně.

Jak dlouho chcete cekat, nez ten server nekdo hackne? Tohle neni multiuzivatelsky bezpecne ani na prvni pohled.

A můžete mi poradit jak to udělat? S technologií VPS se seznamuji a učím, a žádný učený z nebe nespadl. Proto tedy prosím, poraďte mi jak to udělat multiuživatelsky bezpečné, případně odkaz na článek kde se to dozvím. Děkuji.
Jinak se o ty stránky (domény) budu starat já (aktualizace, nastavení, atd), ale obsah si bude dávat majitel sám (články, fotky, pdf dokumenty pro členy na stažení).
Počítám, že všude pojede Wordpress.
VPS mám u contabo v DE a jede tam Ubuntu 20.04.3 LTS. Dále Apache, MariaDB, PHP 8.0 (FPM).
Zatím co jsem pochytil a vyzkoušel, tak u SFTP:
  • chroot adresář a jeho rodiče musí mít práva root:root a přístup 755
  • adresář kde bude Wordpress musí mít práva www-data:www-data 775
  • pokud tam zapíše obrázek uživatel SFTP tak ten bude mít práva SFTP uživatele, což se vylučuje s předchozím bodem. Ale to by mohl vyřešit příkaz chmod g+s www který dá obrázku práva skupiny www-data
V předchozí odpovědi jsem dostal návrh na vsFTPd. Ale o SFTP píšou, že je bezpečnější, na druhou stranu se mnohem hůře nastavuje. Pokud to tedy přes SFTP nevyřeším, zkusím to vsFTPd.
A teď babo raď  ;D

Vilith

  • *****
  • 660
    • Zobrazit profil
Nainstaluj si https://www.ispconfig.org/ podle návodu https://www.ispconfig.org/documentation/ a tam se potom podívej jak se to dělá
Nebo to jen používej