CàiđặtWebDAVcùngMySQLtrên
Apache2
Trong bài viết sau, chung tôi sẽ hướng dẫn các bạn cách thiết lập WebDAV sử dụng cơ
chế chứng nhận MySQL (dựa trên mod_auth_mysql ) trên nền tảng Apache2 và Ubuntu
9.10 server.
WebDAV (đầy đủ là Web-based Distributed Authoring and Versioning) với thuộc tính mở rộng,
kế thừa chuẩn HTTP protocol cho phép người dùng trực tiếp chỉnh sửa file lưu trữ trên Apache
server, vì vậy hoàn toàn không cần đến giao thức FTP hỗ trợ nữa. Và đường nhiên, với khả năng
trên thì WebDAVcũng được dùng để upload và download dữ liệu.
1. Lưu ý sơ bộ: trong bài viết này sử dụng hệ điều hành Ubuntu 9.10 server với hostname
server1.example.com và địa chỉ IP: 192.168.0.100
2. Hướng dẫn càiđăt Apache2, WebDAV, MySQL, mod_auth_mysql:
Để càiđặt lần lượt Apache2, WebDAV, MySQL, và mod_auth_mysql, gõ câu lệnh sau:
aptitude install apache2 mysql-server mysql-client libapache2-mod-auth-mysql
Bạn sẽ nhận được yêu cầu nhập mật khẩu cho tài khoản MySQL root user – mật khẩu này đều
được sử dụng cho tài khoản user root@localhost cũng như root@server1.example.com, vì vậy
chúng ta không cần phải phân loại mật khẩu MySQL root bằng cách thủ công như sau:
New password for the MySQL "root" user: < mật khẩu tài khoản root
Repeat password for the MySQL "root" user: < mật khẩu tài khoản root
Sau đó, kích hoạt WebDAV và module mod_auth_mysql:
a2enmod dav_fs
a2enmod dav
a2enmod auth_mysql
Khởi động lại Apache.
3. Tạo host ảo – Virtual Host:
Tiếp theo, chúng ta sẽ tạo vhost Apache mặc định trong thư mục /var/www/web1/web. Để phục
vụ cho mục đích này, cần phải thay đổi thiết lập Apache vhost mặc định trong
/etc/apache2/sites-available/default. Trong trường hợp bạn đã có vhost phù hợp, mà chỉ cần kích
hoạt WebDAV, bạn phải điều chỉnh lại sao cho phù hợp với tình huống của bài viết.
Trước tiên, tạo thư mục /var/www/web1/web và tài khoản Apache user (www-data):
mkdir -p /var/www/web1/web
chown www-data /var/www/web1/web
Sau đó, cần sao lưu những thiết lập mặc định của 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
NameVirtualHost *
<VirtualHost *>
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>
Sau đó nạp lại Apache:
/etc/init.d/apache2 reload
4. Tùy chỉnh Virtual Host dành cho WebDAV:
Bạn có thể tham khảo tàiliệu về module mod_auth_mysql trong thư mục
/usr/share/doc/libapache2-mod-auth-mysql, để đọc những tàiliệu này, bạn cần phải sử dụng
gunzip thao tác trên 2 file DIRECTIVES.gz và USAGE.gz:
cd /usr/share/doc/libapache2-mod-auth-mysql
gunzip DIRECTIVES.gz
vi DIRECTIVES
gunzip USAGE.gz
vi USAGE
Tiếp theo, tạo cơ sở dữ liệuMySQL tên là webdav, dùng để chứa bảng mysql_auth, có chứa
thông tin tài khoản và mật khẩu đăng nhập của các tài khoản. Bên cạnh đó, chúng ta phải tạo
thêm tài khoản MySQL user webdav_admin – tài khoản này sẽ được sử dụng bởi
mod_auth_mysql để kết nối đến MySQL sau này:
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;
(Thay thế giá trị webdav_admin_password với mật khẩu tùy chọn của bạn).
USE webdav;
create table mysql_auth (
username char(25) not null,
passwd char(32),
groups char(25),
primary key (username)
);
Tiếp theo, thêm tài khoản người dùng test vào bảng mysql_auth, mật khẩu test (mã hóa MD5),
tài khoản này nằm trong nhóm testgroup:
INSERT INTO `mysql_auth` (`username`, `passwd`, `groups`) VALUES('test', MD5('test'),
'testgroup');
Sau này bạn có thể sử dụng đường dẫn http://192.168.0.100/webdav để kết nối tới WebDAV.
Nếu làm việc này trên Windows XP client, khi gõ tên đăng nhập test, Windows sẽ dịch địa chỉ
thành 192.168.0.100\test. Do đó ta phải tạo tài khoản thứ 2 ngay bây giờ:
INSERT INTO `mysql_auth` (`username`, `passwd`, `groups`)
VALUES('192.168.0.100\\test', MD5('test'), 'testgroup');
(chúng ta phải sử dụng dấu gạch chéo ngược thứ 2 trong trường tên đăng nhập để “thoát khỏi”
tên thứ nhất)
Thực ra, bạn không phải làm bước này nếu đã chỉ định trước cổng kết nối trong đường dẫn
WebDAV, ví dụ như http://192.168.0.100:80/webdav – trong trường hợp này, Windows sẽ chỉ
để ý đến tài khoản test, không còn là 192.168.0.100\test như trên.
Sau đó, thoát khỏi MySQL:
quit;
Tiếp theo, chúng ta phải chỉnh sửa vhost trong /etc/apache2/sites-available/default và thêm dòng
sau:
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>
[ ]
Các chỉ thị Alias (đi kèm với <Location>) khi bạn tiến hành gọi /webdav, WebDAV có được
gọi, nhưng bạn vẫn có thể truy cập đến toàn bộ tàiliệu root của vhost. Và tất cả các đường dẫn
vhost khác vẫn chỉ là HTTP bình thường.
Cú pháp AuthBasicAuthoritative Off và AuthUserFile /dev/null tồn tại để ngăn chặn khi bạn
nhận được những lỗi tương tự như thế này trong file log ghi lại lỗi của 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)
Nếu bạn có những trường khác trong bảng MySQL, chỉ định người dùng nào đó có được phép
truy cập hay không (trường dữ liệu gọi là active), bạn có thể thêm lệnh chỉ định
Auth_MySQL_Password_Clause:
[ ]
Auth_MySQL_Password_Clause " AND active=1"
[ ]
Điều quan trọng là các chuỗi giá trị trong dấu ngoặc kép đều phải bắt đầu bằng khoảng trống.
. đăt Apache2, WebDAV, MySQL, mod_auth _mysql:
Để cài đặt lần lượt Apache2, WebDAV, MySQL, và mod_auth _mysql, gõ câu lệnh sau:
aptitude install apache2 mysql- server. 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