서버 설정 · 6 min read · Jan 08, 2026

완벽한 서버 - CentOS 6.5 x86_64 (Apache2, MySQL, PHP, PureFTPD, Postfix, Dovecot 및 ISPConfig 3) - 페이지 4

13 MySQL 비밀번호 설정 및 phpMyAdmin 구성

MySQL 루트 계정의 비밀번호를 설정합니다:

mysql_secure_installation

[root@server1 tmp]# mysql_secure_installation

NOTE: 이 스크립트의 모든 부분을 실행하는 것이 모든 MySQL 서버에서 권장됩니다. 프로덕션 환경에서 사용 중인 서버! 각 단계를 주의 깊게 읽어주세요!

MySQL에 로그인하여 보안을 설정하려면 현재 루트 사용자 비밀번호가 필요합니다. MySQL을 방금 설치했으며 루트 비밀번호를 아직 설정하지 않았다면 비밀번호는 비어 있으므로 여기서 그냥 Enter 키를 누르세요.

현재 루트 비밀번호 입력 (없으면 Enter): OK, 비밀번호가 성공적으로 사용되었습니다. 계속 진행합니다…

루트 비밀번호를 설정하면 적절한 권한 없이 누구도 MySQL 루트 사용자로 로그인할 수 없도록 보장합니다.

루트 비밀번호 설정? [Y/n] <– ENTER 새 비밀번호: <– yourrootsqlpassword 새 비밀번호 재입력: <– yourrootsqlpassword 비밀번호가 성공적으로 업데이트되었습니다! 권한 테이블을 다시 로드하는 중… … 성공!

기본적으로 MySQL 설치에는 익명 사용자가 있어 누구나 사용자 계정을 생성하지 않고도 MySQL에 로그인할 수 있습니다. 이는 테스트 용도로만 의도되며 설치를 조금 더 원활하게 진행하기 위한 것입니다. 프로덕션 환경으로 이동하기 전에 이를 제거해야 합니다.

익명 사용자 제거? [Y/n] <– ENTER … 성공!

일반적으로 루트는 ‘localhost’에서만 연결할 수 있어야 합니다. 이는 누군가가 네트워크에서 루트 비밀번호를 추측할 수 없도록 보장합니다.

원격 루트 로그인 금지? [Y/n] <– ENTER … 성공!

기본적으로 MySQL에는 누구나 접근할 수 있는 ‘test’라는 데이터베이스가 포함되어 있습니다. 이는 또한 테스트 용도로만 의도되며 프로덕션 환경으로 이동하기 전에 제거해야 합니다.

테스트 데이터베이스 및 접근 제거? [Y/n] <– ENTER

  • 테스트 데이터베이스 삭제 중… … 성공!
  • 테스트 데이터베이스에 대한 권한 제거 중… … 성공!

권한 테이블을 다시 로드하면 지금까지 수행된 모든 변경 사항이 즉시 적용됩니다.

지금 권한 테이블을 다시 로드하시겠습니까? [Y/n] <– ENTER … 성공!

정리 중…

모든 작업이 완료되었습니다! 위의 모든 단계를 완료했다면 MySQL 설치가 이제 안전해야 합니다.

MySQL을 사용해 주셔서 감사합니다!

[root@server1 tmp]#

이제 phpMyAdmin을 구성합니다. phpMyAdmin이 localhost에서만 연결을 허용하도록 Apache 구성을 변경합니다( 구문을 주석 처리합니다):

vi /etc/httpd/conf.d/phpmyadmin.conf

CentOS는 패키지 사용에 있어 파일 이름이 일관되지 않으므로, 리포지토리 순서에 따라 phpmyadmin 구성 파일이 camelcase일 수 있습니다. 따라서 위의 vi 명령이 빈 새 파일을 생성하면 대신 다음 명령을 사용하세요:

vi /etc/httpd/conf.d/phpMyAdmin.conf

| # # MySQL을 관리하기 위한 웹 애플리케이션 # # # Order Deny,Allow # Deny from all # Allow from 127.0.0.1 # Alias /phpmyadmin /usr/share/phpmyadmin Alias /phpMyAdmin /usr/share/phpmyadmin Alias /mysqladmin /usr/share/phpmyadmin |

다음으로 phpMyAdmin의 인증을 쿠키에서 http로 변경합니다:

vi /usr/share/phpmyadmin/config.inc.php

| [...] /* 인증 유형 */ $cfg['Servers'][$i]['auth_type'] = 'http'; [...] |

그런 다음 Apache의 시스템 시작 링크를 생성하고 시작합니다:

chkconfig –levels 235 httpd on
/etc/init.d/httpd start

이제 브라우저를 http://server1.example.com/phpmyadmin/ 또는 http://192.168.0.100/phpmyadmin/로 이동하여 사용자 이름 root와 새 루트 MySQL 비밀번호로 로그인할 수 있습니다.

다음과 같은 오류 메시지가 표시되면:

[root@server1 tmp]# /etc/init.d/httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed for server1.example.com
httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName

호스트 이름이 DNS에서 확인되지 않거나 아직 /etc/hosts 파일에 설정되지 않았습니다. 이 문제를 해결하려면 다음을 실행하세요:

echo “192.168.1.100 server1.example.com server1” >> /etc/hosts

위 명령에서 “server1.example.com”을 전체 호스트 이름으로, “server1”을 호스트 이름의 하위 부분으로 바꾸세요.

14 Amavisd-new, SpamAssassin 및 ClamAV 설치

amavisd-new, spamassassin 및 clamav를 설치하려면 다음 명령을 실행합니다:

yum -y install amavisd-new spamassassin clamav clamd unzip bzip2 unrar perl-DBD-mysql

그런 다음 freshclam, amavisd 및 clamd.amavisd를 시작합니다:

sa-update
chkconfig –levels 235 amavisd on
chkconfig –del clamd
chkconfig –levels 235 clamd.amavisd on
/usr/bin/freshclam
/etc/init.d/amavisd start
/etc/init.d/clamd.amavisd start

15 mod_php, mod_fcgi/PHP5 및 suPHP가 포함된 Apache2 설치

ISPConfig 3은 mod_php, mod_fcgi/PHP5, cgi/PHP5 및 suPHP를 웹사이트별로 사용할 수 있도록 합니다.

다음과 같이 mod_php5, mod_fcgid 및 PHP5가 포함된 Apache2를 설치할 수 있습니다:

yum -y install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel mod_fcgid php-cli httpd-devel

다음으로 /etc/php.ini를 엽니다…

vi /etc/php.ini

… 그리고 오류 보고를 변경합니다(알림이 더 이상 표시되지 않도록) 및 cgi.fix_pathinfo=1의 주석을 제거합니다:

| [...] ;error_reporting = E_ALL & ~E_DEPRECATED error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED [...] ; cgi.fix_pathinfo는 CGI에 대한 *실제* PATH_INFO/PATH_TRANSLATED 지원을 제공합니다. PHP의 이전 동작은 PATH_TRANSLATED를 SCRIPT_FILENAME으로 설정하고 PATH_INFO가 무엇인지 이해하지 못하는 것이었습니다. PATH_INFO에 대한 자세한 내용은 cgi 사양을 참조하세요. 이를 1로 설정하면 PHP CGI가 경로를 사양에 맞게 수정합니다. 0으로 설정하면 PHP가 이전과 같이 동작합니다. 기본값은 1입니다. 스크립트를 수정하여 PATH_TRANSLATED가 아닌 SCRIPT_FILENAME을 사용해야 합니다. ; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo cgi.fix_pathinfo=1 [...] |

다음으로 suPHP를 설치합니다(리포지토리에 mod_suphp 패키지가 있지만 불행히도 ISPConfig와 호환되지 않으므로 suPHP를 직접 빌드해야 합니다):

cd /tmp
wget http://suphp.org/download/suphp-0.7.1.tar.gz
tar xvfz suphp-0.7.1.tar.gz
cd suphp-0.7.1/
./configure –prefix=/usr –sysconfdir=/etc –with-apr=/usr/bin/apr-1-config –with-apxs=/usr/sbin/apxs –with-apache-user=apache –with-setid-mode=owner –with-php=/usr/bin/php-cgi –with-logfile=/var/log/httpd/suphp_log –enable-SUPHP_USE_USERGROUP=yes
make
make install

그런 다음 Apache 구성에 suPHP 모듈을 추가합니다…

vi /etc/httpd/conf.d/suphp.conf

| LoadModule suphp_module modules/mod_suphp.so |

… 그리고 /etc/suphp.conf 파일을 다음과 같이 생성합니다:

vi /etc/suphp.conf

| [global] ;로그 파일 경로 logfile=/var/log/httpd/suphp.log ;로그 수준 loglevel=info ;Apache가 실행되는 사용자 webserver_user=apache ;모든 스크립트가 있어야 하는 경로 docroot=/ ;스크립트를 실행하기 전에 chroot()할 경로 ;chroot=/mychroot ; 보안 옵션 allow_file_group_writeable=true allow_file_others_writeable=false allow_directory_group_writeable=true allow_directory_others_writeable=false ;DOCUMENT_ROOT 내에 스크립트가 있는지 확인 check_vhost_docroot=true ;브라우저에 경미한 오류 메시지 전송 errors_to_browser=false ;PATH 환경 변수 env_path=/bin:/usr/bin ;설정할 umask, 8진수 표기법으로 지정 umask=0077 ; 최소 UID min_uid=100 ; 최소 GID min_gid=100 [handlers] ;php 스크립트에 대한 핸들러 x-httpd-suphp="php:/usr/bin/php-cgi" ;CGI 스크립트에 대한 핸들러 x-suphp-cgi="execute:!self" |

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

/etc/init.d/httpd restart

15.1 루비

버전 3.0.3부터 ISPConfig 3은 루비에 대한 기본 지원을 제공합니다. CGI/FastCGI 대신 ISPConfig는 서버의 Apache에서 mod_ruby가 사용 가능해야 합니다.

CentOS 6.4에는 mod_ruby 패키지가 없으므로 직접 컴파일해야 합니다. 먼저 몇 가지 필수 패키지를 설치합니다:

yum -y install httpd-devel ruby ruby-devel

다음으로 mod_ruby를 다음과 같이 다운로드하고 설치합니다:

cd /tmp
wget http://fossies.org/unix/www/apache_httpd_modules/mod_ruby-1.3.0.tar.gz
tar zxvf mod_ruby-1.3.0.tar.gz
cd mod_ruby-1.3.0/
./configure.rb –with-apr-includes=/usr/include/apr-1
make
make install

마지막으로 mod_ruby 모듈을 Apache 구성에 추가해야 하므로 /etc/httpd/conf.d/ruby.conf 파일을 생성합니다…

vi /etc/httpd/conf.d/ruby.conf

| LoadModule ruby_module modules/mod_ruby.so RubyAddPath /1.8 |

… 그리고 Apache를 재시작합니다:

/etc/init.d/httpd restart

(루비 경로 추가 지시문인 RubyAddPath /1.8을 생략하면 루비 파일을 호출할 때 Apache의 오류 로그에서 다음과 같은 오류가 발생합니다:

[Thu May 26 02:05:05 2011] [error] mod_ruby: ruby:0:in `require’: no such file to load – apache/ruby-run (LoadError)
[Thu May 26 02:05:05 2011] [error] mod_ruby: failed to require apache/ruby-run
[Thu May 26 02:05:05 2011] [error] mod_ruby: error in ruby ) #### 15.2 파이썬 mod_python을 설치하려면 간단히 다음을 실행합니다… yum -y install mod_python … 그리고 나서 Apache를 재시작합니다: /etc/init.d/httpd restart #### 15.3 WebDAV WebDAV는 이미 활성화되어 있어야 하지만 이를 확인하려면 /etc/httpd/conf/httpd.conf를 열고 다음 세 가지 모듈이 활성화되어 있는지 확인합니다: vi /etc/httpd/conf/httpd.conf | [...] LoadModule auth_digest_module modules/mod_auth_digest.so [...] LoadModule dav_module modules/mod_dav.so [...] LoadModule dav_fs_module modules/mod_dav_fs.so [...] | /etc/httpd/conf/httpd.conf를 수정해야 하는 경우 Apache를 재시작하는 것을 잊지 마세요: /etc/init.d/httpd restart #### 15.4 추가 PHP 버전 ISPConfig 3.0.5부터는 하나의 서버에서 여러 PHP 버전을 사용할 수 있으며(ISPConfig를 통해 선택 가능) FastCGI 및 PHP-FPM을 통해 실행할 수 있습니다. CentOS에서 추가 PHP 버전을 빌드하는 절차는 이 튜토리얼에 설명되어 있습니다: ISPConfig 3에서 여러 PHP 버전 사용하기 (PHP-FPM & FastCGI) (CentOS 6.3) ### 16 PureFTPd 설치 PureFTPd는 다음 명령으로 설치할 수 있습니다: yum -y install pure-ftpd 그런 다음 시스템 시작 링크를 생성하고 PureFTPd를 시작합니다: chkconfig –levels 235 pure-ftpd on
/etc/init.d/pure-ftpd start 이제 PureFTPd를 구성하여 FTP 및 TLS 세션을 허용합니다. FTP는 모든 비밀번호와 모든 데이터가 일반 텍스트로 전송되기 때문에 매우 안전하지 않은 프로토콜입니다. TLS를 사용하면 전체 통신을 암호화할 수 있으므로 FTP를 훨씬 더 안전하게 만들 수 있습니다. TLS에는 OpenSSL이 필요합니다. OpenSSL을 설치하려면 다음을 실행합니다: yum install openssl /etc/pure-ftpd/pure-ftpd.conf를 엽니다… vi /etc/pure-ftpd/pure-ftpd.conf FTP 및 TLS 세션을 허용하려면 TLS를 1로 설정합니다: | [...] # 이 옵션은 세 가지 값을 수용할 수 있습니다: # 0 : SSL/TLS 암호화 레이어 비활성화 (기본값). # 1 : 전통적인 세션과 암호화된 세션 모두 수용. # 2 : SSL/TLS 보안 메커니즘을 사용하지 않는 연결을 거부, # 익명 세션 포함. # 이 주석을 맹목적으로 제거하지 마세요. 다음을 확인하세요: # 1) 서버가 SSL/TLS 지원으로 컴파일되었는지 (--with-tls), # 2) 유효한 인증서가 있는지, # 3) 호환 가능한 클라이언트만 로그인할 수 있는지. TLS 1 [...] | TLS를 사용하려면 SSL 인증서를 생성해야 합니다. 나는 /etc/ssl/private/에 생성하므로 먼저 해당 디렉토리를 생성합니다: mkdir -p /etc/ssl/private/ 그런 다음 다음과 같이 SSL 인증서를 생성할 수 있습니다: openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem 국가 이름 (2자리 코드) [XX]: <– 국가 이름 입력 (예: “DE”).
주 또는 지방 이름 (전체 이름) []: <– 주 또는 지방 이름 입력.
지역 이름 (예: 도시) [기본 도시]: <– 도시 입력.
조직 이름 (예: 회사) [기본 회사]: <– 조직 이름 입력 (예: 회사 이름).
조직 단위 이름 (예: 섹션) []: <– 조직 단위 이름 입력 (예: “IT 부서”).
공통 이름 (예: 귀하의 이름 또는 서버의 호스트 이름) []: <– 시스템의 완전한 도메인 이름 입력 (예: “server1.example.com”).
이메일 주소 []: <– 이메일 주소 입력. SSL 인증서의 권한을 변경합니다: chmod 600 /etc/ssl/private/pure-ftpd.pem 마지막으로 PureFTPd를 재시작합니다: /etc/init.d/pure-ftpd restart 그게 다입니다. 이제 FTP 클라이언트를 사용하여 연결을 시도할 수 있습니다. 그러나 FTP 클라이언트를 TLS를 사용하도록 구성해야 합니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.