Cài đặt WebDAV cùng MySQL trên Apache2

Quản Trị Mạng - Trong bài viết sau, Quản Trị Mạng 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ì WebDAV cũ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ài liệu về module mod_auth_mysql trong thư mục /usr/share/doc/libapache2-mod-auth-mysql, để đọc những tài liệ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ệu MySQL 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ài liệ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.


Lệnh chỉ định require valid-user cho phép mỗi tài khoản liệt kê trong bảng mysql_auth được phép đăng nhập vào hệ thống nếu cung cấp đúng mật khẩu. Nếu bạn muốn những tài khoản nhất định nào đó được phép truy cập, bạn nên sử dụng cú pháp tương tự như sau:

[...]
require user jane joe
[...]

thay thế. Và tương tự như vậy với nhóm tài khoản, sử dụng cú pháp sau:

[...]
require group testgroup
[...]

Và cuối cùng, vhost sẽ có dạng như sau:

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>

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>

Sau đó, tiến hành tải Apache lại:

/etc/init.d/apache2 reload

5. Kiểm tra WebDAV:

Tiếp theo, chúng ta phải cài đặt thêm thành phần cadaver, ứng dụng dòng lệnh WebDAV client:

aptitude install cadaver

Để kiểm tra xem WebDAV có hoạt động hay không, gõ lệnh sau:

cadaver http://localhost/webdav/

Bạn sẽ nhận được yêu cầu cung cấp tên đăng nhập, gõ test và mật khẩu tương tự. Nếu tất cả hoạt động bình thường, nghĩa là toàn bộ quá trình cài đặt và thiết lập bên trên đã thành công. Gõ quit để thoát khỏi WebDAV:

server1:~# cadaver http://localhost/webdav/
Authentication required for webdav on server `localhost':
Username: test
Password:
dav:/webdav/> quit
Connection to `localhost' closed.
server1:~#

Bây giờ thử lại lần nữa với username: 192.168.0.100\test (dùng định dạng này trong Windows XP nếu bạn không sử dụng :80 trong đường dẫn WebDAV):

cadaver http://localhost/webdav/

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.
server1:~#

6. Thiết lập Windows XP Client kết nối tới WebDAV chia sẻ:

Nếu bạn không dùng :80 trong đường dẫn WebDAV (http://192.168.0.100:80/webdav), bạn phải đăng nhập với tên tài khoản 192.168.0.100\test. Trong trường hợp có sử dụng :80 thì chỉ cẩn dùng tên đăng nhập là test.

7. Những vấn đề thường gặp:

1 ý kiến tốt là các bạn nên theo dõi quá trình giao tiếp, đăng nhập của Apache thông qua file log (/var/log/apache2/error.log), khi kết nối tới WebDAV, ví dụ như câu lệnh sau:

tail -f /var/log/apache2/error.log

Nếu bạn nhận được thông báo lỗi như sau:

[Wed Jun 11 15:39:04 2008] [error] [client 192.168.0.46] (13)Permission denied: Could not open property database. [500, #1]

có nghĩa rằng /var/lock/apache2 không được sở hữu bởi người dùng Apache (www-data trên Ubuntu), lỗi này sẽ được khắc phục bằng cách sau:

chown www-data /var/lock/apache2

Trong Windows, nếu hệ thống liên tục hỏi tên đăng nhập và mật khẩu, bạn nên chỉ định rõ ràng cổng truy cập trong đường dẫn WebDAV, ví dụ như sau http://192.168.0.100:80/webdav

Tài liệu tham khảo: WebDAV, Apache, Ubuntumod_auth_mysql.

Thứ Tư, 02/06/2010 08:34
31 👨 1.067
0 Bình luận
Sắp xếp theo
    ❖ Tổng hợp