WebDAV pro adresáře /home/$USER

WebDAV pro adresáře /home/$USER
« kdy: 14. 12. 2014, 02:36:24 »
Na abclinuxu se zatim muj problem vyresit nepodarilo, tak to zkusim tady.

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 WebDAVu nechci. Rad bych pouzil "cisty Apache", nebo jiny webserver.

Mam uzivatele user1 a user2 (v realnu jich je vic). Uzivatele jsou ve skupine www-data (pod ni jede Apache):
Kód: [Vybrat]
$ 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 se zepta 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/WEBDAV nechci. Idealne mit na http://data.example.net/ rovnou svuj /home/$user. Jde to nejak? Mne to porad nejde nastavit :-(

Muj konfigurak pro Apache:
Kód: [Vybrat]
# cat /etc/apache2/sites-available/data-example-net
<VirtualHost *:80>
DocumentRoot /var/www
ErrorLog /var/log/apache2/error_data.log
LogLevel error
CustomLog /var/log/apache2/access_data.log combined
Options Indexes FollowSymLinks
ServerSignature off

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

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

<IfModule mod_userdir.c>
UserDir /home/*/
UserDir disabled root
UserDir enabled user1 user2
DAVLockDB /var/lib/apache2_DAVLockDB

<Directory /home/*>
Dav On

AuthType Basic
AuthName "WebDAV"
AuthBasicProvider external
AuthExternal pwauth               
Require valid-user

Order allow,deny
allow from all
AllowOverride FileInfo AuthConfig Limit Indexes
DirectoryIndex disabled
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
</Directory>
<Location />
AuthType Basic
AuthName "WebDAV"
AuthBasicProvider external
AuthExternal pwauth
Require valid-user
</Location>
</IfModule>

RewriteEngine On
RewriteRule ^/(.*) /home/%{LA-U:REMOTE_USER}/$1
</VirtualHost>

A pro nginx:
Kód: [Vybrat]
# 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

Nasel jsem, ze by snad melo jit u nginx porovnavat jmeno aktualne prihlaseneho uzivatele:
Kód: [Vybrat]
  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?

U Apache i nginx mam stejny problem. Jakmile se prihlasi jeden uzivatel, muze pristupovat do home adresaru vsech ostatnich uzivatelu. Urcite to bude kvuli tomu, ze uzivatel www-data (pod nim bezi webserver) je ve skupinach vsech uzivatelu.
Da se to nejak resit?

Pokud by mel nekdo cas a naladu to zkusit, tak tady je testovaci minimalni instalace 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". Je tam pouze Apache.

Neradte mi prosim jiny protokol, potrebuji webdav.
EOF
« Poslední změna: 14. 12. 2014, 21:02:16 od Petr Krčmář »
"Kdo v zájmu bezpečí obětuje část své svobody, v konečném důsledku přijde o svobodu i svou bezpečnost."