[Best Practice] Linux 서버 WAS 권한 체계 구축 가이드
리눅스 환경에서 다수의 운영자가 WAS(Tomcat, Nginx 등)를 공동 관리할 때 발생하는 권한 꼬임(Permission Denied) 문제를 방지하기 위한 표준 설정법입니다.
1. 계정 및 그룹 설계 (Account & Group)
리눅스는 ‘1파일 1그룹’ 원칙을 가지므로, 모든 관리자를 하나의 **보조 그룹(Secondary Group)**으로 묶는 전략이 필수입니다.
🛠 터미널(Terminal) 명령어
Bash
# 1. WAS 관리 전용 그룹 생성
sudo groupadd webadmin
# 2. 서비스 구동용 시스템 계정 생성 (로그인 불가 설정으로 보안 강화)
sudo useradd -r -s /usr/sbin/nologin wasuser
# 3. 관리자 계정(aaaa, bbbb)을 관리 그룹에 추가 (보조 그룹 추가 옵션 -aG)
sudo usermod -aG webadmin aaaa
sudo usermod -aG webadmin bbbb
sudo usermod -aG webadmin wasuser # 서비스 계정도 그룹에 포함
2. 폴더 소유권 및 특수 권한 설정 (Ownership & SetGID)
리눅스에는 윈도우식 상속이 없으므로, SetGID라는 특수 권한을 사용하여 새로 생성되는 파일의 그룹 소유권을 강제로 고정합니다.
🛠 설정 절차
-
디렉토리 소유권 변경:
Bash
# /app/was 폴더의 소유자를 wasuser로, 그룹을 webadmin으로 일괄 변경 sudo chown -R wasuser:webadmin /app/was -
기본 권한 부여:
Bash
# 소유자와 그룹 멤버에게 읽기/쓰기/실행 권한 부여 (775) sudo chmod -R 775 /app/was -
SetGID 설정 (리눅스 상속의 핵심):
Bash
# 하위 디렉토리에 SetGID를 걸어, 누가 파일을 만들어도 그룹이 'webadmin'으로 고정되게 함 find /app/was -type d -exec chmod g+s {} +
3. 서비스 구성 (Systemd Service)
시스템 부팅 시 WAS가 지정된 계정으로 자동 실행되도록 systemd 서비스 파일을 설정합니다.
🛠 서비스 파일 예시 (/etc/systemd/system/tomcat.service)
Ini, TOML
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
# 핵심 설정: 서비스를 구동할 사용자 및 그룹 명시
User=wasuser
Group=webadmin
Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk
ExecStart=/app/was/tomcat/bin/startup.sh
ExecStop=/app/was/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
4. 💡 실무 핵심 요약 (Cheat Sheet)
항목
설정 권장 사항 (Best Practice)
이유
그룹 관리
모든 관리자를 보조 그룹(webadmin)에 포함
다수의 사용자가 동일한 파일 수정 가능
상속 구현
폴더에 SetGID(g+s) 권한 부여
신규 생성 파일의 그룹 소유권 자동 고정
파일 생성값
umask 값 확인 (기본 002 권한 권장)
그룹 멤버에게 쓰기 권한이 자동으로 생기도록 함
권한 적용
그룹 추가 후 로그아웃 & 로그인 필수
세션이 갱신되어야 새로운 그룹 권한이 반영됨
⚠️ 주의사항
-
umask 설정: 시스템의
umask가022로 되어 있으면 그룹 멤버에게 쓰기 권한이 없습니다. 그룹 협업이 잦은 WAS 폴더 내에서는umask 002를 권장합니다. -
파일 vs 폴더:
chmod g+s는 반드시 디렉토리에만 적용하는 것이 보안상 안전합니다. (find명령어 활용 권장)
댓글 없음:
댓글 쓰기