우분투 실전 명령어 | 권한/소유권(chmod, chown, umask) 실수 방지
권한 문제는 우분투 운영에서 가장 자주 부딪히는 장애 원인 중 하나다. 특히 서비스 계정이 파일을 못 읽거나, 배포 후 실행 권한이 빠져 프로세스가 죽는 경우가 흔하다. 아래 명령만 정확히 익혀도 대부분의 권한 이슈를 빠르게 정리할 수 있다.
언제 쓰는가
- 배포 후
Permission denied가 발생할 때 - 파일 업로드/로그 디렉터리를 서비스 계정이 못 쓸 때
- 팀 작업 중 파일 소유자가 뒤섞여 접근 오류가 날 때
- 새로 생성되는 파일 기본 권한 정책을 통일하고 싶을 때
바로 쓰는 명령어
# 현재 권한/소유권 확인
ls -l /var/www/app
# 실행 권한 부여
chmod u+x /var/www/app/deploy.sh
# 소유자/그룹 변경
sudo chown -R www-data:www-data /var/www/app
# 권한 숫자 모드 적용
find /var/www/app -type d -exec chmod 755 {} \;
find /var/www/app -type f -exec chmod 644 {} \;
# 기본 umask 확인/변경
umask
umask 027
# ACL이 필요한 경우
sudo setfacl -m u:deploy:rwx /var/www/app/storage
getfacl /var/www/app/storage
핵심 옵션/패턴
chmod u+x file: 모두에게 열지 말고 필요한 주체만 실행 권한 부여chown -R user:group path: 재귀 변경은 범위를 꼭 좁혀서 실행umask 027: 새 파일 기본 권한을 보수적으로 유지(파일 640, 디렉터리 750)- 웹 서비스 디렉터리 관리는
소유자(root)+그룹(www-data)조합을 먼저 검토
자주 하는 실수
chmod -R 777로 임시 해결 후 방치- 당장은 동작해도 보안 사고 위험이 크게 올라간다.
- 서비스 실행 계정을 확인하지 않고
chown적용- 실제 프로세스 계정(
www-data,ubuntu,node등)과 다르면 문제는 그대로다.
- 실제 프로세스 계정(
- 파일/디렉터리에 같은 권한을 일괄 적용
- 디렉터리에 실행 비트(
x)가 없으면 진입 자체가 막힌다.
- 디렉터리에 실행 비트(
검증 방법
# 1) 권한/소유권 확인
namei -l /var/www/app/storage
ls -ld /var/www/app /var/www/app/storage
# 2) 서비스 계정 기준 쓰기 테스트
sudo -u www-data test -w /var/www/app/storage && echo "write ok" || echo "write fail"
# 3) umask 적용 확인
umask
touch /tmp/umask-check && ls -l /tmp/umask-check
rm -f /tmp/umask-check
실행 결과 예시
$ ls -ld /var/www/app/storage
drwxr-x--- 2 www-data www-data 4096 Feb 18 20:22 /var/www/app/storage
$ sudo -u www-data test -w /var/www/app/storage && echo "write ok" || echo "write fail"
write ok
$ umask
0027
$ touch /tmp/umask-check && ls -l /tmp/umask-check
-rw-r----- 1 tobybot staff 0 Feb 18 20:24 /tmp/umask-check
출처
- Ubuntu Manpages
- GNU Coreutils Manual
- Linux ACL Documentation