Ubuntu 配置WebDav服务器

本文介绍如何在Ubuntu系统上搭建WebDAV服务器,包括安装Apache2服务、配置虚拟主机及用户验证等步骤。
原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 、作者信息和本声明。否则将追究法律责任。 http://terryblog.blog.51cto.com/1764499/790989

 什么是WebDAV?

简单地说:“基于Web的分布式创作和版本”的WebDAV。它是HTTP协议,它允许用户协作编辑和管理远程Web服务器上的文件的扩展。听说苹果的icloud 也是基于webdav来实现的,使用Ubuntu 如何配置webdav服务器呢?

 首先先了解webdav的一些开源项目和商业项目,访问这个链接:http://webdav.org/.

进入终端: 

步骤1:安装apache2服务:

 sudo apt-get install apache2

步骤2:启用关联到的模块:

sudo a2enmod dav_fs

sudo a2enmod dav

sudo a2enmod dav_lock  


步骤3:关联SO文件:

sudo ln -s /etc/apache2/mods-available/dav.load /etc/apache2/mods-enabled/dav.load

sudo ln -s /etc/apache2/mods-available/dav_fs.load /etc/apache2/mods-enabled/dav_fs.load

sudo ln -s /etc/apache2/mods-available/dav_lock.load /etc/apache2/mods-enabled/dav_lock.load

sudo ln -s /etc/apache2/mods-available/dav_fs.conf /etc/apache2/mods-enabled/dav_fs.conf  


 步骤4:重启服务:

sudo /etc/init.d/apache2 restart 

 

步骤5:创建虚拟主机:

mkdir / var/www/sync
chown www-data:www-data / var/www/sync 


步骤6:创建用户:

sudo htpasswd -c / var/www/me.dav terry
--这里会要求你重新办理确认密码
sudo chown root:www-data / var/www/me.dav
sudo chmod  640 / var/www/me.dav

 

步骤7:配置虚拟主机:

sudo gedit /etc/apache2/sites-available/default

 在VirtualHost 节点中加入以下配置信息:

DocumentRoot / var/www/sync/
        <Directory / var/www/sync/>
                Options Indexes MultiViews
                AllowOverride None
                Order allow,deny
                allow  from all
        </Directory>

        Alias /webdav / var/www/sync

        <Location /webdav>
           DAV On
           AuthType Basic
           AuthName  " webdav "
           AuthUserFile / var/www/me.dav
           Require valid-user

 </Location>  

      

最后一步:重启服务并登录吧!使用命令行cadaver进入登录

 sudo /etc/init.d/apache2 restart

sudo apt- get install cadaver

cadaver http: // 127.0.0.1/webdav/

 

OK. 

<think>好的,用户想在Ubuntu上用Apache2搭建WebDAV服务器,并且实现用户目录的自动生成。首先,我需要回忆一下Apache2配置WebDAV的步骤。根据之前看到的引用,安装Apache2、启用模块、创建目录、配置虚拟主机这些都是基础步骤。用户提到的自动生成用户目录,可能需要用到mod_md模块或者编写脚本,但不确定。 首先,安装Apache2和必要的模块。根据引用[3]和[4],用户需要运行apt install apache2,然后启用dav和dav_fs模块,可能还需要dav_lock模块。然后创建存储数据的目录,比如/srv/webdav,并设置权限。 接下来是配置虚拟主机。用户需要监听特定端口,比如36500,然后设置DocumentRoot到数据目录。在配置文件中,需要启用DAV,并设置认证方式。这里可能需要使用Basic认证,结合htpasswd创建用户文件。但用户目录自动生成,可能每个用户有自己的子目录,这可能需要mod_rewrite或mod_userdir,或者用脚本在用户首次登录时创建目录。 自动创建用户目录的话,可能需要用到Apache的mod_rewrite和mod_authn_dbd,或者编写一个脚本,当用户第一次访问时检查目录是否存在,不存在则创建。或者使用PAM模块,但可能比较复杂。另一种方法是使用mod_md,但不确定是否适用。或者,在用户认证成功后,通过CGI脚本或者自定义模块来创建目录。 参考引用[3],配置WebDAV时需要指定DAVLockDB的位置,避免文件锁问题。然后设置权限,可能需要AllowOverride None,并限制允许的方法如GET、POST等。认证部分,使用Basic Auth,创建密码文件,比如/etc/apache2/webdav.passwd,添加用户和密码。 对于用户目录自动生成,可能需要mod_userdir,但默认情况下可能不安全。或者,在Apache配置中使用变量,比如在Directory指令中使用%{REMOTE_USER},然后通过RewriteCond检查目录是否存在,如果不存在则用RewriteRule触发创建目录的脚本。但需要确保Apache有权限在指定路径下创建用户目录,比如/srv/webdav/%{REMOTE_USER},然后通过Script或者ExecCGI来执行mkdir命令。 可能需要写一个bash脚本,当用户首次认证时,检查对应的用户目录是否存在,不存在则创建。这可以通过在Apache配置中结合RewriteEngine和脚本执行实现。例如,使用RewriteCond检查目录是否存在,如果不存在,则重定向到一个CGI脚本,该脚本创建目录并返回资源。或者,在PHP中处理,但用户可能没有安装PHP。因此,可能需要更简单的方法。 另一种方法是在用户认证成功后,利用Apache的LogFormat指令,记录日志,然后有一个后台进程监控日志,当有新用户登录时,创建对应的目录。但这样实时性可能不够。 或者,使用DBD认证,将用户存储在数据库中,并在认证时触发外部程序创建目录。但配置起来比较复杂。 可能更简单的办法是,在Apache配置中使用mod_rewrite动态生成路径。例如,设置所有请求指向/srv/webdav/${REMOTE_USER},然后在配置中使用: RewriteEngine On RewriteCond %{LA-U:REMOTE_USER} (.+) RewriteCond /srv/webdav/%1 !-d RewriteRule ^/(.*)$ /create-dir.cgi?user=%1 [L] 然后create-dir.cgi是一个有执行权限的脚本,负责创建目录并返回重定向。但需要确保这个脚本有权限创建目录,并且Apache配置允许CGI执行。 不过这样可能比较复杂。可能更实际的做法是,在用户认证时,自动创建其目录。这需要修改认证流程,或者在.htaccess文件中加入指令,但Apache的认证模块本身不提供这样的功能。所以可能需要结合PAM或者自定义模块,但这可能超出了普通用户的配置能力。 或许,用户想要的自动生成用户目录,类似于系统用户的家目录,每个用户登录WebDAV后有自己的目录。这时,可以配置ApacheWebDAV路径为/home/%{REMOTE_USER}/webdav,并确保每个用户的家目录中存在webdav子目录。但这需要系统用户存在,并且Apache有权限访问这些目录。如果用户希望通过WebDAV动态创建用户目录而不创建系统用户,这可能不可行。 综上,可能的解决方案是: 1. 配置WebDAV的主目录为/srv/webdav,并为每个用户创建子目录,如/srv/webdav/user1,/srv/webdav/user2等。 2. 使用mod_rewrite和脚本自动创建用户目录,当用户首次登录时检查是否存在,不存在则创建。 或者,更简单的方法是通过在Apache配置中设置每个用户的路径,然后手动或通过脚本批量创建用户目录。但用户希望自动生成,所以需要自动化。 另一种方法是利用mod_authnz_external和外部认证程序,在认证时触发目录创建。例如,使用pwauth这类工具,但需要编写自定义脚本。 可能更实际的是,在用户首次登录时,通过一个cron job定期检查新用户并创建目录,但实时性不够。 或者,使用inotify监控认证日志,当有新用户成功登录时触发目录创建。这需要设置inotify和脚本。 不过这些方法可能比较复杂。有没有更简单的方式? 突然想到,可以在Apache配置中使用SetEnvIf和自定义表达式,然后在Directory指令中动态设置路径。例如: SetEnvIf Remote_User "(.*)" USER_DIR=$1 Alias /webdav /srv/webdav/%{USER_DIR} 然后,在Directory中检查该目录是否存在,否则创建。不过Apache配置中不能直接执行shell命令,所以可能需要结合其他模块。 或者,使用mod_rewrite的prg(程序)类型,但这可能不安全且效率低。 可能最终的解决方案是,在用户认证成功后,通过一个简单的CGI脚本或PHP页面来处理文件操作,并在首次访问时创建用户目录。但这可能改变WebDAV的工作方式,因为WebDAV客户端期望直接访问文件系统,而不是通过CGI。 看来这个问题可能需要更深入的Apache模块知识,或者寻找现有的模块来实现自动创建用户目录。经过搜索,发现可以使用mod_allowview和mod_rewrite结合,或者使用mod_perl编写自定义处理程序。 不过对于用户来说,可能需要一个更简单的解决方案。例如,配置ApacheWebDAV路径为/srv/webdav,然后在每个用户登录时,他们的根目录是/srv/webdav/username,并且当该目录不存在时,Apache返回403,而用户需要通过其他方式创建该目录。但这不符合自动生成的需求。 或者,在Apache配置中使用mod_autoindex,当用户访问自己的目录时自动创建,但不确定是否可行。 另一个思路是,使用符号链接或挂载点,将用户目录动态映射到某个位置,但这需要更复杂的设置。 可能用户的需求其实是,每个用户通过WebDAV访问自己的目录,例如/home/username/webdav,而该目录在用户首次登录时自动创建。这时,可以结合Linux的pam_mkhomedir模块,在用户登录时自动创建家目录。但WebDAV的认证是基于HTTP Basic Auth,而不是系统登录,所以pam_mkhomedir可能不适用。 因此,可能需要手动创建用户目录,或者编写一个脚本,当添加WebDAV用户时自动创建对应的目录。例如,使用htpasswd添加用户后,同时创建/srv/webdav/username目录。这需要将添加用户和创建目录的过程自动化,可以通过封装htpasswd命令到一个脚本中,每次添加用户时自动创建目录。 例如,创建一个脚本add_webdav_user.sh: #!/bin/bash USER=$1 PASS=$2 htpasswd -b /etc/apache2/webdav.passwd $USER $PASS mkdir -p /srv/webdav/$USER chown www-data:www-data /srv/webdav/$USER chmod 750 /srv/webdav/$USER 这样,每次添加用户时运行这个脚本,就会自动创建目录。这可能是实现“自动生成用户目录”的最简单方法,虽然不是完全自动,但通过脚本简化了步骤。 用户可能希望完全自动化,即无需手动运行脚本,而是在用户首次认证时自动创建目录。这可能需要更复杂的配置,如上述的mod_rewrite结合CGI,或者使用mod_authnz_external调用外部程序。 但考虑到时间和复杂度,可能建议用户使用脚本自动化添加用户和目录的过程,而不是实时自动创建。因此,在回答中,可以指导用户如何配置Apache,并提供一个脚本示例来自动添加用户并创建目录,这样在用户管理上实现了半自动。 综上,步骤大概是: 1. 安装Apache2和必要模块。 2. 创建WebDAV存储目录,配置权限。 3. 配置Apache虚拟主机,启用WebDAV,设置认证。 4. 使用htpasswd创建用户,并手动或用脚本创建用户目录。 如果用户需要完全自动,可能需要更高级的配置,但常见做法是半自动,通过脚本来简化用户添加过程。</think>以下是Ubuntu系统使用Apache2部署WebDAV服务器并实现用户目录自动生成的配置步骤: --- ### 一、安装Apache2及启用模块 1. **安装Apache2** ```bash sudo apt update && sudo apt install apache2 ``` 2. **启用WebDAV模块** ```bash sudo a2enmod dav dav_fs dav_lock auth_digest ``` --- ### 二、创建WebDAV存储目录 1. **创建共享目录** ```bash sudo mkdir -p /srv/webdav/users sudo chown -R www-data:www-data /srv/webdav sudo chmod -R 750 /srv/webdav ``` --- ### 三、配置Apache虚拟主机 1. **新建配置文件** ```bash sudo nano /etc/apache2/sites-available/webdav.conf ``` 2. **写入以下内容** ```apache Listen 36500 <VirtualHost *:36500> ServerAdmin admin@example.com DocumentRoot /srv/webdav # 自动生成用户目录的脚本支持 Script PUT /srv/webdav/users/* Script MKCOL /srv/webdav/users/* <Directory "/srv/webdav/users"> DAV On DavDepthInfinity On # 认证配置 AuthType Basic AuthName "WebDAV Private" AuthUserFile /etc/apache2/webdav.passwd Require valid-user # 动态映射用户目录(需脚本支持) RewriteEngine On RewriteCond %{REQUEST_URI} ^/users/([^/]+) RewriteRule .* - [E=USER:%1] DavGenericLockDB "/var/lock/apache2/WebDAV.lock" </Directory> # 自动创建用户目录的脚本 <Location "/srv/webdav/users"> Dav On Options ExecCGI AddHandler cgi-script .cgi </Location> </VirtualHost> ``` --- ### 四、配置用户认证及目录自动生成 1. **创建用户密码文件** ```bash sudo htpasswd -c /etc/apache2/webdav.passwd user1 # 添加第一个用户 sudo htpasswd /etc/apache2/webdav.passwd user2 # 添加后续用户 ``` 2. **编写自动创建目录脚本** 创建脚本 `/srv/webdav/users/create_user_dir.cgi`: ```bash #!/bin/bash USER=$(echo $PATH_INFO | cut -d '/' -f2) TARGET_DIR="/srv/webdav/users/$USER" if [ ! -d "$TARGET_DIR" ]; then mkdir -p "$TARGET_DIR" chown www-data:www-data "$TARGET_DIR" fi echo "HTTP/1.1 201 Created" echo "Content-Type: text/plain" echo "" echo "Directory created: $TARGET_DIR" ``` 3. **赋予脚本执行权限** ```bash sudo chmod +x /srv/webdav/users/create_user_dir.cgi ``` --- ### 五、重启Apache服务 ```bash sudo a2ensite webdav.conf sudo systemctl restart apache2 ``` --- ### 六、验证功能 1. **客户端连接** 使用客户端(如Windows资源管理器)访问: ``` \\192.168.1.20@36500\users\user1 ``` 首次访问时会自动生成用户目录。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值