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.
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:
khởi động tường lửa và cho phép tường lửa được khởi động khi khởi động.
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.
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.
Cài đặt PHP (Tôi đã thêm một số mô-đun PHP thường dùng):
Chúng ta có để cho phép Apache khởi động khi khởi động và bắt đầu dịch vụ.
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.
Và wget tải xuống các tệp nguồn và trình soạn thảo nano.
Tải xuống kho lưu trữ tar.gz nguồn SuPHP và giải nén.
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:
[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!
Sau đó biên dịch và cài đặt SuPHP.
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.
Với nội dung sau.
... và tạo tệp /etc/suphp.conf như sau:
Cuối cùng, chúng ta khởi động lại Apache:
Đầu tiên, hãy thêm người dùng và nhóm mới "web1".
Thêm thư mục gốc của trang web.
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.
với nội dung sau:
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.
Tạo tệp info.php bằng nano:
và thêm các dòng sau vào tệp mới:
Đ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
Mã:
systemctl start firewalld.service
systemctl enable firewalld.service
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
Mã:
yum -y install phpphp-mysqlphp-gd php-pear php-xml php-xmlrpc php-mbstring curl
Mã:
systemctl start httpd.service
systemctl enable httpd.service
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'
Mã:
yum -y install wget nano
Mã:
cd /usr/local/src
wget http://suphp.org/download/suphp-0.7.2.tar.gz
tar zxvf suphp-0.7.2.tar.gz
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
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
Mã:
make
make install
Mã:
nano /etc/httpd/conf.d/suphp.conf
Mã:
LoadModule suphp_module modules/mod_suphp.so
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"
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
Mã:
mkdir /var/www/example.com
chown web1:web1/var/www/example.com
Mã:
nano /etc/httpd/conf.d/example.com.conf
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
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
Mã: