Ubuntu 26.04 & Apache2 환경에서 /home 디렉토리내 업로드 폴더 쓰기가 안될 경우
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 경로가 목록에 나온다면, 웹에서 파일업로드가 잘 될 것입니다.
'리눅스 > APACHE' 카테고리의 다른 글
| Nginx 에서 Proxy 구성시 Arguments 사용하기 (0) | 2024.12.12 |
|---|---|
| Ubuntu 24.04 에서 APM 설치 및 Let's Encrypt SSL 적용하기 (사이트 기본 구성) (0) | 2024.09.13 |
| Ubuntu 22.04 에서 Tomcat 9 설치 및 SSL 설정 (0) | 2024.06.18 |
| Ubuntu 22.04 에서 Apache2 와 Tomcat9 연동하기 (0) | 2024.03.29 |
| ab 명령을 이용한 웹서버 로딩 속도 테스트 (0) | 2024.01.09 |








