From b0d0762abb8e3ff1248ae8413db0d1ce2311475d Mon Sep 17 00:00:00 2001 From: siane Date: Tue, 23 Dec 2025 17:24:23 +0900 Subject: [PATCH] Update vm/setup_common.sh --- vm/setup_common.sh | 132 +++++++++++++++++++++++++++------------------ 1 file changed, 79 insertions(+), 53 deletions(-) diff --git a/vm/setup_common.sh b/vm/setup_common.sh index f3cacb1..070a9b4 100644 --- a/vm/setup_common.sh +++ b/vm/setup_common.sh @@ -1,107 +1,133 @@ #!/bin/bash -# 테스트 서버용 공통 설치 스크립트 (Rocky Linux 9) -# Apache + FTP + Vim + Bash 설정, DocumentRoot를 /var/www/html로 고정 +# Rocky Linux 9 - 테스트 서버용 공통 설치 스크립트 +# Apache + FTP + Vim + 기본 보안 완화 +# PHP는 별도 스크립트에서 설치됨 set -euo pipefail -WEB_USER=$USER -WEB_HOME=$(eval echo "~$WEB_USER") +WEB_USER="$USER" +WEB_HOME="$(eval echo "~$WEB_USER")" WEB_ROOT="/var/www/html" -# 오류 처리 함수 +APACHE_CONF="/etc/httpd/conf.d/${WEB_USER}.conf" +PHP_CONF="/etc/httpd/conf.d/10-php-${WEB_USER}.conf" + +######################################## +# 오류 발생 시 Apache 설정만 롤백 +######################################## cleanup() { EXIT_CODE=$? if [ $EXIT_CODE -ne 0 ]; then - echo "❌ 에러 발생 ($EXIT_CODE). 변경사항을 롤백합니다..." - sudo rm -f /etc/httpd/conf.d/${WEB_USER}.conf - sudo rm -f /etc/httpd/conf.d/10-php-${WEB_USER}.conf + echo "❌ 에러 발생 ($EXIT_CODE) – Apache 설정 롤백" + sudo rm -f "$APACHE_CONF" + sudo rm -f "$PHP_CONF" sudo systemctl restart httpd 2>/dev/null || true - echo "변경사항이 롤백되었습니다. 처음부터 다시 실행하세요." fi exit $EXIT_CODE } trap cleanup EXIT -echo "설치 사용자: $WEB_USER" -echo "웹 루트: $WEB_ROOT" +echo "▶ 설치 사용자 : $WEB_USER" +echo "▶ 웹 루트 : $WEB_ROOT" -# 시스템 업데이트 -sudo dnf update -y +######################################## +# 시스템 업데이트 및 필수 패키지 +######################################## +sudo dnf -y update +sudo dnf -y install \ + vim curl wget tar \ + httpd vsftpd \ + policycoreutils-python-utils -# 필수 패키지 설치 -sudo dnf install -y vim curl wget tar httpd vsftpd - -# firewalld 비활성화 +######################################## +# firewalld 비활성화 (외부 방화벽 사용) +######################################## sudo systemctl stop firewalld 2>/dev/null || true sudo systemctl disable firewalld 2>/dev/null || true -# /var/www/html 생성 및 권한 설정 +######################################## +# 웹 루트 생성 및 Apache 기준 권한 +######################################## sudo mkdir -p "$WEB_ROOT" -sudo chown $WEB_USER:$WEB_USER "$WEB_ROOT" -sudo chmod 750 "$WEB_ROOT" -# 홈 디렉토리에 심볼릭 링크 생성 (기존 www 디렉토리 제거 후 링크로 교체) +# Apache가 반드시 접근 가능해야 함 +sudo chown -R apache:apache "$WEB_ROOT" +sudo chmod 755 "$WEB_ROOT" + +######################################## +# 홈 디렉토리 심볼릭 링크 (~/www) +######################################## if [ -d "$WEB_HOME/www" ] && [ ! -L "$WEB_HOME/www" ]; then rm -rf "$WEB_HOME/www" fi if [ ! -L "$WEB_HOME/www" ]; then ln -s "$WEB_ROOT" "$WEB_HOME/www" - echo "✓ ~/www → /var/www/html 심볼릭 링크 생성 완료" + echo "✓ ~/www → /var/www/html 심볼릭 링크 생성" fi -# Apache 활성화 -sudo systemctl enable --now httpd - -# VirtualHost 설정 -APACHE_CONF="/etc/httpd/conf.d/${WEB_USER}.conf" -APACHE_PHP_CONF="/etc/httpd/conf.d/10-php-${WEB_USER}.conf" - -sudo bash -c "cat > $APACHE_CONF" </dev/null < ServerAdmin webmaster@localhost DocumentRoot $WEB_ROOT + Options -Indexes +FollowSymLinks AllowOverride All Require all granted - ErrorLog /var/log/httpd/${WEB_USER}-error.log + + ErrorLog /var/log/httpd/${WEB_USER}-error.log CustomLog /var/log/httpd/${WEB_USER}-access.log combined EOF -sudo bash -c "cat > $APACHE_PHP_CONF" </dev/null <<'EOF' +# PHP 설치 스크립트에서 php-fpm.sock 생성 후 자동 사용됨 - SetHandler "proxy:unix:/run/php-fpm/${WEB_USER}.sock|fcgi://localhost" + SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost" - - - RewriteEngine On - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule ^ index.php [QSA,L] - EOF -sudo systemctl restart httpd +######################################## +# SELinux 컨텍스트 (읽기 전용) +######################################## +sudo restorecon -Rv "$WEB_ROOT" -# vsftpd 활성화 +######################################## +# Apache / FTP 활성화 +######################################## +sudo systemctl enable --now httpd sudo systemctl enable --now vsftpd -# SELinux 컨텍스트 설정 -sudo chcon -R -t httpd_sys_content_t "$WEB_ROOT" +######################################## +# SELinux: PHP/Apache 통합 허용 (테스트 서버) +######################################## +sudo setsebool -P httpd_unified 1 + +######################################## +# 완료 메시지 +######################################## +IP_ADDR=$(hostname -I | awk '{print $1}') echo "" -echo "✅ 테스트 서버용 공통 설정 완료!" -echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -echo "✓ Apache + FTP + Vim + Bash 환경 구성됨" -echo "✓ 웹 루트: $WEB_ROOT" -echo "✓ ~/www → /var/www/html 심볼릭 링크" +echo "✅ 테스트 서버 공통 설정 완료" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "✔ Apache 정상 동작 (403 없음)" +echo "✔ SELinux 유지" +echo "✔ 웹 루트 : $WEB_ROOT" +echo "✔ 심볼릭 : ~/www" +echo "" +echo "📌 다음 단계" +echo " 1. PHP 설치 스크립트 실행" +echo " 2. http://$IP_ADDR/ 접속 확인" +echo " 3. 로그 : /var/log/httpd/${WEB_USER}-*.log" echo "" -echo "📋 다음 단계:" -echo " 1. PHP 설치: ./install_php.sh 8.2 또는 8.4" -echo " 2. 웹 접속: http://$(hostname -I | awk '{print $1}')/" -echo " 3. 로그 확인: tail -f /var/log/httpd/${WEB_USER}-*.log" \ No newline at end of file