Cách cài đặt SuPHP trên CentOS 7.2

theanh

Administrator
Nhân viên
SuPHP là một module apache cho phép PHP nằm dưới một người dùng Linux khác với người dùng apache. Điều này cải thiện tính bảo mật của các trang web được lưu trữ vì bạn có thể chạy các tập lệnh PHP của mỗi trang web dưới một người dùng khác. Hướng dẫn này mô tả việc cài đặt SuPHP trên centOS 7.2 từ nguồn vì không có gói SuPHP nào khả dụng cho CentOS 7.2.


Điều kiện tiên quyết​

Bạn phải có một máy chủ đã cài đặt CentOS 7.2 trở lên, tôi sẽ sử dụng hướng dẫn này làm cơ sở cho thiết lập của mình. Trong chương đầu tiên, tôi sẽ cài đặt máy chủ web Apache. Nếu bạn đã cài đặt apache, hãy bắt đầu ngay với chương 2.

Máy chủ của tôi sẽ sử dụng tên máy chủ server1.example.com và địa chỉ IP 192.168.1.100. Thay thế các giá trị này bằng tên máy chủ và IP của máy chủ của bạn bất cứ khi nào chúng xuất hiện trong hướng dẫn sau.

Tôi khuyên bạn nên cài đặt tường lửa vì lý do bảo mật, nếu bạn chưa cài đặt firewalld, thì bạn có thể cài đặt bằng các lệnh sau:
Mã:
yum -y installfirewalld
khởi động tường lửa và cho phép tường lửa được khởi động khi khởi động.
Mã:
systemctl start firewalld.service
systemctl enable firewalld.service
Tiếp theo, hãy mở cổng SSH của bạn để đảm bảo rằng bạn có thể kết nối với máy chủ bằng SSH.
Mã:
firewall-cmd --permanent --zone=public --add-service=ssh
firewall-cmd --reload

1 Cài đặt Apache 2.4 và PHP 5​

Apache và PHP có sẵn trong kho lưu trữ cơ sở CentOS, vì vậy chúng ta có thể cài đặt cả hai gói phần mềm bằng yum.

Cài đặt Apache và gói phát triển Aapache chứa các tệp cần thiết để biên dịch SuPHP sau này.
Mã:
yum -y install httpd httpd-devel
Cài đặt PHP (Tôi đã thêm một số mô-đun PHP thường dùng):
Mã:
yum -y install phpphp-mysqlphp-gd php-pear php-xml php-xmlrpc php-mbstring curl
Chúng ta có để cho phép Apache khởi động khi khởi động và bắt đầu dịch vụ.
Mã:
systemctl start httpd.service
systemctl enable httpd.service
Chúng ta phải mở các cổng HTTP(80) và HTTPS (443) để máy chủ web có thể truy cập được từ các máy tính khác. Chạy các lệnh sau để cấu hình tường lửa.
Mã:
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

2 Cài đặt SuPHP​

Chúng ta sẽ biên dịch SuPHP từ nguồn trong bước này. Cài đặt các công cụ phát triển để thiết lập chuỗi xây dựng cần thiết.
Mã:
yum -y groupinstall 'Công cụ phát triển'
Và wget tải xuống các tệp nguồn và trình soạn thảo nano.
Mã:
yum -y install wget nano
Tải xuống kho lưu trữ tar.gz nguồn SuPHP và giải nén.
Mã:
cd /usr/local/src
wget http://suphp.org/download/suphp-0.7.2.tar.gz
tar zxvf suphp-0.7.2.tar.gz
CentOS 7 sử dụng Apache 2.4, vì vậy chúng ta phải vá suphp trước khi có thể biên dịch nó với Apache. Bản vá được áp dụng như thế này:
Mã:
wget -O suphp.patch https://lists.marsching.com/pipermail/suphp/attachments/20130520/74f3ac02/attachment.patch
patch -Np1 -d suphp-0.7.2 < suphp.patch
cd suphp-0.7.2
autoreconf -if
[root@server1 suphp-0.7.2]# autoreconf -if
libtoolize: đặt các tệp phụ trợ vào AC_CONFIG_AUX_DIR, `config'.
libtoolize: sao chép tệp `config/ltmain.sh'
libtoolize: Cân nhắc thêm `AC_CONFIG_MACRO_DIR([m4])' vào configure.ac và
libtoolize: chạy lại libtoolize để giữ các macro libtool chính xác trong cây.
libtoolize: Cân nhắc thêm `-I m4' vào ACLOCAL_AMFLAGS trong Makefile.am.
configure.ac:9: cảnh báo: AM_INIT_AUTOMAKE: các biểu mẫu hai và ba đối số đã lỗi thời. Để biết thêm thông tin, hãy xem:
configure.ac:9: http://www.gnu.org/software/automak...Modernize-AM_005fINIT_005fAUTOMAKE-invocation
configure.ac:24: cài đặt 'config/config.guess'
configure.ac:24: cài đặt 'config/config.sub'
configure.ac:9: cài đặt 'config/install-sh'
configure.ac:9: cài đặt 'config/missing'
src/Makefile.am: cài đặt 'config/depcomp'
[root@server1 suphp-0.7.2]#
Lệnh autoreconf áp dụng bản vá, bây giờ chúng ta có thể cấu hình nguồn mới như sau. LƯU Ý: Lệnh configure chỉ có một dòng!
Mã:
./configure --prefix=/usr/ --sysconfdir=/etc/ --with-apr=/usr/bin/apr-1-config --with-apache-user=apache --with-setid-mode=owner --with-logfile=/var/log/httpd/suphp_log
Sau đó biên dịch và cài đặt SuPHP.
Mã:
make
make install
Sau đó thêm mô-đun suPHP vào cấu hình Apache bằng cách thêm tệp suphp.conf mới.
Mã:
nano /etc/httpd/conf.d/suphp.conf
Với nội dung sau.
Mã:
LoadModule suphp_module modules/mod_suphp.so
... và tạo tệp /etc/suphp.conf như sau:
Mã:
nano /etc/suphp.conf
Mã:
[global];Đường dẫn đến tệp nhật kýlogfile=/var/log/httpd/suphp.log;Mức nhật kýloglevel=info;Người dùng Apache đang chạy với tư cáchwebserver_user=apache;Đường dẫn đến tất cả các tập lệnh phải nằm trongdocroot=/;Đường dẫn đến chroot() trước khi thực thi tập lệnh;chroot=/mychroot; Tùy chọn bảo mậtallow_file_group_writeable=trueallow_file_others_writeable=falseallow_directory_group_writeable=trueallow_directory_others_writeable=false;Kiểm tra xem tập lệnh có nằm trong DOCUMENT_ROOT khôngcheck_vhost_docroot=true;Gửi thông báo lỗi nhỏ đến trình duyệterrors_to_browser=false;Biến môi trường PATHenv_path=/bin:/usr/bin;Umask để đặt, chỉ định theo ký hiệu bát phânumask=0077; UID tối thiểumin_uid=100; GID tối thiểumin_gid=100[handlers];Handler cho php-scriptsx-httpd-suphp="php:/usr/bin/php-cgi";Handler cho CGI-scriptsx-suphp-cgi="execute:!self"
Cuối cùng, chúng ta khởi động lại Apache:
Mã:
systemctl restart httpd.service

3 Cấu hình Apache Vhost với SuPHP​

Trong chương này, tôi sẽ chỉ cho bạn cách thêm máy chủ ảo trong apache chạy PHP dưới một người dùng riêng biệt. Tôi sẽ sử dụng tên miền www.example.com cho trang web và PHP sẽ chạy dưới dạng người dùng và nhóm "web1", thư mục gốc tài liệu cho trang web là /var/www/example.com

Đầu tiên, hãy thêm người dùng và nhóm mới "web1".
Mã:
useradd web1
Thêm thư mục gốc của trang web.
Mã:
mkdir /var/www/example.com
chown web1:web1/var/www/example.com
Bây giờ hãy thêm tệp cấu hình máy chủ ảo vào thư mục apache conf.d.
Mã:
nano /etc/httpd/conf.d/example.com.conf
với nội dung sau:
Mã:
 DocumentRoot /var/www/example.com
 ServerName example.com
 ServerAdmin [emailprotected]
 
 
 SetHandler None
 
 
 
 suPHP_Engine on
 
 SetHandler x-httpd-suphp
 
 suPHP_AddHandler x-httpd-suphp
Thay thế tên miền bằng tên miền của riêng bạn trong các dòng ServerName và ServerAdmin.

Sau đó khởi động lại apache để áp dụng các thay đổi cấu hình.
Mã:
systemctl restart httpd.service

4 Kiểm tra thiết lập SuPHP​

Trong chương này, tôi sẽ chỉ cho bạn một số phương pháp để kiểm tra PHP trong trang web này. Đầu tiên, tôi sẽ tạo một tệp sử dụng hàm phpinfo() để hiển thị xem PHP có hoạt động không và liệu nó có chạy ở chế độ CGI không.

Tạo tệp info.php bằng nano:
Mã:
nano/var/www/example.com/info.php
và thêm các dòng sau vào tệp mới:
Mã:
 
Back
Bên trên