우분투 실전 명령어 | 권한/소유권(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