웹사이트 검색

CentOS 7.2에 SuPHP를 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. 1 Apache 2.4 및 PHP 5 설치
  3. 2 SuPHP 설치
  4. 3 SuPHP로 Apache Vhost 구성
  5. 4 SuPHP 설정 테스트
  6. 5 이 CentOS 7.2 서버를 가상 머신으로 다운로드
  7. 6개의 링크

SuPHP는 PHP가 Apache 사용자가 아닌 다른 Linux 사용자 아래에 있도록 허용하는 Apache 모듈입니다. 이렇게 하면 다른 사용자로 각 웹사이트의 PHP 스크립트를 실행할 수 있으므로 호스팅된 웹사이트의 보안이 향상됩니다. 이 튜토리얼에서는 CentOS 7.2에 사용할 수 있는 SuPHP 패키지가 없으므로 소스에서 centOS 7.2에 SuPHP를 설치하는 방법을 설명합니다.

전제 조건

CentOS 7.2 이상이 설치된 서버가 있어야 합니다. 이 튜토리얼을 설정의 기초로 사용하겠습니다. 첫 번째 장에서는 Apache 웹 서버를 설치합니다. Apache가 이미 설치되어 있으면 바로 2장부터 시작하십시오.

내 서버는 호스트 이름 server1.example.com과 IP 주소 192.168.1.100을 사용합니다. 다음 자습서에서 발생할 때마다 이 값을 서버의 호스트 이름 및 IP로 바꿉니다.

보안상의 이유로 방화벽을 설치하는 것이 좋습니다. 아직 firewalld를 설치하지 않은 경우 다음 명령을 사용하여 설치할 수 있습니다.

yum -y install firewalld

방화벽을 시작하고 부팅 시 시작되도록 활성화합니다.

systemctl start firewalld.service
systemctl enable firewalld.service

그런 다음 SSH 포트를 열어 SSH로 서버에 연결할 수 있는지 확인합니다.

firewall-cmd --permanent --zone=public --add-service=ssh
firewall-cmd --reload

1 Apache 2.4 및 PHP 5 설치

Apache와 PHP는 CentOS 기본 리포지토리에서 사용할 수 있으므로 yum으로 두 소프트웨어 패키지를 모두 설치할 수 있습니다.

나중에 SuPHP 컴파일에 필요한 파일이 포함된 Apache 및 Aapache 개발 패키지를 설치합니다.

yum -y install httpd httpd-devel

PHP 설치(자주 사용하는 PHP 모듈을 추가했습니다):

yum -y install php php-mysql php-gd php-pear php-xml php-xmlrpc php-mbstring curl

Apache가 부팅 시 시작되고 서비스를 시작하도록 활성화해야 합니다.

systemctl start httpd.service
systemctl enable httpd.service

다른 컴퓨터에서 웹 서버에 액세스할 수 있도록 하려면 HTTP (80) 및 HTTPS(443) 포트를 열어야 합니다. 다음 명령을 실행하여 방화벽을 구성하십시오.

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

2 SuPHP 설치

이 단계에서는 소스에서 SuPHP를 컴파일합니다. 개발 도구를 설치하여 필요한 빌드 체인을 설정하십시오.

yum -y groupinstall 'Development Tools'

그리고 wget으로 소스 파일과 nano 편집기를 다운로드합니다.

yum -y install wget nano

SuPHP 소스 tar.gz 아카이브를 다운로드하고 압축을 풉니다.

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은 Apache 2.4를 사용하므로 Apache에 대해 컴파일하기 전에 suphp를 패치해야 합니다. 패치는 다음과 같이 적용됩니다.

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

autoreconf 명령은 패치를 적용하므로 이제 다음과 같이 새 소스를 구성할 수 있습니다. 참고: 구성 명령은 한 줄입니다!

./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

그런 다음 SuPHP를 컴파일하고 설치합니다.

make
make install

그런 다음 새 suphp.conf 파일을 추가하여 Apache 구성에 suPHP 모듈을 추가합니다.

nano /etc/httpd/conf.d/suphp.conf

다음 내용으로.

LoadModule suphp_module modules/mod_suphp.so

... 다음과 같이 /etc/suphp.conf 파일을 만듭니다.

nano /etc/suphp.conf
[global]
;Path to logfile
logfile=/var/log/httpd/suphp.log
;Loglevel
loglevel=info
;User Apache is running as
webserver_user=apache
;Path all scripts have to be in
docroot=/
;Path to chroot() to before executing script
;chroot=/mychroot
; Security options
allow_file_group_writeable=true
allow_file_others_writeable=false
allow_directory_group_writeable=true
allow_directory_others_writeable=false
;Check wheter script is within DOCUMENT_ROOT
check_vhost_docroot=true
;Send minor error messages to browser
errors_to_browser=false
;PATH environment variable
env_path=/bin:/usr/bin
;Umask to set, specify in octal notation
umask=0077
; Minimum UID
min_uid=100
; Minimum GID
min_gid=100

[handlers]
;Handler for php-scripts
x-httpd-suphp="php:/usr/bin/php-cgi"
;Handler for CGI-scripts
x-suphp-cgi="execute:!self"

마지막으로 Apache를 다시 시작합니다.

systemctl restart httpd.service

3 SuPHP로 Apache Vhost 구성

이 장에서는 별도의 사용자로 PHP를 실행하는 Apache에서 가상 호스트를 추가하는 방법을 보여줍니다. 웹사이트에 도메인 이름 www.example.com을 사용하고 PHP는 사용자 및 그룹 "web1"로 실행됩니다. 웹사이트의 문서 루트는 /var/www/example.com입니다.

먼저 새 사용자와 "web1" 그룹을 추가합니다.

useradd web1

웹 사이트 루트 디렉터리를 추가합니다.

mkdir /var/www/example.com
chown web1:web1 /var/www/example.com

이제 apache conf.d 디렉토리에 가상 호스트 구성 파일을 추가하십시오.

nano /etc/httpd/conf.d/example.com.conf

이 콘텐츠:

<VirtualHost *>
DocumentRoot /var/www/example.com
ServerName example.com
ServerAdmin

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler None
</FilesMatch>

<IfModule mod_suphp.c>
suPHP_Engine on
<FilesMatch "\.php[345]?$">
SetHandler x-httpd-suphp
</FilesMatch>
suPHP_AddHandler x-httpd-suphp
</IfModule>
</VirtualHost>

ServerName 및 ServerAdmin 줄에서 도메인 이름을 자신의 도메인으로 바꿉니다.

그런 다음 Apache를 다시 시작하여 구성 변경 사항을 적용합니다.

systemctl restart httpd.service

4 SuPHP 설정 테스트

이 장에서는 이 웹사이트에서 PHP를 테스트하는 몇 가지 방법을 보여드리겠습니다. 먼저 phpinfo() 함수를 사용하여 PHP가 작동하는지, 현재 CGI 모드에서 실행되는지를 보여주는 파일을 생성합니다.

nano를 사용하여 info.php 파일을 만듭니다.

nano /var/www/example.com/info.php

새 파일에 다음 줄을 추가합니다.

<?php
phpinfo();

그런 다음 파일 소유자를 web1 사용자 및 그룹으로 변경합니다.

chown web1:web1 /var/www/example.com/info.php

웹 브라우저에서 http://example.com/info.php 파일의 URL을 열면 다음 페이지가 표시됩니다.

중요한 것은 CGI/FastCGI를 보여주는 ServerAPI 라인입니다. 이는 PHP가 mod_php가 아닌 SuPHP를 통해 실행됨을 보여줍니다.

이제 PHP가 올바른 사용자(web1)에서 실행되는지 테스트하겠습니다. SuPHP는 어떤 사용자를 사용해야 하는지 어떻게 알 수 있습니까? SuPHP는 PHP를 PHP 스크립트를 소유한 사용자로 전환하므로 웹 루트 폴더 /var/www/example.com에 있는 모든 PHP 파일을 web1 사용자 및 그룹이 소유하는 것이 중요합니다.

그렇다면 PHP가 올바른 사용자를 사용하는지 테스트하는 방법은 무엇입니까? 한 가지 방법은 사용자 이름을 반환하는 "whoami" 명령을 실행하는 것입니다.

웹 사이트 루트에 새 스크립트 testuser.php를 만들겠습니다.

nano /var/www/example.com/testuser.php

이 콘텐츠:

<?php
system('whoami');

그런 다음 파일 소유자를 web1 사용자 및 그룹으로 변경합니다.

chown web1:web1 /var/www/example.com/testuser.php

웹 브라우저에서 http://example.com/testuser.php를 열면 결과는 web1입니다.

SuPHP는 이 웹사이트의 사용자로 PHP 파일을 구성하고 실행합니다. 웹사이트 디렉토리에서 테스트 파일을 제거하고 웹사이트 스크립트 추가를 시작하십시오.

5 이 CentOS 7.2 서버를 가상 머신으로 다운로드

이 설정은 howtoforge 가입자를 위해 ova/ovf 형식(VMWare 및 Virtualbox와 호환 가능)의 가상 머신 다운로드로 사용할 수 있습니다.

VM에 대한 로그인 세부 정보

  • 루트 비밀번호: howtoforge\n
  • "administrator" 사용자의 비밀번호: howtoforge\n

처음 로그인할 때 두 비밀번호를 모두 변경하세요.

  • VM의 IP 주소는 192.168.1.100입니다.

6 링크

  • 센트OS
  • Apache 웹 서버
  • SuPHP