क्या लिनक्स के लिए एक बहु-उपयोगकर्ता वेबदाव सर्वर उपलब्ध है?


9

मैं अपनी SMBA सेवा को पूरी तरह से विघटित करने के लिए देख रहा हूँ और इसे एक WebDav सेवा से प्रतिस्थापित कर रहा हूँ।

अब तक की सभी Google खोजों ने मुझे Apache / Webdav का उपयोग करने के लिए इशारा किया है। यह वह चीज है जिसकी मुझे आवश्यकता है लेकिन जहां तक ​​मैंने पढ़ा है इसके लिए अपाचे की मेरे उपयोगकर्ता की फाइलों तक पहुंच और बदतर होने की आवश्यकता है; यदि यह एक फ़ाइल बनाता है तो नई फ़ाइल Apache (उपयोगकर्ता नहीं) के स्वामित्व में होगी। ध्यान दें कि सही यूनिक्स स्वामित्व और अनुमतियों वाली फाइलें एक आवश्यकता है क्योंकि कुछ उपयोगकर्ताओं के पास सीधे एसएसएच पहुंच है।

इसलिए मैं बस मल्टी-यूजर्स के साथ अपाचे / वेबदाव काम को "सही ढंग से" करने के लिए एक रास्ता ढूंढ रहा हूं (जो कि फ़ाइल की सेवा करने का प्रयास करने से पहले उपयोगकर्ता में लॉग इन करने के लिए यूनिक्स उपयोगकर्ता को बदल सकता है ) या अपाचे के लिए एक पूर्ण विकल्प ढूंढ सकता है / WebDAV।

अब तक खोजों से कुछ भी नहीं निकला है।


जैसा कि webdav HTTP प्रोटोकॉल पर आधारित है, मैं कहूंगा कि यह HTTP सर्वर के रूप के अलावा मौजूदा नहीं है। और अगर आपको वह उत्पाद मिल जाता है जो वेबदव त्रेही पेश करता है, तो आमतौर पर उससे अधिक की पेशकश करेगा
किवी

ऐसा लगता है कि एमपीएम आईटीके के नवीनतम संस्करण में कुछ आशाजनक हो सकता है। mpm-itk.sesse.net इसके साथ मेरी एक कोशिश AssignUserIDExprहोगी और देखना होगा कि क्या लॉग इन उपयोगकर्ता स्वीकार करेगा। यह तब से नहीं हो सकता है जब AssignUserIDतक कि उपयोगकर्ता प्रमाणिकता से पहले किक नहीं करता है।
फिलिप कपलिंग

वहाँ की तरह स्टैंडअलोन WebDAV सर्वर हैं code.google.com/p/opendav या PyWebDAV तरह पुस्तकालयों कि अपाचे की आवश्यकता नहीं है।
Jan

@ भजन यह सबसे अच्छा जवाब हो सकता है। अपाचे पहले से ही सर्वर पर चल रहा है और वेबदाव साइट पर एक उपनिर्देशिका होनी चाहिए लेकिन मैं इसे एक प्रॉक्सी के रूप में सेट कर सकता हूं और एन्क्रिप्शन प्रदान करने के लिए अपाचे के एसएसएल का उपयोग कर सकता हूं।
फिलिप कपलिंग

जवाबों:


2

यदि आपके पास उपयोगकर्ता नाम और / या uid है, तो आप इसे nginx + lua + luarocks ljsyscall के साथ कर सकते हैं

डेबियन सिस्टम पर, इस रूप में कॉन्फ़िगर किया गया:

apt-get -y install nginx libnginx-mod-http-dav-ext libnginx-mod-http-lua luarocks
luarocks install ljsyscall

और nginx ने निम्न तरीके से कॉन्फ़िगर किया:

user  root;
worker_processes  1;

load_module modules/ngx_http_dav_ext_module.so;
load_module modules/ndk_http_module.so;
load_module modules/ngx_http_lua_module.so;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    sendfile        on;
    keepalive_timeout  65;
    gzip  on;

    server {
        listen      80;
        listen [::]:80;

        location / {
            rewrite ^ http://$host$request_uri?; # permanent;
        }
    }

    server {
        listen      443           ssl http2;
        listen [::]:443           ssl http2;

        ssl                       on;    
        # [ SSL Sections Omitted ]

        # Set the maximum size of uploads
        client_max_body_size 200m;

        # Default is 60, May need to be increased for very large uploads
        client_body_timeout 120s; 

        # other configs
        location /webdav/ {
            autoindex              on;
            alias                  /data/www/;
            client_body_temp_path  /data/client_temp;

            dav_methods PUT DELETE MKCOL COPY MOVE;
            dav_ext_methods PROPFIND OPTIONS;

            create_full_put_path   on;
            # Not sure if you want to tweak this
            # dav_access             group:rw  all:r;

            # Let's assume you have an auth subrequest that can set X-UID
            auth_request  /auth
            auth_request_set $auth_status $upstream_status;
            auth_request_set $saved_remote_user $upstream_http_REMOTE_USER;
            auth_request_set $saved_remote_uid $upstream_http_X_UID;

            # Per-Request Impersonation
            access_by_lua_block {
                # Boilerplate because ljsyscall doesn't have setfsuid implemented directly
                local syscall_api = require 'syscall'
                local ffi = require "ffi"
                local nr = require("syscall.linux.nr")
                local sys = nr.SYS
                local uint = ffi.typeof("unsigned int")
                local syscall_long = ffi.C.syscall -- returns long
                local function syscall(...) return tonumber(syscall_long(...)) end 
                local function setfsuid(id) return syscall(sys.setfsuid, uint(id)) end
                -- If you only have ngx.var.saved_remote_user, install luaposix and do this ...
                -- local pwd = require 'posix.pwd'
                -- local new_uid = pwd.getpwnam(ngx.saved_remote_user).pw_uid
                local new_uid = tonumber(ngx.var.saved_remote_uid)
                ngx.log(ngx.NOTICE, "[Impersonating User #" .. new_uid .. "]")
                local previous = setfsuid(new_uid)
                local actual = setfsuid(new_uid)
                if actual ~= new_uid then
                    ngx.log(ngx.CRIT, "Unable to impersonate users")
                    ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)
                end
            }
        }

        location = /auth {
            internal;
            proxy_pass              http://localhost:8080/auth;
            proxy_pass_request_body off;
            proxy_set_header        Content-Length "";
            proxy_set_header        X-Original-URI $request_uri;
            proxy_set_header        X-Original-Method $request_method;
        }
    }
}

यह नगनेक्स कार्यकर्ता द्वारा सेवित प्रत्येक अनुरोध पर सेटफसिड निष्पादित करेगा। दुर्भाग्य से, ऐसा लगता है कि वर्तमान में सही काम करने के लिए आपको रूट के रूप में nginx को चलाना होगा। मेरा मानना ​​है कि इसके लिए एक अलग उपयोगकर्ता के साथ काम करना संभव है, बशर्ते प्रक्रिया रूट के रूप में शुरू हुई, एक अलग उपयोगकर्ता के पास गिरा, CAP_SETUID संरक्षित (के लिए प्रलेखन देखें capsh) के साथ, और userनिर्देश nginx config फ़ाइल में अनुपस्थित है।

आपको संभावित रूप से समूह आईडी सेट करने की भी आवश्यकता हो सकती है।

Http://man7.org/linux/man-pages/man7/capsupport.7.html में "उपयोगकर्ता आईडी परिवर्तनों का प्रभाव देखें"


यह आशाजनक लग रहा है। मैं इसे देख लूँगा।
फिलिप कपलिंग

0

यह पढ़ने के लायक हो सकता है: एक अन्य इनपुट: कई उपयोगकर्ता फ़ोल्डर और एक साझा फ़ोल्डर http://hexeract.wordpress.com/2011/02/25/configure-a-webdav-enabled-webserver-for-multiple-user-folders -और-एक साझा-फ़ोल्डर /


यह आपके अन्य उत्तर की तरह ही समस्या है। कुछ उपयोगकर्ताओं के पास ssh पहुँच है। फ़ाइलें सही दी जानी चाहिए (अपने आप ही, वेब सर्वर की नहीं) यूनिक्स फाइल अनुमतियां और स्वामित्व (उपयोगकर्ता और समूह दोनों)।
फिलिप कौलिंग

0

मैंने वेबदव को स्थापित करने के लिए गाइड के रूप में इसका उपयोग किया: http://bernaerts.dyndns.org/linux/75-debian/62-debian-webdav-share

हां, अपाचे समूह है (डेबियन के तहत www-data) लेकिन आप उस समूह में उपयोगकर्ताओं को जोड़ सकते हैं, इसलिए मैंने एक उपयोगकर्ता जोड़ा। यह परीक्षण नहीं किया कि आप अन्य उपयोगकर्ताओं को क्यों नहीं जोड़ सकते हैं .... सिद्धांत में इस सेटअप का उपयोग करने वाला वेबदाव सर्वर अब मेरे और मेरे बेटों के स्थान पर 3 वर्ष (मेरे बेटे के काम के लिए 2 समान सर्वर) पर चलता है। डेबियन 6 कुछ महीनों से एलटीएस संस्करण (फरवरी 2016 तक) है।

बर्नैर्ट्स की तुलना में मैं अपाचे फ़ाइल में अनुकूलित किया गया: / etc / apache2 / sites-available / default यह कॉन्फ़िगरेशन का हिस्सा है।

Alias /webdav1 /data/webdav1

<Location /webdav1>
DAV on
Authtype Basic
Authname "webdav1"
AuthUserFile /var/www/web1/passwd1.dav
Require valid-user
</location>

तो मेरी फ़ाइलें अब www के अंतर्गत नहीं हैं, लेकिन / data / webdav1 (alias webdav1 के माध्यम से इसे छोटा रखने के लिए) प्रत्येक हार्ड डिस्क के लिए मैंने इस तरह का एक खंड बनाया है और webdav1 उस खंड में दूसरी हार्ड डिस्क के लिए webdav2 बन जाता है। हम इन सर्वरों में अधिकतम 10 हार्ड डिस्क का निर्माण कर सकते हैं, इसलिए उस कॉन्फ़िगरेशन फ़ाइल में इनमें से 10 अनुभाग। मैंने उपयोगकर्ता को www-data, davfs2 और davfs में जोड़ा, ताकि उपयोगकर्ता वेबदाव फ़ोल्डर (ओं) तक पहुंच सके। तो उपयोगकर्ता को लॉगिन करने की आवश्यकता है और उपयोगकर्ता नाम और पासवर्ड के लिए कहा जाएगा। Fstab में सभी webdav डेटा डिस्क को सूचीबद्ध किया गया है ताकि बढ़ते स्वचालित रूप से बढ़े। Fstab का वह हिस्सा:

/ dev / sda3 / data / webdav1 ext3, user, auto 0 0


1
अफसोस की बात यह है कि इस समस्या को हल नहीं करता है। इस सवाल का फोकस मल्टी यूजर था। इस समाधान के साथ नई फाइलें बनाई जाएंगी क्योंकि अपाचे उपयोगकर्ता लॉग इन उपयोगकर्ता नहीं होगा। अपाचे को कार्य करने के लिए सभी फ़ाइलों को उस समूह को पढ़ने / लिखने की अनुमति के साथ www-data समूह होना चाहिए। चूँकि प्रत्येक उपयोगकर्ता को उस समूह में रहना होगा, प्रत्येक उपयोगकर्ता को हर दूसरे उपयोगकर्ता की फ़ाइलों को पढ़ने / लिखने के लिए उपयोग करना होगा। यह समाधान बस कई उपयोगकर्ताओं के लिए नहीं जागता है।
फिलिप कूपलिंग

0

आप की कोशिश की है ownCloud ? अभी भी इसे स्वयं परीक्षण कर रहा है, लेकिन ऐसा लगता है कि यह आपकी आवश्यकताओं को पूरा करता है: वेब-आउट-ऑफ-द-बॉक्स काम करता है।


1
हां, मेरे पास खुद का एक उदाहरण है, लेकिन ऐसा नहीं है कि मैं वही देख रहा हूं, क्योंकि खुद का मालिक (अपाचे) सभी फाइलों का मालिक है।
फिलिप कपलिंग

0

एक लंबे समय के लिए खोज करने के बाद मैं सिर्फ एक नहीं खोज सका। कई बहु उपयोगकर्ता सर्वर हैं, लेकिन मुझे सिस्टम उपयोगकर्ता के रूप में निष्पादित नहीं किया गया।

तो मैंने खुद एक लिखा। यह केवल तभी तक परीक्षण किया जाता है, जब तक मैं स्वयं इसका परीक्षण कर सकता हूं। लेकिन इसके लायक क्या है, स्रोत कोड यहां है:

https://github.com/couling/WebDAV-Daemon


0

Hy,

मैं उसी चीज की तलाश में था और मैंने आखिरकार अपाचे 2 का उपयोग करके एक समाधान इकट्ठा किया। मैंने npm वेबडाव-सर्वर का उपयोग करके नोड समाधान की कोशिश की और पाया कि सभी ने अपाचे मॉड्यूल का उपयोग करते हुए अच्छी तरह से काम नहीं किया। फिर मैंने jDDAV के आधार पर एक npm dav-server की कोशिश की जो बेहतर कर सकता है और एक समाधान हो सकता है, लेकिन जैसा कि मुझे lousy 3G कनेक्शन से निपटना था, मैंने Apache को प्राथमिकता दी और कई उदाहरण स्क्रिप्ट के बारे में पता चला।

इसलिए यहां मैं अपना अनुभव साझा करता हूं।

http://helpcenter.epages.com/Doc/doc/apache2/README.multiple-instances

मैं वेबदाव उपयोगकर्ता प्रति एक उदाहरण चलाता हूं ... बहुत स्केलेबल नहीं है, लेकिन एक छोटी टीम में काम करने के लिए यह काफी अच्छा है।

MyUser को अपने उपयोगकर्ता के साथ बदलें।

उबुन्टु 14.04 पर

sh /usr/share/doc/apache2/examples/setup-instance myUser

इसलिए मैं एक अपाचे प्रक्रिया चलाता हूं क्योंकि उपयोगकर्ता myUser / etc / apache2-myUser / envars में परिभाषित किया गया है

export APACHE_RUN_USER=myUser
export APACHE_RUN_GROUP=myUser

Ports.conf संपादित करें

# If you proxy with nginx as I did better to limit to local interface
listen localhost:8080
# listen 8080

मैं ubuntu 14.04 पर PAM को प्राप्त नहीं कर सका, इसलिए मुझे मूल ntx के साथ https में इसे लपेटने के लिए मूल अधिकार के साथ छल करने की आवश्यकता है

htpasswd -c /etc/apache2/htpasswd myUser

फिर /etc/apache2-myUser/sites-available/000-default.conf

<VirtualHost *:8080>

DocumentRoot /var/www/html

Alias /${APACHE_RUN_USER} /home/${APACHE_RUN_USER}
<Directory /home/${APACHE_RUN_USER}>
    Require all granted
    Options +Indexes
</Directory>

<Location /${APACHE_RUN_USER}>
      DAV On
      AuthType Basic
      AuthName "Restricted Area"
      AuthUserFile /etc/apache2/htpasswd
      Require valid-user
</Location>

DavLockDB /home/${APACHE_RUN_USER}/.DavLock
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

तब nginx प्रॉक्सी में हेडर के साथ एक ट्रिक होती है डेस्टिनेशन पासिंग आइकन्स फोल्डर वेबडाव को ब्राउजर्स पर अच्छी तरह से डाउनग्रेड करता है

server {
listen 443 ssl http2;
server_name exemple.com;

location ~ ^/(myUser|icons)/ {

    proxy_pass http://dav-myUser;

#         auth_basic "Restricted Content";
#         auth_basic_user_file /etc/nginx/htpasswd;

#         proxy_set_header Authorization $http_authorization;

    proxy_pass_header  Authorization;
    proxy_pass_request_headers on;

    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;

    port_in_redirect off;

    # to avoid 502 Bad Gateway:
    # http://vanderwijk.info/Members/ivo/articles/ComplexSVNSetupFix
    set $destination $http_destination;

    if ($destination ~* ^https(.+)$) {
        set $destination http$1;
    }

    proxy_set_header Destination $destination;

    proxy_read_timeout     300;
    proxy_connect_timeout  5;

    # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
    proxy_http_version 1.1;

    # Remove the Connection header if the client sends it,
    # it could be "close" to close a keepalive connection
    proxy_set_header Connection "";
}

ssl on;
ssl_certificate /etc/letsencrypt/live/exemple.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemple.com/privkey.pem;

include /etc/letsencrypt/options-ssl-nginx.conf;

}

Nginx को प्रॉक्सी के रूप में उपयोग करने की कोई बाध्यता नहीं है, अपाचे बहुत अच्छी तरह से https कर सकता है, लेकिन जैसा कि मैंने प्रॉक्सी गंतव्य मुद्दे में टकराया था मुझे लगा कि यह उल्लेख के लायक था।


-1

मैं भी इसी तरह के समाधान की तलाश में हूं।

समाधान 1: आपके डेस्कटॉप वातावरण (Gnome, KDE) में WebDAV द्वारा एक निश्चित फ़ोल्डर को उजागर करने के लिए विजेट हो सकते हैं। यह तब तक चलेगा जब तक कि आपका डेस्कटॉप वातावरण चल रहा है और डेमॉन समाधान नहीं है।

समाधान 2: 1024 से ऊपर के अनपेक्षित पोर्ट पर अपने स्वयं के उपयोगकर्ता बंधन के तहत अपाचे को चलाने से आपको कुछ भी नहीं रोकता है। बस एक कॉन्फ़िगरेशन फ़ाइल लिखें या अपने वितरण में बंडल किए गए लोगों को अपने $ HOME / etc / httpd (सिर्फ एक उदाहरण) में कॉपी करें ,AVAV जोड़ें संबंधित कॉन्फ़िगरेशन और इसे अपने स्वयं के गैर-रूट उपयोगकर्ता की तरह चलाएं:

$ httpd -f $ HOME / etc / httpd

जैसे ही आपके उपयोगकर्ता यह सुनिश्चित करते हैं कि अपाचे आप के रूप में फाइल बनाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.