Cài đặt suPHP trên CentOS

Thông thường, khi bạn cài đặt PHP trên Apache và mỗi khi một request được gửi bởi browser Apache sẽ sử dụng user là apache để truy xuất file và trả về cho trình duyệt. Và như vậy giả sử như server của bạn sử dụng nhiều virtual host, thì các file trong những host này phải thiết lập quyền đọc file cho user apache thì apache mới có thể truy xuất và trả về cho trình duyệt được.

Điều này sẽ làm cho virtual host của bạn phần nào kém bảo mật bởi vì người dùng ở host này có thể đọc được file ở host khác do cùng sử dụng chung user là apache. Với suPHP bạn có thể thiết lập chỉ owner của file mới có thể đọc được file mà vẫn giúp cho Apache hoạt động bình thường.

Dưới đây sẽ là bài viết hướng dẫn bạn cách cài đặt suPHP trên CentOS. Các hệ điều hành khác chi tiết hơn thì các bạn tự tìm hiểu thêm nhé.

Để bắt đầu quá trình cài suPHP bạn cần phải thêm package RPMForge nếu như bạn chưa từng thêm trước đó. Đầu tiên bạn vào đường dẫn sau để tìm package phù hợp với hệ thống của mình:

http://pkgs.repoforge.org/rpmforge-release/

* Ghi chú:

  • x86_64: Gói dùng cho CPU loại 64 bit.
  • i386: CPU Intel loại 32 bit.
  • i686: CPU AMD loại 32 bit.

Sau khi đã tìm được gói phù hợp rồi bạn dùng lệnh rpm -Uvh để import vào. Ví dụ nếu tôi import gói dành cho CPU 64 bit thì câu lệnh sẽ như sau:

rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm

Tiếp đến bạn chỉ cần cài đặt mod_suphp vào apache bằng lệnh sau:

yum install mod_suphp

Sau khi quá trình cài đặt hoàn tất, bạn cần phải cấu hình file /etc/suphp.conf. Đây là file cấu hình chung cho suPHP. Trong đó, bạn tìm dòng dưới đây:

x-httpd-php=php:/usr/bin/php

Thay bằng:

x-httpd-php="php:/usr/bin/php-cgi"

Tìm:

x-suphp-cgi=execute:!self

Thay bằng:

x-suphp-cgi="execute:!self"

Tóm lại là suPHP thực thi PHP thông qua CGI, ngoài ra các khai báo này phải bỏ trong hai dấu ngoặc kép.

Tiếp đến, bạn cần phải kích hoạt suPHP cho Apache bằng cách chỉnh sửa trong file /etc/httpd/conf.d/suphp.conf. Bạn tìm lần lượt những dòng dưới đây và phải bảo đảm nó được uncomment, tức không có dấu # ở đầu dòng:

LoadModule suphp_module modules/mod_suphp.so
<IfModule mod_php5.c>
php_admin_flag engine off
</IfModule>
<IfModule mod_php4.c>
php_admin_flag engine off
</IfModule>
AddHandler x-httpd-php .php
AddHandler x-httpd-php .php .php4 .php3 .phtml
suPHP_AddHandler x-httpd-php

Ngoài ra, trong mỗi Virtual Host directive bạn cũng cần khai báo user và group sử dụng cho Virtual Host đó bằng dòng dưới đây:

suPHP_UserGroup username groupname

Ví dụ:

<VirtualHost xxx.xxx.xxx.xxx:80>
suPHP_UserGroup user group
ServerName domain.com
...
</VirtualHost>

Với xxx là địa chỉ ip của Virtual Host, như ở trên thì bạn có thể đặt dòng suPHP_UserGroup username groupname ngay trong directive.

Để tránh việc phải thêm bằng tay cho từng host mỗi khi bạn tạo một host mới thông qua một control panel nào đó, thông thường các control panel đều có hỗ trợ template cho các host. Bạn tìm chỗ quản lý template và thêm vào như cấu trúc ở trên.

Ngoài ra, sau khi cài đặt xong, khả năng website của bạn sẽ không hoạt động được bởi một số nguyên nhân sau:

  1. Lỗi lưu vào folder session, folder này cần phải được set quyền 0777 để suPHP có thể ghi vào.
  2. Sau khi đã có suPHP rồi thì các file phải không được write bởi user khác trừ user được khai báo sử dụng trong directive của Virtual Host.

Để khắc phục lỗi thứ 2 ở trên, bạn có thể cd đến folder của user đó, ví dụ /home/username/ rồi dùng lệnh dưới đây:

chmod -R g-r public_html/*
chmod -R o-r public_html/*

Dòng thứ nhất để xóa quyền ghi của những user cùng group, dòng thứ 2 để xóa quyền ghi của user không phải owner cũng không thuộc group. Đối với suPHP, để bảo mật hơn bạn có thể bỏ cả quyền read của nhóm others hay groups đi bằng lệnh:

chmod -R g-w public_html/*
chmod -R o-w public_html/*

Nếu có gì thắc mắc thêm, bạn vui lòng comment thêm dưới bài này nhé.

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>