如何在Apache2上设置使用MySQL认证的WebDAV(Debian Squeeze)
本指南介绍如何在Debian Squeeze服务器上的Apache2上使用MySQL身份验证(使用mod_auth_mysql)设置WebDAV。 WebDAV代表基于Web的分布式创作和版本控制 ,是HTTP协议的一组扩展,允许用户直接编辑Apache服务器上的文件,以便不需要通过FTP下载/上传文件。 当然,WebDAV也可以用来上传和下载文件。
我不会保证这将为您工作!
1初步说明
我正在使用Debian Squeeze服务器,其主机名为server1.example.com
,IP地址为192.168.0.100
。
2安装Apache2,WebDAV,MySQL,mod_auth_mysql
要安装Apache2,WebDAV,MySQL和mod_auth_mysql,我们运行:
apt-get install apache2 mysql-server mysql-client libapache2-mod-auth-mysql
您将被要求为MySQL root用户提供密码 - 此密码对用户root @ localhost
以及root@server1.example.com有效
,因此我们不必在以后手动指定MySQL根密码:
MySQL“root”用户的新密码:
< - yourrootsqlpassword
重复MySQL“root”用户的密码:
< - yourrootsqlpassword
然后启用WebDAV和mod_auth_mysql模块:
a2enmod dav_fs
a2enmod dav
a2enmod auth_mysql
重新启动Apache:
/etc/init.d/apache2 restart
3创建虚拟主机
现在我将在目录/ var / www / web1 / web中
创建一个默认的Apache vhost。 为此,我将修改/ etc / apache2 / sites-available / default中
的默认Apache vhost 配置
。 如果您已经拥有要启用WebDAV的虚拟主机,则必须根据您的情况调整本教程。
首先,我们创建目录/ var / www / web1 / web
,并使Apache用户( www-data
)成为该目录的所有者:
mkdir -p /var/www/web1/web
chown www-data /var/www/web1/web
然后我们备份默认的Apache vhost配置( / etc / apache2 / sites-available / default
)并创建我们自己的配置:
mv /etc/apache2/sites-available/default /etc/apache2/sites-available/default_orig
vi /etc/apache2/sites-available/default
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/web1/web/ <Directory /var/www/web1/web/> Options Indexes MultiViews AllowOverride None Order allow,deny allow from all </Directory> </VirtualHost> |
然后重新加载Apache:
/etc/init.d/apache2 reload
4配置WebDAV的虚拟主机
您可以在/ usr / share / doc / libapache2-mod-auth-mysql
目录中找到mod_auth_mysql的文档。 要阅读它,你必须gunzip DIRECTIVES.gz
和USAGE.gz
文件:
cd /usr/share/doc/libapache2-mod-auth-mysql
gunzip DIRECTIVES.gz
vi DIRECTIVES
gunzip USAGE.gz
vi USAGE
读取这两个文件后,我们创建一个名为webdav
的MySQL数据库,我们将在其中创建包含我们的用户和密码的表mysql_auth。 除此之外,我们创建MySQL用户webdav_admin
- 该用户将被mod_auth_mysql用于以下连接到MySQL:
mysqladmin -u root -p create webdav
mysql -u root -p
GRANT SELECT, INSERT, UPDATE, DELETE ON webdav.* TO 'webdav_admin'@'localhost' IDENTIFIED BY 'webdav_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON webdav.* TO 'webdav_admin'@'localhost.localdomain' IDENTIFIED BY 'webdav_admin_password';
FLUSH PRIVILEGES;
(用您选择的密码替换webdav_admin_password
)
USE webdav;
create table mysql_auth (
username char(25) not null,
passwd char(32),
groups char(25),
primary key (username)
);
(当然,您也可以使用包含用户凭据的现有表,并且还可以在表中添加其他字段,例如定义用户是否处于活动状态的字段)。
CREATE TABLE `scoreboard` (
`id` int(14) NOT NULL auto_increment,
`vhost` varchar(50) NOT NULL default '',
`bytes_sent` int(14) NOT NULL default '0',
`count_hosts` int(12) NOT NULL default '0',
`count_visits` int(12) NOT NULL default '0',
`count_status_200` int(12) NOT NULL default '0',
`count_status_404` int(12) NOT NULL default '0',
`count_impressions` int(18) NOT NULL default '0',
`last_run` int(14) NOT NULL default '0',
`month` int(4) NOT NULL default '0',
`year` int(4) NOT NULL default '0',
`domain` varchar(50) NOT NULL default '',
`bytes_receive` int(14) NOT NULL default '0',
PRIMARY KEY (`id`),
UNIQUE KEY `vhost` (`vhost`,`month`,`year`,`domain`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
现在我们将用户测试
插入我们的mysql_auth
表,密码测试
(MD5加密); 该用户属于组测试
组:
INSERT INTO `mysql_auth` (`username`, `passwd`, `groups`) VALUES('test', MD5('test'), 'testgroup');
您可以稍后使用URL http://192.168.0.100/webdav
连接到WebDAV。 如果您在Windows XP客户端上执行此操作并键入用户名测试
,Windows将其转换为192.168.0.100 \ test
。 因此,我们现在创建第二个用户帐户:
INSERT INTO `mysql_auth` (`username`, `passwd`, `groups`) VALUES('192.168.0.100\\test', MD5('test'), 'testgroup');
(我们必须在用户名中使用第二个反斜杠来转义第一个!)
如果您指定WebDAV URL中的端口,则不必执行此操作,例如http://192.168.0.100:80 / webdav
- 在这种情况下,Windows将简单地查找用户测试
,而不是192.168.0.100 \ test
。
然后我们离开MySQL shell:
quit;
现在我们在/ etc / apache2 / sites-available / default中
修改vhost,并添加以下行:
vi /etc/apache2/sites-available/default
[...] Alias /webdav /var/www/web1/web <Location /webdav> DAV On AuthBasicAuthoritative Off AuthUserFile /dev/null AuthMySQL On AuthName "webdav" AuthType Basic Auth_MySQL_Host localhost Auth_MySQL_User webdav_admin Auth_MySQL_Password webdav_admin_password AuthMySQL_DB webdav AuthMySQL_Password_Table mysql_auth Auth_MySQL_Username_Field username Auth_MySQL_Password_Field passwd Auth_MySQL_Empty_Passwords Off Auth_MySQL_Encryption_Types PHP_MD5 Auth_MySQL_Authoritative On require valid-user </Location> [...] |
Alias
指令(与<Location>
一起)使得当您调用/ webdav
时,调用WebDAV,但仍可以访问vhost的整个文档根目录。 该vhost的所有其他URL仍然是“正常”的HTTP。
AuthBasicAuthoritative Off
和AuthUserFile / dev / null
是为了防止在Apache错误日志( /var/log/apache2/error.log
)中收到像这样的错误:
[Wed Jun 11 17:02:45 2008] [error] Internal error: pcfg_openfile() called with NULL filename
[Wed Jun 11 17:02:45 2008] [error] [client 127.0.0.1] (9)Bad file descriptor: Could not open password file: (null)
如果您的MySQL表中有其他字段可以定义是否允许用户登录(例如,一个称为活动的用户
),则可以添加Auth_MySQL_Password_Clause
指令,例如:
[...] Auth_MySQL_Password_Clause " AND active=1" [...] |
(重要的是引号内的字符串以空格开头!)
require valid-user
指令使mysql_auth
表中列出的每个用户都可以登录,只要他/她提供正确的密码。 如果您只希望允许某些用户登录,您可以使用类似的东西
[...] require user jane joe [...] |
代替。 如果您只希望某些群组的成员被允许登录,则可以使用以下内容:
[...] require group testgroup [...] |
最终的vhost应该是这样的:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/web1/web/ <Directory /var/www/web1/web/> Options Indexes MultiViews AllowOverride None Order allow,deny allow from all </Directory> Alias /webdav /var/www/web1/web <Location /webdav> DAV On AuthBasicAuthoritative Off AuthUserFile /dev/null AuthMySQL On AuthName "webdav" AuthType Basic Auth_MySQL_Host localhost Auth_MySQL_User webdav_admin Auth_MySQL_Password webdav_admin_password AuthMySQL_DB webdav AuthMySQL_Password_Table mysql_auth Auth_MySQL_Username_Field username Auth_MySQL_Password_Field passwd Auth_MySQL_Empty_Passwords Off Auth_MySQL_Encryption_Types PHP_MD5 Auth_MySQL_Authoritative On require valid-user </Location> </VirtualHost> |
之后重新加载Apache:
/etc/init.d/apache2 reload
5测试WebDAV
我们现在将安装cadaver
,一个命令行WebDAV客户机:
apt-get install cadaver
要测试WebDAV是否工作,请输入:
cadaver http://localhost/webdav/
应提示您输入用户名。 输入测试
,然后输入用户测试
的密码。 如果一切顺利,您应该被授予访问权,这意味着WebDAV工作正常。 键入退出
以离开WebDAV shell:
root@server1:~# cadaver http://localhost/webdav/
Authentication required for webdav on server `localhost':
Username: test
Password:
dav:/webdav/> quit
Connection to `localhost' closed.
root@server1:~#
现在再次使用用户名192.168.0.100 \ test
(这是Windows XP需要的格式,如果您不使用WebDAV URL中的80
):
cadaver http://localhost/webdav/
root@server1:~# cadaver http://localhost/webdav/
Authentication required for webdav on server `localhost':
Username: 192.168.0.100\test
Password:
dav:/webdav/> quit
Connection to `localhost' closed.
root@server1:~#
6配置Windows XP客户端连接到WebDAV共享
这在https://www.youcl.com/how-to-set-up-webdav-with-apache2-on-debian-lenny-p2中 。
如果您不使用WebDAV URL( http://192.168.0.100:80 / webdav
)中的80
,则必须使用用户名192.168.0.100 \ test
登录; 如果你使用:80
,那么你可以简单地用用户名测试
登录。
7配置Linux客户端(GNOME)连接到WebDAV共享
这在https://www.youcl.com/how-to-set-up-webdav-with-apache2-on-debian-lenny-p3中有 。
8故障排除
当您尝试连接到WebDAV时,例如使用以下命令,观察Apache错误日志( /var/log/apache2/error.log
)是个好主意:
tail -f /var/log/apache2/error.log
如果您收到以下错误:
[Wed Jun 11 15:39:04 2008] [error] [client 192.168.0.46] (13)Permission denied: Could not open property database. [500, #1]
这意味着/ var / lock / apache2
不是由Apache用户拥有(在Debian上的www-data
)。 您可以通过运行以下方法来解决此问题:
chown www-data /var/lock/apache2
如果Windows不断询问并询问用户名和密码,您应该在WebDAV URL中指定端口,例如http://192.168.0.100:80 / webdav
(参见第四章)。
9链接
- WebDAV: http : //www.webdav.org/
- Apache: http : //httpd.apache.org/
- Debian: http : //www.debian.org/
- mod_auth_mysql: http : //modauthmysql.sourceforge.net