서버 설치 · 7 min read · Jan 27, 2026

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

8 Postfix, Dovecot, MySQL 설치

실행

zypper install postfix postfix-mysql mysql-community-server libmysqlclient-devel dovecot21 dovecot21-backend-mysql pwgen cron python

다음 메시지가 표시되면 exim을 제거하도록 선택하십시오:

문제: sendmail-8.14.5-85.1.2.x86_64는 postfix-2.9.6-1.2.1.x86_64에서 제공하는 postfix와 충돌합니다.
해결책 1: 다음 작업이 수행됩니다:
postfix-2.9.6-1.2.1.x86_64를 설치하지 않습니다.
do not install postfix-mysql-2.9.6-1.2.1.x86_64
해결책 2: sendmail-8.14.5-85.1.2.x86_64의 제거

위의 해결책 중에서 번호를 선택하거나 취소하십시오 [1/2/c] (c): <– 2

다음 심볼릭 링크를 생성하십시오:

ln -s /usr/lib64/dovecot/modules /usr/lib/dovecot

이 시점에서 MySQL이 시작되지 않기 때문에 재부팅해야 했습니다. 오류:

Failed to issue method call: Unit mysql.service failed to load: No such file or directory. See system logs and 'systemctl status mysql.service' for details.
reboot

편집기로 MySQL 구성 파일 /etc/my.cnf를 엽니다

vi /etc/my.cnf

그리고 “ sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES “ 줄을 다음과 같이 변경합니다:

sql_mode=NO_ENGINE_SUBSTITUTION

그런 다음 편집기로 /usr/my.cnf 파일을 엽니다

vi /usr/my.cnf

그리고 sql 모드를

sql_mode=NO_ENGINE_SUBSTITUTION

거기에서도 변경합니다.

MySQL, Postfix 및 Dovecot를 시작하고 부팅 시 시작되도록 서비스를 활성화합니다.

systemctl enable mysql.service  
systemctl start mysql.service
systemctl enable postfix.service  
systemctl start postfix.service
systemctl enable dovecot.service  
systemctl start dovecot.service

이제 getmail 패키지를 설치합니다:

zypper install getmail

MySQL 설치를 안전하게 하려면 다음을 실행하십시오:

mysql_secure_installation

이제 여러 질문을 하게 됩니다:

server1:~ # mysql_secure_installation

NOTE: 이 스크립트의 모든 부분을 실행하는 것이 모든 MySQL
서버에서 권장됩니다! 각 단계를 주의 깊게 읽으십시오!

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

현재 root 비밀번호 입력 (없으면 Enter): <– ENTER
OK, 비밀번호를 성공적으로 사용했습니다. 진행 중…

root 비밀번호를 설정하면 적절한
인증 없이 아무도 MySQL root 사용자로 로그인할 수 없습니다.

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

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

익명 사용자를 제거하시겠습니까? [Y/n] <– Y
… 성공!

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

원격으로 root 로그인 금지? [Y/n] <– Y
… 성공!

기본적으로 MySQL에는 누구나 접근할 수 있는 ‘test’라는 데이터베이스가 있습니다.
이는 테스트 전용이며 생산 환경으로 이동하기 전에 제거해야 합니다.

테스트 데이터베이스 및 접근 권한을 제거하시겠습니까? [Y/n] <– Y

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

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

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

정리 중…

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

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

server1:~ #

이제 MySQL 설정이 안전해야 합니다.

9 Amavisd-new, Spamassassin 및 Clamav

Amavisd-new, Spamassassin 및 Clamav 바이러스 백신을 설치합니다. 실행

zypper install amavisd-new clamav clamav-db zoo unzip unrar bzip2 unarj perl-DBD-mysql

/etc/amavisd.conf를 엽니다…

vi /etc/amavisd.conf

… 그리고 $mydomain 줄 아래에 올바른 호스트 이름으로 $myhostname 줄을 추가합니다:

| [...] $mydomain = 'example.com'; # 다른 설정에 대한 편리한 기본값 $myhostname = "server1.$mydomain"; [...] |

그런 다음 /var/run/clamav/clamd에서 /var/lib/clamav/clamd-socket으로 심볼릭 링크를 생성합니다:

mkdir -p /var/run/clamav  
ln -s /var/lib/clamav/clamd-socket /var/run/clamav/clamd

OpenSUSE 13.1에는 런타임 데이터를 저장하기 위한 /run 디렉토리가 있습니다. /run은 이제 tmpfs이며 /var/run은 이제 tmpfs에서 /run에 바인드 마운트되어 재부팅 시 비워집니다.

이는 재부팅 후 방금 생성한 /var/run/clamav 디렉토리가 더 이상 존재하지 않으며 따라서 clamd가 시작되지 않음을 의미합니다. 따라서 시스템 시작 시 이 디렉토리를 생성할 /etc/tmpfiles.d/clamav.conf 파일을 생성합니다(자세한 내용은 http://0pointer.de/public/systemd-man/tmpfiles.d.html 참조):

vi /etc/tmpfiles.d/clamav.conf

| D /var/run/clamav 0755 root root - |

amavisd 및 clamd를 시작하기 전에 /etc/init.d/amavis 초기화 스크립트를 편집해야 합니다. 기본 초기화 스크립트로는 amavisd를 신뢰할 수 있게 시작, 중지 및 재시작할 수 없었습니다:

vi /etc/init.d/amavis

시작 및 중지 섹션에서 다음 줄을 주석 처리합니다:

| [...] start) # ZMI 20100428 오래된 pid 파일 확인 #if test -f $AMAVIS_PID ; then # checkproc -p $AMAVIS_PID amavisd # if test $? -ge 1 ; then # # pid 파일이 오래되었습니다. 제거합니다. # echo -n "(오래된 amavisd pid 파일 $AMAVIS_PID 발견, 제거 중. amavisd가 충돌했습니까?)" # rm -f $AMAVIS_PID # fi #fi echo -n "바이러스 스캐너 시작 중 (amavisd-new): " $AMAVISD_BIN start #if ! checkproc amavisd; then # rc_failed 7 #fi rc_status -v #if [ "$AMAVIS_SENDMAIL_MILTER" == "yes" ]; then # rc_reset # echo -n "amavis-milter 시작 중:" # startproc -u vscan $AMAVIS_MILTER_BIN -p $AMAVIS_MILTER_SOCK > /dev/null 2>&1 # rc_status -v #fi ;; stop) echo -n "바이러스 스캐너 종료 중 (amavisd-new): " #if checkproc amavisd; then # rc_reset $AMAVISD_BIN stop #else # rc_reset #fi rc_status -v #if [ "$AMAVIS_SENDMAIL_MILTER" == "yes" ]; then # rc_reset # echo -n "amavis-milter 종료 중: " # killproc -TERM $AMAVIS_MILTER_BIN # rc_status -v #fi ;; [...] |

초기화 스크립트를 변경했기 때문에 이제

systemctl --system daemon-reload

를 실행해야 합니다.

clamav를 시작하려면 데이터베이스를 다운로드해야 하며 다음 명령을 진행합니다

freshclam

참고: 데이터베이스를 다운로드하는 데 많은 시간이 걸리므로 중단하지 말고 중간에 freshclam 업데이트 서비스를 중지하지 마십시오.

서비스를 활성화하려면 다음을 실행하십시오:

systemctl enable amavis.service  
systemctl enable clamd.service  
systemctl start amavis.service  
systemctl start clamd.service

10 Apache 2 웹 서버에 PHP5, Ruby, Python, WebDAV 설치

Apache2 및 suphp를 설치합니다. 실행:

zypper install apache2 apache2-mod_fcgid

PHP5를 설치합니다:

zypper install php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-mysql php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-fastcgi php5-pear php5-sysvmsg php5-sysvshm ImageMagick curl apache2-mod_php5
zypper install http://download.opensuse.org/repositories/server:/php/openSUSE_13.1/x86_64/suphp-0.7.1-5.3.x86_64.rpm

그런 다음 다음 명령을 실행하여 Apache 모듈(웹DAV 포함)을 활성화합니다:

a2enmod socache_shmcb
a2enmod suexec  
a2enmod rewrite  
a2enmod ssl  
a2enmod actions  
a2enmod suphp  
a2enmod fcgid  
a2enmod dav  
a2enmod dav_fs  
a2enmod dav_lock  
a2enmod logio  
chown root:www /usr/sbin/suexec2  
chmod 4755 /usr/sbin/suexec2
a2enflag SSL

Python 지원을 추가하려면 다음을 실행합니다:

zypper --gpg-auto-import-keys addrepo --name "Python Support (Apache_openSUSE_13.1)" http://download.opensuse.org/repositories/Apache:/Modules/openSUSE_13.1/  apache-Modules
zypper install apache2-mod_python
a2enmod python

다음으로 phpMyAdmin을 설치합니다:

zypper install phpMyAdmin

ISPConfig를 통해 나중에 생성된 모든 웹사이트에서 /phpmyadmin (예: http://www.example.com/phpmyadmin) 및 /phpMyAdmin (예: http://www.example.com/phpMyAdmin)으로 phpMyAdmin에 접근할 수 있도록 하려면 /etc/apache2/conf.d/phpMyAdmin.conf를 엽니다…

vi /etc/apache2/conf.d/phpMyAdmin.conf

… 그리고 다음 두 별칭을 맨 처음에 추가합니다:

| Alias /phpMyAdmin /srv/www/htdocs/phpMyAdmin Alias /phpmyadmin /srv/www/htdocs/phpMyAdmin [...] |

Apache를 시작하기 전에 링크를 따라가서 httpd.conf에서 변경합니다

vi /etc/apache2/httpd.conf

이 줄을 주석 처리하고 이 줄을 추가합니다

#  
#    Options None  
#    AllowOverride None  
#    Order deny,allow  
#   Deny from all  
#  
  
  
Options None  
AllowOverride None  
Require all denied  

이제 Apache 서비스를 시작합니다

systemctl enable apache2.service  
systemctl start apache2.service

10.1 PHP-FPM

ISPConfig 3.0.5부터 Apache와 함께 사용할 수 있는 추가 PHP 모드인 PHP-FPM이 있습니다.

Apache와 함께 PHP-FPM을 사용하려면 mod_fastcgi Apache 모듈이 필요합니다(이것을 mod_fcgid와 혼동하지 마십시오 - 매우 유사하지만 PHP-FPM을 mod_fcgid와 함께 사용할 수 없습니다). PHP-FPM 및 mod_fastcgi를 다음과 같이 설치할 수 있습니다:

mod_fastcgi는 서드파티 리포지토리에서 사용할 수 있으며 다음과 같이 활성화할 수 있습니다:

다음으로 Fastcgi 및 PHP-FPM을 설치합니다:

zypper install fastcgi php5-fpm

이제 mod_fastcgi를 다운로드하여 설치합니다:

cd /tmp  
wget http://download.opensuse.org/repositories/home:/munix9/openSUSE_13.1/x86_64/apache2-mod_fastcgi-2.4.7_SNAP_0910052141-3.1.x86_64.rpm  
rpm -i apache2-mod_fastcgi-2.4.7_SNAP_0910052141-3.1.x86_64.rpm  
a2enmod mod_fastcgi

PHP-FPM을 시작하기 전에 /etc/php5/fpm/php-fpm.conf.default를 /etc/php5/fpm/php-fpm.conf로 이름을 바꿉니다:

mv /etc/php5/fpm/php-fpm.conf.default /etc/php5/fpm/php-fpm.conf

PHP의 세션 디렉토리 권한을 변경합니다:

chmod 1733 /var/lib/php5

그런 다음 /etc/php5/fpm/php-fpm.conf를 엽니다…

vi /etc/php5/fpm/php-fpm.conf

… 그리고 error_log를 /var/log/php-fpm.log로 변경합니다:

| [...] error_log = /var/log/php-fpm.log [...] |

OpenSUSE 13.1에는 PHP-FPM에 대한 php.ini 파일이 없으므로 CLI php.ini를 복사합니다:

cp /etc/php5/cli/php.ini /etc/php5/fpm/

그런 다음 /etc/php5/fpm/php.ini를 엽니다…

vi /etc/php5/fpm/php.ini

… 그리고 cgi.fix_pathinfo를 0으로 설정합니다:

| [...] ; cgi.fix_pathinfo는 CGI에 대한 *실제* PATH_INFO/PATH_TRANSLATED 지원을 제공합니다. PHP의 ; 이전 동작은 PATH_TRANSLATED를 SCRIPT_FILENAME으로 설정하고 PATH_INFO가 무엇인지 이해하지 못하는 것이었습니다. ; PATH_INFO에 대한 자세한 내용은 cgi 사양을 참조하십시오. ; 이를 1로 설정하면 PHP CGI가 경로를 사양에 맞게 수정합니다. ; 0으로 설정하면 PHP가 이전과 같이 동작합니다. 기본값은 1입니다. ; 스크립트를 SCRIPT_FILENAME을 사용하도록 수정해야 합니다. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |

그런 다음 php-fpm에 대한 시스템 시작 링크를 생성하고 시작합니다:

systemctl enable php-fpm.service   
systemctl start php-fpm.service

PHP-FPM은 포트 9000에서 FastCGI 서버를 실행하는 데몬 프로세스입니다. 다음의 출력에서 확인할 수 있습니다:

netstat -tapn
server1:~ # netstat -tapn  
활성 인터넷 연결 (서버 및 설정됨)  
Proto  Recv-Q  Send-Q  Local Address           Foreign Address         State       PID/Program name  
tcp        0      0 0.0.0.0:80              0.0.0.0:*             LISTEN      2329/nginx  
tcp        0      0 0.0.0.0:22              0.0.0.0:*             LISTEN      1204/sshd  
tcp        0      0 127.0.0.1:9000          0.0.0.0:*             LISTEN      2511/php-fpm.conf)  
tcp        0      0 0.0.0.0:3306            0.0.0.0:*             LISTEN      2059/mysqld  
tcp        0      0 192.168.0.100:22        192.168.0.199:1632    ESTABLISHED 1284/0  
tcp        0      0 :::22                    :::*                   LISTEN      1204/sshd  
server1:~ #

다음으로 다음 Apache 모듈을 활성화합니다…

a2enmod actions  
a2enmod fastcgi  
a2enmod alias

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

systemctl restart apache2.service
Share: X/Twitter LinkedIn

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

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