리눅스 서버에서 적절한 사용자와 권한 관리는 보안의 기본입니다. 최소 권한 원칙(Principle of Least Privilege)에 따라 각 서비스와 사용자에게 필요한 최소한의 권한만 부여해야 합니다.
사용자 관리
# 사용자 생성 (홈 디렉터리 자동 생성)
sudo useradd -m -s /bin/bash username
# 비밀번호 설정
sudo passwd username
# 사용자 정보 수정
sudo usermod -c "Full Name" username # 코멘트(이름) 변경
sudo usermod -s /bin/zsh username # 기본 셸 변경
sudo usermod -d /new/home username # 홈 디렉터리 변경
# 사용자 삭제 (홈 디렉터리 및 메일함 포함)
sudo userdel -r username
# 현재 로그인한 사용자
whoami
who
w
그룹 관리
# 그룹 생성
sudo groupadd developers
# 사용자를 그룹에 추가
sudo usermod -aG developers username # -a: 기존 그룹 유지
# 사용자가 속한 그룹 확인
groups username
id username
# 그룹에서 사용자 제거
sudo gpasswd -d username developers
# 그룹 삭제
sudo groupdel developers
sudo 권한 설정
# sudo 그룹에 추가 (Ubuntu: sudo, CentOS: wheel)
sudo usermod -aG sudo username
# sudoers 파일 직접 편집 (항상 visudo 사용)
sudo visudo
# /etc/sudoers 설정 예시
# 특정 명령어만 허용 (비밀번호 필요)
username ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl
# 비밀번호 없이 특정 명령 실행
username ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
# 개발팀 그룹 sudo 허용
%developers ALL=(ALL:ALL) ALL
파일 권한 이해
-rwxr-xr-- 1 owner group size date filename
^^^
|||
||└─ other (기타 사용자): r-- = 4 (읽기만)
|└── group (그룹): r-x = 5 (읽기+실행)
└─── owner (소유자): rwx = 7 (읽기+쓰기+실행)
권한 값:
r(읽기) = 4w(쓰기) = 2x(실행) = 1
chmod로 권한 변경
# 숫자 방식
chmod 755 file.sh # rwxr-xr-x (소유자: 7, 그룹: 5, 기타: 5)
chmod 644 file.txt # rw-r--r-- (소유자: 6, 그룹: 4, 기타: 4)
chmod 600 key.pem # rw------- (소유자만 읽기/쓰기)
chmod 700 ~/.ssh # rwx------ (소유자만 모든 권한)
# 기호 방식
chmod u+x file.sh # 소유자에 실행 권한 추가
chmod g-w file.txt # 그룹에서 쓰기 권한 제거
chmod o-rwx file # 기타 사용자 모든 권한 제거
chmod a+r file # 모든 사용자에 읽기 권한 추가
# 재귀 적용
chmod -R 755 /var/www/html
chown으로 소유자 변경
# 소유자 변경
sudo chown username file.txt
# 소유자와 그룹 함께 변경
sudo chown username:groupname file.txt
# 그룹만 변경
sudo chown :groupname file.txt
# 또는
sudo chgrp groupname file.txt
# 재귀 적용
sudo chown -R www-data:www-data /var/www/html
특수 권한
SUID (Set User ID)
# 실행 시 소유자의 권한으로 실행 (예: passwd 명령)
chmod u+s /usr/bin/myprog
# 또는: chmod 4755 /usr/bin/myprog
# SUID 파일 찾기 (보안 점검)
find / -perm -4000 -type f 2>/dev/null
SGID (Set Group ID)
# 디렉터리에 적용 시: 해당 디렉터리에서 생성되는 파일이 디렉터리의 그룹 상속
chmod g+s /shared/project
# 또는: chmod 2755 /shared/project
Sticky Bit
# 디렉터리에서 본인 파일만 삭제 가능 (예: /tmp)
chmod +t /tmp
# 또는: chmod 1777 /tmp
웹 서버 디렉터리 권한 설정
# 웹 루트 디렉터리 권한 (Nginx/Apache: www-data 사용자)
sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;
# 업로드 디렉터리는 쓰기 허용
sudo chmod 775 /var/www/html/uploads
sudo chown -R www-data:www-data /var/www/html/uploads
파일 권한 점검
# 기타 사용자가 쓰기 가능한 파일 찾기 (보안 위험)
find /var/www -perm -o+w -type f
# 소유자 없는 파일 찾기
find / -nouser -nogroup 2>/dev/null
# 권한이 없는 파일로 인한 Nginx 403 오류 진단
sudo -u www-data ls /var/www/html/
적절한 권한 관리는 서버 보안의 기반입니다. 특히 웹 서버 디렉터리와 민감한 설정 파일의 권한 설정에 주의를 기울이세요.