Portál AbcLinuxu, 4. června 2024 08:47


Dotaz: Apache: WebDAV pro uzivatele /home/$user

10.12.2014 00:58 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Apache: WebDAV pro uzivatele /home/$user
Přečteno: 958×
Odpovědět | Admin

Ahoj,
na serveru mam Ubuntu 12.04 a potrebuju udelat pro uzivatele WebDAV. Potrebuju mit moznost pouzivat vestaveneho klienta ve Windows, jinak pouzivam SFTP, ale ten Win neumi.

OwnCloud a jeho PHP implementaci WeDAVu nechci. Rad byh pouzil "cisty Apache", nebo jiny webserver.

Muj aktualni konfigurak virtualhostu:

# cat /etc/apache2/sites-available/data-example-net 
<VirtualHost *:80>
	ServerName data.example.net
	Redirect permanent / https://data.example.net/
	ErrorLog /var/log/apache2/error_data-example-net.log
	LogLevel error
	CustomLog /var/log/apache2/access_data-example-net.log combined
</VirtualHost>
<VirtualHost *:443>
	ServerName data.example.net
	DocumentRoot /home
	ErrorLog /var/log/apache2/error_data-example-net.log
	LogLevel error
	CustomLog /var/log/apache2/access_data-example-net.log combined
	Options Indexes FollowSymLinks
	ServerSignature off

	#disable PHP in all sub-directories
	RemoveHandler .php .phtml .php3
	RemoveType .php .phtml .php3
	php_flag engine off

	Options +Indexes
	IndexOptions -IconsAreLinks NameWidth=* FancyIndexing FoldersFirst 
	IndexOrderDefault Ascending Name

	SSLEngine on
	SSLCertificateFile /etc/ssl/certs/data.example.net.crt
	SSLCertificateKeyFile /etc/ssl/private/data.example.net.key
	SSLProtocol all -SSLv2 -SSLv3
	SSLHonorCipherOrder On
	SSLCipherSuite EECDH+AES:EDH+AES:-SHA1:EECDH+RC4:EDH+RC4:RC4-SHA:EECDH+AES256:EDH+AES256:AES256-SHA:!aNULL:!eNULL:!EXP:!LOW:!MD5

	<IfModule mod_authnz_external.c>
		AddExternalAuth pwauth /usr/sbin/pwauth
		SetExternalAuthMethod pwauth pipe
	</IfModule>

	<Location "/">		
		SSLRequireSSL #allow only HTTPS, not HTTP		
		SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128 #allows export browsers to upgrade to stronger encryption
		Dav On
		Order allow,deny
		allow from all
		AuthType Basic
		AuthName "WebDAV data.example.net"
		AuthBasicProvider external
		AuthExternal pwauth
		Require valid-user
	</Location>
</VirtualHost>

Mam uzivatele user1 a user2 (v realnu jich je vic). Uzivatele jsou ve skupine www-data (pod ni jede Apache):

$ ls -lh /home/
celkem 36K
drwxrwx--- 77 user1   www-data  12K pro  6 02:00 user1
drwxrwx--- 29 user2   www-data 4,0K lis 26 20:54 user2
...
$

Adresare uzivatelu (rekurzivne) maji prava 770 (drwxrwx---) a soubory 660 (-rw-rw----). V /etc/login.defs mam nastavene UMASK 007, coz odpovida prave d770 a f660.

Pokud vlezu na adresu http://data.example.net/, prohlizec me presmeruje na https verzi a zepta se na heslo uzivatele. Funguje prihlasovani s overovanim pres PAM.

A ted nastava problem - po prihlaseni pod libovolnym povolenym uzivatelem na http://data.example.net/ vidim jmena vsech uzivatelu (to mi nevadi), ale muzu pristupovat k datum vsech uzivatelu - to mi vadi.

Muze mi nekdo poradit, jak dovolit uzivateli lezt pouze do sveho /home/$user? Zavirat je do /home/$user/neco nechci. Idealne mit na http://data.example.net/ rovnou svuj /home/$user. Jde to nejak? Mne to proad nejde nastavit :-(

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

10.12.2014 01:16 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nastavení apache v pohodě. Problém je klient ve windows.
10.12.2014 01:30 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user

Win klient neni problem. Pripojeni z nej se chova uplne stejne jako z Google Chrome a Firefoxu v Linuxu.

Vzdy vidim na https://data.example.net/ seznam vsech uzivatelskych jmen a mohu pod libovolnym uzivatelelm prochazet home adresare vsech ostatnich uziatelu.

Ja potrebuju neco jako:

<Location "/">
	OBSAH_ADRESARE (DocumentRoot) = /home/jmenoAktualnePrihlasenehoUzivatele/		
	SSLRequireSSL #allow only HTTPS, not HTTP		
	SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128 #allows export browsers to upgrade to stronger encryption
	Dav On
	Order allow,deny
	allow from all
	AuthType Basic
	AuthName "WebDAV data.example.net"
	AuthBasicProvider external
	AuthExternal pwauth
	Require valid-user
</Location>
jenom nevim, jak to techniky udelat. Zkousel jsem mod_userdir, ale nefungovalo to podle mich predstav (asi jsem ho spatne nastavil).

10.12.2014 01:58 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Trochu jsem si pohral s mod_userdir a uz to skoro funguje! Aktualni konfigurak:
# cat /etc/apache2/sites-available/data-example-net 
<VirtualHost *:80>
	ServerName data.example.net
	Redirect permanent / https://data.example.net/
	ErrorLog /var/log/apache2/error_data-example-net.log
	LogLevel error
	CustomLog /var/log/apache2/access_data-example-net.log combined
</VirtualHost>
<VirtualHost *:443>
	ServerName data.example.net
	DocumentRoot /home
	ErrorLog /var/log/apache2/error_data-example-net.log
	LogLevel error
	CustomLog /var/log/apache2/access_data-example-net.log combined
	Options Indexes FollowSymLinks
	ServerSignature off

	#disable PHP in all sub-directories
	RemoveHandler .php .phtml .php3
	RemoveType .php .phtml .php3
	php_flag engine off

	Options +Indexes
	IndexOptions -IconsAreLinks NameWidth=* FancyIndexing FoldersFirst 
	IndexOrderDefault Ascending Name

	SSLEngine on
	SSLCertificateFile /etc/ssl/certs/data.example.net.crt
	SSLCertificateKeyFile /etc/ssl/private/data.example.net.key
	SSLProtocol all -SSLv2 -SSLv3
	SSLHonorCipherOrder On
	SSLCipherSuite EECDH+AES:EDH+AES:-SHA1:EECDH+RC4:EDH+RC4:RC4-SHA:EECDH+AES256:EDH+AES256:AES256-SHA:!aNULL:!eNULL:!EXP:!LOW:!MD5

	<IfModule mod_authnz_external.c>
		AddExternalAuth pwauth /usr/sbin/pwauth
		SetExternalAuthMethod pwauth pipe
	</IfModule>

	<IfModule mod_userdir.c>
		UserDir /home/*/
		UserDir disabled
		UserDir enabled user1 user2

		<Directory /home/*>
			SSLRequireSSL
			SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
			Dav On

			AuthType Basic
			AuthName "WebDAV data.example.net"
			AuthBasicProvider external
			AuthExternal pwauth		             
			Require valid-user

			Order allow,deny
			allow from all
			AllowOverride FileInfo AuthConfig Limit Indexes
			Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
		</Directory>
	</IfModule>
</VirtualHost>
Aktualne to ma jedinou vadu, uzivatel musi pristupovat pres https://data.example.net/uzivatelskeJmeno/. Da se to nejak namapovat primo na https://data.example.net/? mod_rewrite asi pouzit nepujde.
Jedine udelat AliasMatch z / na /home/*/, ale nevim jak to zapsat.
10.12.2014 09:55 Karlos
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
A musí být uživatelé ve skupině www-data ? Kdyby nebyli, tak apache bude mít přístup podle skupiny a useři jen ke svému.
10.12.2014 13:01 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user

Jak presne to myslis?

Aktualne ma kazdy uzivatel svoji skupinu stejneho jmena:
Uzivatel Skupina
www-data www-data
user1    user1
user2    user2

Takze myslis pridat uzivatele www-data do skupiny user1 a user2 a home adresare pak mit pod vlastni uzivatelskou skupinou?

# adduser www-data user1
# adduser www-data user2
$ ls -lh /home/
celkem 36K
drwxrwx--- 77 user1   user1  12K pro  6 02:00 user1
drwxrwx--- 29 user2   user2 4,0K lis 26 20:54 user2
...
$

10.12.2014 13:57 Karlos
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Já myslel dát těm home adresářům skupinu www-data. Ve skupině www-data by nebyli uživatelé, ale jen user www-data. Ten (Apache) pak bude mít přístup ke vše home adr., ale uživatelé jen do svého. Jestli to teda nevadí ničemu dalšímu. Tvoje řešení asi taky bude fungovat, ale musíš myslet na to, když vytvoříš nového usera, aby si www-data přidal do jeho skupiny.
10.12.2014 15:59 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user

Ja mam umask 022. Adresar /home/userX ma vlastnika userX:www-data. Rekurzivne v nem nastavim vsem souborum a adresarum taky skupinu www-data.
Problem je, pokud uzivatel (a to se deje porad) nakpiruje data pres sftp/sambu. Pak maji nove vytvorene soubory sice prava podle umask 022, ale vlastnika i skupinu sveho userX.

Jak presne to myslis nastavit?

10.12.2014 16:34 Sten
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Nastavte adresářům setgid (chmod g+s)
10.12.2014 17:01 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Jenom pro /home/user, nebo rekurzivně? To by pak neřešilo nově vytvořené soubory.

Já jsem naivně doufal, že když mám uživatele user1 který má práva na /home/user1 user1:user1 a přidal jsem uživatele www-data, pod kterým běží Apache do skupiny user1 (#adduser www-data user1), tak by měl mít apache práva k uživatelským souborům.

Je setgid nutné? A na co přesně ho aplikovat?
10.12.2014 17:25 Sten
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
setgid dělá to, že všechny nové soubory v daném adresáři budou vytvořeny se skupinou podle toho adresáře, ne podle aktivní skupiny uživatele, a u adresářů to navíc nastaví setgid. Tedy musel by se nastavit rekurzivně na všechny adresáře:
find /home/$user -type d | xargs chmod g+s
Já jsem naivně doufal, že když mám uživatele user1 který má práva na /home/user1 user1:user1 a přidal jsem uživatele www-data, pod kterým běží Apache do skupiny user1 (#adduser www-data user1), tak by měl mít apache práva k uživatelským souborům.
Tohle je druhá možnost, jak to řešit, Apache pak bude mít stejná práva, jako příslušná skupina. Skupiny se přidělují ale jen při startu sezení (pomocí su, sudo, přihlášením ap.), takže po změně skupin je potřeba Apache restartovat, aby použil nové nastavení.

Ještě existuje třetí možnost, a to je ACL:
setfacl -R -m u:www-data rwx /home/$user # Nastaví ACL pro všechny existující soubory
setfacl -R -d -m u:www-data rwx /home/$user # Nastaví výchozí ACL pro nové soubory
10.12.2014 18:07 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user

Tak jsem pridal apache uzivatele (www-data) do skupin vsech uzivatelu a po restartu apachce uz to jede :-)

Ale zasadni problem trva porad:
kdyz ve firefoxu vlezu na http://data.example.com a prihlasim se pod nejakym uzivatelem, tak vidim ve vypisu obsah slozky /home a muzu pod libovolnym uzivatelum lezt k datum vsech ostatnich.

Jak se to da resit?

root@eu:/# ls -lh /home/
celkem 36K
drwxrwx--- 77 user1   user1   12K pro  6 02:00  user1
drwxrwx--- 29 user2   user2    4,0K lis 26 20:54 user2
A apache je ve skupine user1 a user2.

10.12.2014 18:57 Sten
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Přes ten mod_rewrite níže
11.12.2014 00:31 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Příloha:

V /home/.htaccess mam:

RewriteEngine On
RewriteRule ^/(.*)$ /%{LA-U:REMOTE_USER}/$1 [END]

Pokud vlezu z Chromu na http://data.example.net presmeruje me to na https://data.example.net (to je ok), ale misto prihlasovani to hned hodi:

Forbidden
You don't have permission to access / on this server.
to uz neni ok :-(

Pokud lezu primo na http://data.example.net/user1 dostavam taky forbidden (You don't have permission to access /user1 on this server.)

Pokud mam i prazdny soubor /home/.htaccess tak mi prohlizec vzdy ukazuje forbidden. Pokud je soubor prazdny porad chyba. Jakmile htaccess smazu, zas to zacne fungovat. Neni to divne?

Rad udelam kompromis - uzivatel si bude pripojovat svuj disk pres adresu https://data.example.net/LOGIN ale nesmi mit moznost vlezt do homu jineho uzivatele. Takhle si pripojim https://data.example.net/user1, dam o uroven vys a mohu se hrabat vsem uzivatelum v home diru.
Prece musi existovat nejake jednoduche reseni...

A jeste jedna vec ohledne presmerovani na https verzi. V konfigu virtualhostu mam:

# cat /etc/apache2/sites-available/data-example-net 
<VirtualHost *:80>
	ServerName data.example.net
	Redirect permanent / https://data.example.net/
</VirtualHost>
<VirtualHost *:443>
	ServerName data.example.net
...
ale kdyz ve Windows i v linuxu chci pres webdav klienta pripojit disk, nejde to. Widle nerikaji nic, Mint 16 si stezuje na presunutou adresu (viz obrazek). Webovy prohlizec (Firefox, Chrome) se sam presmeruje.
Jde to nejak resit?

11.12.2014 01:15 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user

Tak mam asi funkcni reseni opravneni:

Primo do definice virtualhostu se prida:

RewriteEngine On
RewriteCond %{LA-U:REMOTE_USER} !^$
RewriteRule /[^/]*/(.*) /~%{LA-U:REMOTE_USER}/$1 [NS]

Uzivatel na https://data.example.net/ stale vidi vypis vsech uzivatelskych jmen. Ale kdyz vleze do homu libovolneho uzivatele, vzdy se mu zobrazuji jeho vlastni soubory (jeho vlastni home).
"Vylepsit" by se to dalo odebranim prava cteni pro ostatni na / home (chmod o-r /home). Ale na bezne ssh pouzivani je to pak na h..... (nemuzu udelat ls /home)

Sice to funguje, ale je to imho dost prasarna. Navic resit zabezpeceni rewritem se mi take moc nelibi.

11.12.2014 01:28 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
A nebo by si musel kazdy uzivatel spustit svuj vlastni Nginx na nejakem >1024 portu.

Ale to je imho neefektivni kompikovana blbost. A pro tisice uzivatelu je to uz uplna blbost. Mit 1000 bezicich webserveru neni zrovna idealni...
10.12.2014 15:25 Sten
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
RewriteRule ^/(.*)$ /%{LA-U:REMOTE_USER}/$1 [END]
10.12.2014 18:00 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user

Muzes mi to prosim vysvetlit?

Kdyz dam do /home/.htaccess:

RewriteRule ^/(.*)$ /%{LA-U:REMOTE_USER}/$1 [END]

Tak dostavam v prohlizci vzdy Forbidden.

Povolene to snad je:

<Directory /home/*>
     AllowOverride all
     ...
</Directory>

10.12.2014 18:06 Sten
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Možná tam chybí RewriteEngine On?
10.12.2014 20:01 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Omlouvám se za poměrně zavádějící příspěvek. Psal jsem ho z mobilu, těsně před spaním, tak mi poněkud unikla podstata dotazu. Chtěl jsem tím jen říct, že WebDAV je pěkná věc pro Android, Linux, nebo BlackBerry, ale u MS Windows je s tím paradoxně jen kříž, protože každá verze používá trochu jiného klienta viz zdejší blogpost WebDAV a Windows Vista. I když nevylučuji, že u MS Windows 8.1 už to problém být nemusí.
pavlix avatar 10.12.2014 20:37 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Nechtěl by někdo z vás dvou na tohle vyrobit nějaký článek nebo víc? Já osobně bych si v nějaké přehledné formě docela počet.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
11.12.2014 00:15 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Jake dva myslis? Me?

Ja kazdpopadne az mi bude vse fungovat, tak to sepisu na blog.
pavlix avatar 11.12.2014 08:45 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Jenom návrh. Koukal jsem, že ábíčko je trochu v nedostatku, ale jsem si až moc dobře vědom, kolik je s tím práce.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
11.12.2014 13:40 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Ja nemam problem napsat clanek. Na blogu to bude 100%, clanek by v pripade zajmu mohl take byt.

Nejdriv by to ale muselo fungovat. Porad nejde opravneni. Jeden uzivatel se prihlasi a pak se muze hrabat vsem ostatnim uzivatelum v datech. At hledam sebevic, porad se mi nedari problem vyresit. Ale nejak to prece musi jit, webdav je prece realtivne dost stary a pouzivany protokol...
11.12.2014 14:27 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Starý.. ale hloupý. Takže to musíš udělat tak, aby se každý uživatel dostal pouze ke svému chlívku.
11.12.2014 14:34 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Presne o to mi od zacatku jde :-D

Jen se mi to nedari zrealizovat.

Nejake how-to by nebylo?
11.12.2014 22:03 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Na tohle jsi narazil? Je to tedy rovněž založeno na tom mod_rewrite. Chtěl jsem to nejprve otestovat u sebe, abych k tomu mohl něco říct, ale zasekl jsem se na problému, že mi server odmítal uživatele autorizovat, ale už jsem neměl čas to dál řešit.
11.12.2014 22:40 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Tak jsem to odzkoušel - můžeš si to prubnout sám. Nechám to chvilku běžet.
root@147.32.97.216:~# cat /etc/apache2/conf-available/dav.conf 
RewriteEngine On

<Directory /srv/dav>
        AuthType Basic
        AuthName "WebDAV"
        AuthBasicProvider file
        AuthUserFile /etc/dav/htpasswd.setup
        Require valid-user
</Directory>

<Location /webdav>
        AuthType Basic
        AuthName "WebDAV"
        AuthBasicProvider file
        AuthUserFile /etc/dav/htpasswd.setup
        Require valid-user
</Location>

RewriteRule ^/webdav/(.*) /srv/dav/%{LA-U:REMOTE_USER}/$1
Testovací uživatelé jsou dva - heslo mají oba stejné "ocas" http://147.32.87.216. Zkus si vlézt do adresáře webdav.
12.12.2014 00:10 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
A jaka jsou uzivatelska jmena tech uzivatelu? Jsou to realni systemovi uzivatele, nebo pouze virtualni jen v htpasswd?

Zkousel jsi to aplikovat i na /home?

Kazdopadne diky, vyzkousim.
12.12.2014 00:43 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Nastavení pouze v htpasswd. Není žádný důvod aby byli v systému. Ty jejich adresáře si totiž můžeš namountovat přes nfs, ncp nebo cifs z úplně jiného systému. A pak autorizovat vůči němu.
12.12.2014 00:46 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Ale jaka jsou uzivatelska jmena? Psal jsi pouze jejich hesla.
12.12.2014 07:24 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Sákryš. Máš pravdu. Nějak mi vypadli z textu. Jmenují se jan a dan.
12.12.2014 07:34 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Jo a ještě drobnost když jdeš na http://147.32.87.216 tak adresář webdav vůbec nevidíš. Zkus ale http://147.32.87.216/webdav.
12.12.2014 02:11 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user

Tak jsem to zkousel a porad ten samy problem - jakmile se uzivatel prihlasi muze lezt ostatnim uzivatelum do home adresare :-(

Pokud bys mel chvili, mohl bys na to prosim kouknout?
Tady je testovaci minimalni isntalace debianu se dvema uzivateli "user1" a "user2", kde je ta chyba videt: https://mega.co.nz/#!DMVlWSCT!n7Hw0cJQgjzTmYNub97fb9luX_6kavR3LGf1CSWPOiA 525MB (OVA - vytvorene ve VirtualBoxu)
root i oba uzivatele maji heslo "pokus".

12.12.2014 09:54 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
No tak především nechápu, proč nastavuješ DocumentRoot na home, když stejně budeš provádět rewrite pro webdav podle uživatelů. To pravidlo pro rewrite bych umístil až nakonec. Sice možná na pořadí zpracování instrukcí nezáleží, ale přeci jen.. Taky bych asi vyhodil ty věci kolem userdir. Pozor na použití hvězdičky v direktivě Directory a jinde. Vyvaroval bych se toho. Taky nezapomeň, že aby ti to fungovalo, musí mít uživatel www-data, pod kterým běží apache k těm adresářům přístup. Uživatelé pro webdav vůbec nemusí být totožní s těmi co mají přístup do systému. Ba řekl bych, že je to spíš nežádoucí, takže bych to spíše udělal tak, aby každý uživatel měl pro webdav v rámci svého chlíva vyhrazený podadresář webdav, do kterého bude mít přístup apache.

Pro začátek raději použij a modifikuj tu konfiguraci co jsem tady uvedl o kousek výš.
12.12.2014 11:24 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Tak jsem to odzkoušel ještě s nastavením "Dav On" a z logu jsem zjistil, že to při přístupu přes webdav nefuguje jak má. Několikrát se apache pokusí sáhnout do cílové lokace, aniž by vzal v potaz proměnnou REMOTE_USER a když ji konečně vezme na vědomí, tak zase uživatele neověří. A tak si to háže jako horký brambor. U browseru to nakonec dobublá kam má, ale při přístupu přes DAV ne. Něco bude zřejmě ještě špatně.
14.12.2014 01:03 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user

Protoze jsem se na Apachi zasekl, zkusil jsem nginx:

# cat /etc/nginx/sites-enabled/data 
server {
	listen *:80;
	location / {
		auth_pam "Restricted";
		auth_pam_service_name "nginx";
	}
	location ~ ^/(.*)$ {
		alias /home/$remote_user/$1;
		dav_methods PUT DELETE MKCOL COPY MOVE;
		dav_access user:rw;
		dav_ext_methods PROPFIND OPTIONS;		
		create_full_put_path on;
	}
	location ~ ^/home/(.*)$ {
		alias /home/$1;
	}
}

# cat /etc/pam.d/nginx 
@include    common-auth
@include    common-account

Pripojeni na WebDAV funguje vyborne, ale mam ten samy problem - uzivatel vidi v / jmena home adresaru vsech uzivatelu a muzu pristupovat k datum vsech uzivatelu.

Nasel jsem, ze by snad melo jit u nginx porovnavat jmeno aktualne prihlaseneho uzivatele:

  location ~ /(?<username>([^/]*))/ { # capture and store in the username variable
    if ($remote_user = $username ) { 
      add_header 'matched' 'true $username'; 
      break;
    }
  }

S nginx jsem nikdy nepracoval, proto nevim, jak to zapsat do configu. Slo by nejak poznat, kdyz je prihlaseny user1 a vleze do user2 aby ho to nepustilo? Umi to nekdo?

14.12.2014 01:11 Sten
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
nginx neumí OPTIONS a PROPFIND. Nevím, jestli to stále platí, ale ve Windows a KDE bez toho nešlo WebDAV používat.
14.12.2014 01:31 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Prave jsem se zkousel pripojit z Windows 7 k nginx s vyse uvedenym nastavenim a behalo to bez problemu.
15.12.2014 11:53 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user

Takže řekl bych, že mám řešení, jaké by ti mohlo vyhovovat. Má ovšem několik háčků, na které je nutné dát pozor. Takže nejprve - jak vypadá konfigurace pro apache:

root@stroj:~# cat /etc/apache2/conf-available/dav.conf 
RewriteEngine On

<Directory /srv/dav/*>
         DAV On
</Directory>

<Location /webdav>
        AuthType Basic
        AuthName "WebDAV"
        AuthBasicProvider file
        AuthUserFile /etc/dav/htpasswd.setup
        Require valid-user
</Location>

RewriteRule ^/webdav/(.*)$ /srv/dav/%{LA-U:REMOTE_USER}/$1

Na rozdíl od původního konfiguračního souboru, který je uveden o kousek výše, je k těmto adresářům možný přístup pouze přes WebDAV. Pravidla, která je nutné dodržet aby to fungovalo:

  • Skupina www-data musí mít právo do každého uživatelského adresáře v /srv/dav právo zapisovat - bez toho by nebylo možné vůbec přes WebDAV něco zapsat.
  • Každý uživatelský adresář v /srv/dav musí obsahovat adresář .DAV do kterého má skupina www-data právo zapisovat. Bez toho nebude možné adresář uživatele namountovat.
  • Je-li ve /srv/dav uživatelský adresář který již obsahuje nějaké soubory a adresáře pak musí mít nastavenou alespoň skupinu www-data aby mohli její členové soubor přečíst, jinak do namountovaného adresáře nebude mít apache právo zapisovat!

Jak to funguje, si můžete aktuálně vyzkoušet na mém testovacím serveru - chvíli to tam nechám.. Uživatelé jan, dan a man mají stejné heslo - ocas.

mount -t davfs http://147.32.87.216/webdav temp -o username=jan
15.12.2014 12:52 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Jinak vypublikování obsahu adresářů lze realizovat poměrně jednoduše symlinkem na adresář /srv/dav umístěným do kořene apache - viz http://147.32.87.216/pub
Josef Kufner avatar 12.12.2014 17:14 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Chtěl jsem tím jen říct, že WebDAV je pěkná věc pro Android, ...
Máš nějakého oblíbeného WebDAV klienta pro Android?
Hello world ! Segmentation fault (core dumped)
12.12.2014 21:56 petr_fm
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Ja pouzivam na vsechno EsFile explorer, je bezva.
12.12.2014 22:41 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Já taky.
Josef Kufner avatar 13.12.2014 00:49 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Hm, to nevypadá moc opensourcovatě :-(
Hello world ! Segmentation fault (core dumped)
15.12.2014 04:08 ByCzech
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Odpovědět | | Sbalit | Link | Blokovat | Admin
Není náhodou problém v tom, že když přistupuje webdav klient na data uživatele, tak nepřistupuje jako daný uživatel, ale jako uživatel www-data, tudíž má přístup všude, kde má přístup uživatel www-data.

Řešení je podle mě suexec nebo mpm-itk.
15.12.2014 07:30 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Apache: WebDAV pro uzivatele /home/$user
Ano, přesně tak to je.

Tvoje řešení večer zkusím.

Ještě mě napadlo mít pro každého uživatele v configu vlastní sekci Location a definovat jeho jméno přes require. Generovat by se to dalo skriptem.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.