Ubuntu 26.04 & Apache2 환경에서 /home 디렉토리내 업로드 폴더 쓰기가 안될 경우

리눅스/APACHE|2026. 7. 21. 09:44
반응형

Apache 2.4.66 버전부터 업로드 디렉토리에 쓰기가 안되는 문제점이 확인 되었습니다.


[ 증상 ]

- uploads 폴더 권한을 707/777로 바꿔도 업로드 실패

- is_writable()은 true인데 실제 fopen()/move_uploaded_file()은 "Failed to open stream: Read-only file system" 에러 발생

- sudo -u www-data로 직접 쉘에서 쓰기 테스트하면 성공하는데 PHP(Apache)를 통해서만 실패

 

[ 원인 ]

Apache 2.4.66부터 Debian/Ubuntu 패키지 자체에서 systemd 하드닝(ProtectSystem=full, ProtectHome=read-only)을 기본 적용함.

Ubuntu 24.04에서는 없었고, 26.04(Apache 2.4.66 탑재)부터 기본 활성화됨.

 

 

1. 보안 설정 확인

 

# systemctl show apache2.service | grep ProtectHome

ProtectHome=read-only

 

 

2. 해결 (override로 uploads 경로만 예외 처리)


전체 /home을 rw로 풀면 보안이 약해지니, uploads 디렉토리만 명시적으로 쓰기 허용합니다.


mkdir -p /etc/systemd/system/apache2.service.d

cat > /etc/systemd/system/apache2.service.d/override.conf << 'EOF'
[Service]
ReadWritePaths=/home/sysdocu/public_html/file/uploads
EOF


만약 다른 웹앱들도 업로드/쓰기 디렉토리가 있다면, 그것들도 한 번에 같이 추가하는 게 좋습니다.

(필요한 다른 경로들도 같은 방식으로 추가)

 

cat > /etc/systemd/system/apache2.service.d/override.conf << 'EOF'
[Service]
ReadWritePaths=/home/sysdocu/public_html/file/uploads
ReadWritePaths=/home/sysdocu/public_html/share/uploads
EOF


변경 사항이 있다면 아래와 같이 반영합니다.

systemctl daemon-reload

systemctl restart apache2

 

적용한 설정을 확인합니다.

systemctl show apache2.service -p ReadWritePaths


uploads 경로가 목록에 나온다면, 웹에서 파일업로드가 잘 될 것입니다.

 

반응형

댓글()