লিনাক্সের জন্য কি কোনও মাল্টি-ইউজার ওয়েবডাভ সার্ভার উপলব্ধ?


9

আমি আমার এসএমবিএ পরিষেবাটি সম্পূর্ণরূপে বাতিল করতে এবং এটি একটি ওয়েবড্যাভ পরিষেবা দিয়ে প্রতিস্থাপন করতে চাই।

এখনও অবধি সমস্ত গুগল অনুসন্ধান আমাকে অ্যাপাচি / ওয়েবডাভ ব্যবহারের দিকে নির্দেশ করেছে। এটি আমার যা প্রয়োজন প্রয়োজন তার কাছাকাছি তবে যতদূর আমি পড়েছি এটিতে অ্যাপাচিটির ব্যবহারকারীর ফাইলগুলিতে অ্যাক্সেস থাকা এবং আরও খারাপ হওয়া প্রয়োজন; যদি এটি কোনও ফাইল তৈরি করে তবে নতুন ফাইলটি অ্যাপাচি (ব্যবহারকারীর নয়) এর মালিকানায় থাকবে। নোট করুন যে কিছু ইউনিক্সের সরাসরি এসএসএইচ অ্যাক্সেস রয়েছে তাই সঠিক ইউনিক্সের মালিকানা এবং অনুমতি সহ ফাইল থাকা একটি প্রয়োজনীয়তা।

সুতরাং আমি বেশ সহজভাবেই একাধিক ব্যবহারকারীর সাথে অ্যাপাচি / ওয়েবড্যাভকে "সঠিকভাবে" কাজ করার উপায় খুঁজছি ( এটি ফাইলের পরিবেশন করার চেষ্টা করার আগে লগ-ইন করা ব্যবহারকারীকে ইউনিক্স ব্যবহারকারী পরিবর্তন করা ) বা অ্যাপাচি / এর সম্পূর্ণ বিকল্প খুঁজে বের করতে চাই অম্রো।

এখনও পর্যন্ত অনুসন্ধানগুলি কোনও কিছুই চালু করেনি।


ওয়েবড্যাভ যেহেতু এইচটিটিপি প্রোটোকল ভিত্তিক, তাই আমি বলব যে এটি কোনও HTTP সার্ভারের ফর্ম ব্যতীত বিদ্যমান নেই existing এবং যদি আপনি এমন কোনও পণ্য খুঁজে পান যা ওয়েবড্যাভ ট্রহে সরবরাহ করে তবে সাধারণত এর চেয়ে বেশি প্রস্তাব দেওয়া হবে
কিউই

দেখে মনে হচ্ছে এমপিএম আইটিকের সর্বশেষ সংস্করণে প্রতিশ্রুতিবদ্ধ কিছু থাকতে পারে। mpm-itk.sesse.net আমি এটি ব্যবহার করে দেখব এবং AssignUserIDExprলগ ইন করা ব্যবহারকারীকে গ্রহণ করবে কিনা তা দেখুন । এটি AssignUserIDব্যবহারকারীর প্রমাণীকরণের আগে কিক ইন প্রদর্শিত হবে না ।
ফিলিপ কুলিং

এখানে কোডএল.কম / পি / ওপেনডভের মতো স্ট্যান্ডেলোন ওয়েবডাভ সার্ভার বা পাইউইবিডিএভিয়ের মতো লাইব্রেরি রয়েছে যা অ্যাপাচি প্রয়োজন হয় না।
জানুয়ারী

@ জাজান এটি সেরা উত্তর হতে পারে। অ্যাপাচি ইতিমধ্যে সার্ভারে চলছে এবং ওয়েবডাভটি সাইটের একটি উপ-ডিরেক্টরি হতে হবে তবে আমি এটিকে একটি প্রক্সি পাস হিসাবে সেট করতে পারি এবং এনক্রিপশন সরবরাহ করতে অ্যাপাচি এর এসএসএল ব্যবহার করতে পারি।
ফিলিপ কুলিং

উত্তর:


2

আপনার যদি ব্যবহারকারীর নাম এবং / অথবা uid থাকে তবে আপনি এনজিনেক্স + লুয়া + লুয়ারকস লজসিস্কেল দিয়ে এটি করতে পারেন

একটি ডিবিয়ান সিস্টেমে, কনফিগার করা হিসাবে:

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 কর্মী দ্বারা পরিবেশন করা প্রতিটি অনুরোধে সেটফসুইড কার্যকর করবে। দুর্ভাগ্যক্রমে, মনে হচ্ছে এটি এখনই কাজ করার জন্য আপনাকে অবশ্যই রুট হিসাবে এনজিনেক্স চালাবেন। আমি বিশ্বাস করি যে এটির জন্য পৃথক ব্যবহারকারীর সাথে কাজ করা সম্ভব হবে তবে শর্ত হিসাবে প্রক্রিয়াটি শুরু হয়ে, পৃথক ব্যবহারকারীর কাছে ফেলে দেওয়া হয়, সিএপি_এসইটিইউইড সংরক্ষিত (এর জন্য ডকুমেন্টেশন দেখুন capsh), এবং নির্দেশটি এনজিএনএক্স userকনফিগার ফাইলে অনুপস্থিত।

আপনার গোষ্ঠী আইডিগুলিও সম্ভাব্যভাবে সেট করার দরকার হতে পারে।

Http://man7.org/linux/man-pages/man7/capables.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-ডেটা) তবে আপনি সেই দলে ব্যবহারকারীদের যুক্ত করতে পারেন, তাই আমি একজন ব্যবহারকারী যুক্ত করেছি। আপনি কেন অন্য ব্যবহারকারীদের যুক্ত করবেন না তা পরীক্ষা করেননি .... নীতিগতভাবে এই সেটআপটি ব্যবহার করে ওয়েবড্যাভ সার্ভারটি এখন আমার এবং আমার ছেলের জায়গায় 3 বছরের জন্য চালিত হয় (সুতরাং আমার ছেলের কাজের জন্য 2 অভিন্ন সার্ভার)। ডেবিয়ান 6 কিছু মাস থেকে এলটিএস সংস্করণ (ফেব্রুয়ারি -2016 অবধি)।

বার্নার্টসের তুলনায় আমি অ্যাপাচি ফাইল: / etc / apache2 / সাইট-উপলভ্য / ডিফল্ট কনফিগারেশনের এই অংশে রূপান্তর করেছি।

Alias /webdav1 /data/webdav1

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

সুতরাং আমার ফাইলগুলি এখন আর www এর অধীনে নয় তবে / ডেটা / ওয়েবডাভ 1 এর মধ্যে (এটি ছোট রাখার জন্য ওরফে ওয়েবডাভ 1 এর মাধ্যমে) প্রতিটি হার্ড ডিস্কের জন্য আমি এই জাতীয় একটি বিভাগ তৈরি করেছি এবং ওয়েবডাভ 1 বিভাগের 2 hard হার্ড ডিস্কের জন্য ওয়েবডাভ 2 হয়ে গেছে। আমরা এই সার্ভারগুলিতে সর্বাধিক 10 হার্ড ডিস্ক তৈরি করতে পারি, সুতরাং কনফিগারেশন ফাইলে এই বিভাগের 10। আমি ব্যবহারকারীকে www-ডেটা, davfs2 এবং davfs এ যুক্ত করেছি, যাতে ব্যবহারকারীর ওয়েবডাভ ফোল্ডার (গুলি) অ্যাক্সেস করতে পারে। সুতরাং ব্যবহারকারীর লগইন করতে হবে এবং ব্যবহারকারীর নাম এবং পাসওয়ার্ড জিজ্ঞাসা করা হবে। Fstab এ সমস্ত ওয়েবডাব ডেটা ডিস্ক তালিকাভুক্ত করা হয়েছে যাতে মাউন্টিং স্বয়ংক্রিয়ভাবে এগিয়ে যায়। Fstab এর অংশ:

/ dev / sda3 / ডেটা / ওয়েবডাভ 1 এক্স 3, ব্যবহারকারী, অটো 0 0


1
দুঃখজনকভাবে এটি সমস্যাটি মোটেও সমাধান করে না। এই প্রশ্নের কেন্দ্রবিন্দু বহু ব্যবহারকারী ছিল। এই সমাধানের সাহায্যে নতুন ফাইলগুলি অ্যাপাচি ব্যবহারকারী হিসাবে তৈরি করা হবে যা লগ ইন করা ব্যবহারকারী নয়। অ্যাপাচি ফাংশন করার জন্য সমস্ত ফাইল অবশ্যই সেই গ্রুপে পড়ার / লেখার অনুমতি সহ www- ডেটা গ্রুপ হতে হবে। যেহেতু প্রত্যেক ব্যবহারকারীর সেই গোষ্ঠীতে থাকতে হবে প্রতিটি ব্যবহারকারীর প্রতিটি অন্যান্য ব্যবহারকারীর ফাইল পড়তে / লিখতে অ্যাক্সেস করতে হবে। এই সমাধানটি একাধিক ব্যবহারকারীর পক্ষে সহজভাবে জাগে না।
ফিলিপ কাপলিং

0

আপনি কি নিজের ক্লাউড চেষ্টা করেছেন ? তবুও এটি কেবল নিজেই পরীক্ষা করে দেখছি, তবে এটি আপনার প্রয়োজনীয়তা পূরণ করে বলে মনে হচ্ছে: ওয়েবডাব-অফ-দ্য বাক্সে কাজ করে।


1
হ্যাঁ আমার কাছে ওয়ানক্লাউডের উদাহরণ রয়েছে তবে আমি যা খুঁজছি তা তা নয় কারণ নিজস্ব ক্লাউড ব্যবহারকারী (অ্যাপাচি) সমস্ত ফাইলের মালিক।
ফিলিপ কাপলিং

0

দীর্ঘদিন অনুসন্ধান করেও আমি সন্ধান করতে পারি না। অনেকগুলি মাল্টি ইউজার সার্ভার রয়েছে তবে সিস্টেম ব্যবহারকারী হিসাবে মৃত্যুদন্ড কার্যকর করা কোনটি আমি খুঁজে পেলাম না।

তাই আমি নিজেই একটি লিখেছি। আমি কেবল এটি পরীক্ষা করতে পারলেই এটি পরীক্ষা করা হয়। তবে এর মূল্যের জন্য, উত্স কোডটি এখানে রয়েছে:

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


0

hy,

আমি একই জিনিসটি খুঁজছিলাম এবং অবশেষে আমি অ্যাপাচি 2 ব্যবহার করে একটি সমাধান সংগ্রহ করেছি। আমি এনপিএম ওয়েবডাভ-সার্ভার ব্যবহার করে নোড সলিউশনটি চেষ্টা করেছিলাম এবং এপাচি মডিউলটি ব্যবহার করে সবাই এত সুন্দরভাবে কাজ করেননি। তারপরে আমি জেএসডিএভের উপর ভিত্তি করে একটি এনএমপি ডেভ-সার্ভার চেষ্টা করেছি যা আরও ভাল করতে পারে এবং সমাধান হতে পারে, তবে আমি লস 3 জি সংযোগের সাথে কাজ করতে গিয়ে আমি অ্যাপাচি পছন্দ করেছি এবং একাধিক উদাহরণ স্ক্রিপ্টগুলি খুঁজে পেয়েছি।

তাই এখানে আমি আমার অভিজ্ঞতা ভাগ করে নিই।

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

আমি ওয়েবড্যাভ ব্যবহারকারী প্রতি একটি উদাহরণ চালাচ্ছি ... খুব স্কেলযোগ্য নয়, তবে একটি ছোট দলে কাজ করার পক্ষে এটি যথেষ্ট ভাল।

আপনার ব্যবহারকারীর সাথে myUser প্রতিস্থাপন করুন।

উবুন্টু 14.04 এ

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

সুতরাং আমি / etc / apache2-myUser / envars এ সংজ্ঞায়িত ব্যবহারকারী myUser হিসাবে একটি অ্যাপাচি প্রক্রিয়া চালাচ্ছি

export APACHE_RUN_USER=myUser
export APACHE_RUN_GROUP=myUser

পোর্টসকনফ সম্পাদনা করুন

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

আমি উবুন্টু 14.04 এ পিএএম আথ পেতে পারি না তাই কাজ করতে বেসিক লেখাগুলির সাথে কৌশল করা দরকার কারণ আমি এটির পরে https এ এনজিনেক্স দিয়ে জড়িয়ে রাখি

htpasswd -c /etc/apache2/htpasswd myUser

তারপরে /etc/apache2-myUser/sites- উপলভ্য / 1000-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>

তারপরে এনগিনেক্স প্রক্সির শিরোনামের সাথে একটি কৌশল রয়েছে গন্তব্য পাস করার আইকন ফোল্ডারটি ওয়েবড্যাভকে ব্রাউজারগুলিতে সুন্দরভাবে ডাউনগ্রেড করতে দেয়

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;

}

প্রক্সি হিসাবে এনজিনেক্স ব্যবহার করার কোনও বাধ্যবাধকতা নেই, অ্যাপাচি https খুব ভালভাবে করতে পারে, তবে আমি প্রক্সি গন্তব্য ইস্যুতে ঝাঁপিয়ে পড়েছি বলে আমি অনুভব করেছি যে এটি উল্লেখ করার মতো।


-1

আমিও একই ধরণের সমাধান খুঁজছি।

সমাধান 1: আপনার ডেস্কটপ এনভায়রনমেন্ট (জিনোম, কে ডি) কে ওয়েবডিএভি দ্বারা একটি নির্দিষ্ট ফোল্ডার উন্মোচন করার জন্য উইজেট থাকতে পারে। এটি আপনার ডেস্কটপ পরিবেশ চলাকালীন চলবে এবং এটি কোনও ডেমন সমাধান নয়।

সমাধান 2: 1024-র উপরে অপ্রয়োজনীয় বন্দরগুলিতে বাধ্য হয়ে আপনার নিজের ব্যবহারকারীর অধীনে অ্যাপাচি চালানো থেকে আপনাকে কিছুই বিরত রাখে না Just কেবল একটি কনফিগারেশন ফাইল লিখুন বা আপনার ডিস্ট্রিবিউশনে বান্ডিলযুক্তগুলি আপনার $ হোম / ইত্যাদি / httpd (কেবল উদাহরণ হিসাবে) অনুলিপি করুন, ডিএভি- যুক্ত করুন সম্পর্কিত কনফিগার করুন এবং এটি আপনার নিজের অ-রুট ব্যবহারকারী হিসাবে চালান:

$ httpd -f $ হোম / ইত্যাদি / httpd

আপনার ব্যবহারকারীদের হিসাবে চালানো নিশ্চিত করে যে অ্যাপাচি আপনার মতো ফাইল তৈরি করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.