Kênh Giải Pháp VN - Công Nghệ Máy Chủ Mạng - Giải Pháp Máy Chủ - Giải Pháp Mạng Doanh Nghiệp - Tư Vấn Giải Pháp Mạng Máy Chủ - VN Solutions Channel :: Bảo vệ thư mục web với mod_auth_mysql trên Apache2 - Bao ve thu muc web voi mod_auth_mysql tren Apache2
Quản Trị  Hệ Điều Hành Linux - Unix
 
Bảo vệ thư mục web với mod_auth_mysql trên Apache2
08:50 | 19/11/2011
Đối với các nhà lập trình web, việc đặt mật khẩu để bảo vệ cho những thư mục web của mình là điều rất quan trọng.
 Bài viết sau đây chúng tôi sẽ hướng dẫn các user từ một cơ sở dữ liệu MySQL thực hiện điều này với mod_auth_mysql trên Apache2 sử dụng máy chủ Debian Squeeze.
 Đây là sự thay thế cho tập tin mật khẩu văn bản đơn giản được cung cấp bởi mod_auth và cho phép bạn sử dụng cú pháp SQL bình thường để tạo/chỉnh sửa/xóa user.



Bạn cũng có thể cấu hình mod_auth_mysql để xác thực đối với một bảng người dùng hiện tại của MySQL.

Một số lưu ý


Ở ví dụ minh họa này chúng tôi sử dụng vhost http://www.example.com với tập tin cấu hình vhost /etc/apache2/sites-available/www.example.com.vhost
và thư mục root /var/www/www.example.com/web.
Yêu cầu đặt ra là thiết lập mật khẩu để bảo vệ thư mục /var/www/www.example.com/web/protecteddir (dịch thành http://www.example.com/protecteddir/).

Cài đặt MySQL, mod_auth_mysql

Để cài đặt MySQL và mod_auth_mysql, chúng ta chạy lệnh:

apt-get install mysql-server mysql-client libapache2-mod-auth-mysql

Bạn sẽ được yêu cầu cung cấp mật khẩu cho user root MySQL:

New password for the MySQL "root" user: <-- yourrootsqlpassword
Repeat password for the MySQL "root" user: <-- yourrootsqlpassword

Sau đó kích hoạt module mod_auth_mysql:

a2enmod auth_mysql

Khởi động lại Apache:

/etc/init.d/apache2 restart

Cấu hình mod_auth_mysql

Bạn có thể tìm thấy các tài liệu hướng dẫn cho mod_auth_mysql trong thư mục /usr/share/doc/libapache2-mod-auth-mysql. Để đọc được nó cần gunzip tập tin DIRECTIVES.gz và USAGE.gz:

cd /usr/share/doc/libapache2-mod-auth-mysql
gunzip DIRECTIVES.gz
vi DIRECTIVES

gunzip USAGE.gz
vi USAGE

Sau khi đọc hai tập tin này, chúng ta tạo một cơ sở dữ liệu MySQL có tên examplecomdb, trong đó tạo bảng mysql_auth để chứa những user và password.
Thêm vào đó tạo user examplecom_admin, được sử dụng bởi mod_auth_mysql để kết nối tới MySQL sau này.

mysqladmin -u root -p create examplecomdb

mysql -u root -p

GRANT SELECT, INSERT, UPDATE, DELETE ON examplecomdb.* TO 'examplecom_admin'@'localhost' IDENTIFIED BY 'examplecom_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON examplecomdb.* TO 'examplecom_admin'@'localhost.localdomain' IDENTIFIED BY 'examplecom_admin_password';
FLUSH PRIVILEGES;

(Thay examplecom_admin_password bằng mật khẩu theo lựa chọn của bạn).

USE examplecomdb;

create table mysql_auth (
username char(25) not null,
passwd char(32),
groups char(25),
primary key (username)
);

(Tất nhiên bạn cũng có thể sử dụng các bảng hiện tại để lưu giữ thông tin của user, và thêm các trường cho bảng chẳng hạn như để xác định xem người dùng hoạt động hay không.)

Bây giờ chúng ta insert người dùng test vào bảng mysql_auth với mật khẩu test (mã hóa sang MD5); user này thuộc nhóm testgroup:

INSERT INTO `mysql_auth` (`username`, `passwd`, `groups`) VALUES('test', MD5('test'), 'testgroup');

Sau đó rời khỏi MySQL shell:

quit;

Nếu muốn tạo tập tin .htaccess trong thư mục /var/www/www.example.com/web/protecteddir để chứa cấu hình mod_auth_mysql,
đầu tiên cần chỉnh sửa cấu hình vhost để .htaccess được phép chứa các chỉ thị xác thực.
 Chúng ta có thể làm điều này với dòng AllowOverride AuthConfig hoặc AllowOverride All (cho phép .htaccess ghi đè lên toàn bộ thiết lập trong cấu hình vhost, không chỉ là thiết lập xác thực).

vi /etc/apache2/sites-available/www.example.com.vhost

[...]
       
                AllowOverride AuthConfig
       
[...]

(Bạn có thể rời khỏi cấu hình trên nếu AllowOverride AuthConfig
hoặc AllowOverride All đã tồn tại cài đặt cho thư mục cha /var/www/www.example.com/web - /var/www/www.example.com/web/protecteddir
kế thừa những thiết lập này, trừ khi một cái gì đó khác được đặt bên trong ...).

Khởi động lại Apache:

/etc/init.d/apache2 reload

Bây giờ chúng ta tạo tập tin .htaccess:

vi /var/www/www.example.com/web/protecteddir/.htaccess

AuthBasicAuthoritative Off
AuthUserFile /dev/null
AuthMySQL On
AuthName "Authentication required"
AuthType Basic
Auth_MySQL_Host localhost
Auth_MySQL_User examplecom_admin
Auth_MySQL_Password examplecom_admin_password
AuthMySQL_DB examplecomdb
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

Các dòng AuthBasicAuthoritative Off và AuthUserFile /dev/null để ngăn chặn các lỗi giống như trong file /var/log/apache2/error.log của Apache:

[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 bổ sung các trường trong bảng MySQL để xác định nếu một user cho phép đăng nhập hay không (chẳng hạn trường có tên active),
bạn có thể thêm chỉ thị Auth_MySQL_Password_Clause, ví dụ:

[...]
Auth_MySQL_Password_Clause " AND active=1"
[...]

Lưu ý rằng phải đặt các chuỗi trong dấu ngoặc kép sau một dấu cách!

Dòng require valid-user làm cho mỗi user được liệt kê trong bảng mysql_auth có thể đăng nhập nếu cung cấp mật khẩu chính xác.
Trường hợp bạn chỉ muốn user nhất định được phép đăng nhập, có thể thay bằng:

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

Hoặc nếu chỉ muốn các thành viên trong một nhóm nhất định được phép đăng nhập, ta sử dụng lệnh:

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

Bây giờ bạn có thể thử truy cập http://www.example.com/protecteddir/, và sẽ được yêu cầu nhập vào username/password:





Thay vì sử dụng tập tin .htaccess chúng ta có thể đặt cấu hình mod_auth_mysql trực tiếp trong cấu hình vhost.

 Nếu muốn làm điều này, chỉ cần xóa tập tin .htaccess...

rm -f /var/www/www.example.com/web/protecteddir/.htaccess

… và mở tập tin cấu hình vhost:

vi /etc/apache2/sites-available/www.example.com.vhost

Thêm vào phần sau đây (hoặc thay đổi nội dung đã tồn tại trong ...).

 Lưu ý rằng lần này chúng ta không cần hai dòng AllowOverride AuthConfig

 hoặc AllowOverride All nữa bởi không sử dụng tập tin .htaccess.

[...]
        
                AuthBasicAuthoritative Off
                AuthUserFile /dev/null
                AuthMySQL On
                AuthName "Authentication required"
                AuthType Basic
                Auth_MySQL_Host localhost
                Auth_MySQL_User examplecom_admin
                Auth_MySQL_Password examplecom_admin_password
                AuthMySQL_DB examplecomdb
                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
        
[...]

Khởi động lại Apache:

/etc/init.d/apache2 reload

Theo : Đ.Hải - Quantrimang
 
Ý kiến phản hồi và bình luận Góp ý kiến của bạn

Các tin mới nhất :
- Thiết lập 1 hệ thống High-availability - Loadbalancing và Reverse Proxy cho Web Server trên CentOS 6/RHEL Sử dụng HAProxy và Keepalived
- Đồng bộ hóa dữ liệu giữa hai Server Ubuntu 11.10 sử dụng Unison.
- Bảo vệ thư mục web với mod_auth_mysql trên Apache2
- Tích hợp MailScanner - ClamAV - SpamAssassin - SquirrelMail vào PostfixTrên Centos 5.7
- Cài đặt rsnapshot trên CentOS
- Xây dựng hệ thống NAS Cluster sử dụng OpenFiler
- Cài đặt Nginx trên Ubuntu 11.10
- Thiết lập hệ thống Active/active Samba CTDB Cluster sử dụng GFS & DRBD Trên Centos 5.7 X86_64
- Thiết lập máy chủ Ubuntu 11.10 và cài đặt ISPConfig 3 (Phần3)
- Thiết lập máy chủ Ubuntu 11.10 và cài đặt ISPConfig 3 (Phần2)
Các tin liên quan :
- Tích hợp MailScanner - ClamAV - SpamAssassin - SquirrelMail vào PostfixTrên Centos 5.7
- Cài đặt rsnapshot trên CentOS
- Xây dựng hệ thống NAS Cluster sử dụng OpenFiler
- Cài đặt Nginx trên Ubuntu 11.10
- Thiết lập hệ thống Active/active Samba CTDB Cluster sử dụng GFS & DRBD Trên Centos 5.7 X86_64
- Thiết lập máy chủ Ubuntu 11.10 và cài đặt ISPConfig 3 (Phần3)
- Thiết lập máy chủ Ubuntu 11.10 và cài đặt ISPConfig 3 (Phần2)
- Thiết lập máy chủ Ubuntu 11.10 và cài đặt ISPConfig 3 (Phần 1)
- Xây dựng hệ thống File server có độ sẵn sàng cao (HA) sử dụng NFS,DRDB, Heartbeat trên Centos6 X86_64
- Upgrade Ubuntu 11.04 lên Ubuntu 11.10
Xem tiếp
Bài nhiều người đọc cùng chuyên mục
50 câu lệnh Linux phải nhớ
 
Thiết lập 1 hệ thống High-availability - Loadbalancing và Reverse Proxy cho Web Server trên CentOS 6/RHEL Sử dụng HAProxy và Keepalived
 
Thiết lập Openvpn trên Server Linux
 
Thiết lập tường lửa Iptables cho Linux - Phần 1
 
Cài đặt và cấu hình Server Linux CentOS hoàn chỉnh (Phần 1)
 
Cài Đặt Web Server (LAMP )Trên Centos 6 X86_64
 
Cấu hình ftp server với vsftpd
 
Trang chủ | Giới thiệu | Quảng cáo | Liên hệ
Giấy phép ICP số 199/GP-TTĐT. Bộ Thông tin và Truyền thông cấp.
Cơ quan quản lý  : Công Ty TNHH Phát Triển Kỹ Thuật và Thương Mại Phan Nguyễn
Bản quyền © 2010-2011 Kenhgiaiphap.vn . Giữ toàn quyền.
Ghi rõ nguồn "Kenhgiaiphap.vn" khi phát hành lại thông tin từ website này.