리눅스 서버에서 권한 오류를 마주했을 때
우분투와 리눅스 서버를 운영하다 보면 파일이나 디렉토리에 접근할 때 가장 흔하게 만나는 문제가 바로 ‘Permission denied(허가 거부)’ 오류입니다. 웹서버가 로그 파일을 기록하지 못하거나, 셸 스크립트 실행이 거부되거나, 특정 설정 파일에 접근할 수 없을 때 관리자는 정확한 원인을 파악해야 합니다. 이 글에서는 초보자도 서버를 안전하게 유지하면서 권한 문제를 진단하고 해결할 수 있도록 기본적인 명령어 사용법과 점검 순서를 살펴봅니다.
권한 진단에 사용하는 기본 명령어 4가지
서버의 파일 접근 문제를 점검할 때는 무작정 chmod 777 같은 위험한 명령어를 사용하기 전에, 현재 파일의 소유자와 권한 상태를 정확히 조회하는 것이 먼저입니다. 다음은 시스템 운영에서 가장 자주 쓰이는 점검 도구입니다.
1. ls -l: 파일과 디렉토리의 상세 권한 확인
가장 기본이 되는 명령어입니다. 파일이나 디렉토리의 소유자(User), 소유 그룹(Group), 그리고 기타 사용자(Others)에게 부여된 읽기(r), 쓰기(w), 실행(x) 권한을 한눈에 확인할 수 있습니다.
ls -la /var/www/html 명령어를 입력하면 숨김 파일까지 포함하여 상세한 권한 구조를 파악할 수 있습니다.
2. whoami 및 id: 현재 작업 중인 사용자 확인
권한 오류가 발생했을 때 내가 현재 어떤 계정으로 로그인해 있는지를 확인하는 것은 매우 중요합니다. 일반 사용자 권한으로 시스템 파일에 접근하려다 오류가 났는지 확인하기 위해 whoami 명령어로 현재 계정을 점검하고, id 명령어로 소속된 그룹 정보를 확인합니다.
3. stat: 파일의 상세 메타데이터 및 권한 조회
ls 명령어보다 더 자세하게 파일의 권한, 소유자 ID(UID), 그룹 ID(GID), 그리고 최종 수정 시간 등을 확인하고 싶을 때 유용합니다. stat filename 형태로 사용합니다.
4. namei: 경로 전체의 권한 계층 구조 점검
특정 파일의 권한이 정상인데도 접근이 안 된다면, 그 파일이 속한 상위 디렉토리 중 하나가 실행 권한(x)이 없거나 접근이 차단되어 있을 가능성이 큽니다. namei -l /var/www/html/index.php 명령어를 사용하면 루트 디렉토리부터 대상 파일까지의 모든 경로에 걸친 권한을 계층별로 추적할 수 있어 매우 유용합니다.
안전한 권한 수정 및 검증 절차
원인을 파악했다면 최소한의 권한만 부여하는 원칙에 따라 수정해야 합니다.
- 소유자 변경: 웹서버 프로세스(예: www-data)가 파일을 소유해야 할 경우
chown -R www-data:www-data /path/to/dir명령어를 사용합니다. - 권한 설정: 디렉토리는 보통 755, 파일은 644 권한이 권장됩니다.
chmod 755 /path/to/dir형태로 적용합니다. - 동작 검증: 권한을 변경한 후에는 반드시 해당 서비스를 재시작하거나 웹 브라우저, 또는 일반 계정 권한으로 접근 테스트를 수행하여 정상 작동하는지 확인합니다.
초보자가 자주 저지르는 실수
권한 문제를 해결하는 과정에서 시스템 보안을 위협하는 몇 가지 실수가 반복됩니다.
- 모든 파일에 777 부여: 권한 오류가 나면 해결이 귀찮다는 이유로
chmod -R 777을 실행하는 경우가 많습니다. 이는 모든 사용자에게 읽기, 쓰기, 실행 권한을 개방하므로 심각한 보안 취약점이 됩니다. - 상위 디렉토리 무시: 파일 자체의 권한만 확인하고 상위 디렉토리의 실행 권한을 누락하여 여전히 접근이 안 되는 상황을 파악하지 못하는 경우입니다.
- 불필요한 root 계정 사용: 권한 문제가 생길 때마다 원인을 찾지 않고 무조건
sudo를 남발하면 파일 소유권이 root로 꼬이면서 웹서버 등의 애플리케이션이 파일을 읽지 못하는 문제가 발생합니다.
권한 점검 체크리스트
서버에서 권한 관련 이슈를 마주쳤을 때 순서대로 따라 할 수 있는 점검 항목입니다.
- [ ]
whoami명령어로 현재 작업 계정을 확인했는가? - [ ]
ls -l명령어로 대상 파일의 소유자와 권한을 확인했는가? - [ ]
namei -l명령어를 이용해 상위 경로 전체의 권한을 점검했는가? - [ ] 무분별한 777 대신 최소 권한(644/755) 원칙을 적용했는가?
- [ ] 권한 수정 후 관련 서비스 로그에 추가 오류가 없는지 확인했는가?
우분투와 리눅스 서버 운영에서 권한 관리는 시스템 보안의 기초입니다. 명령어를 통해 정확한 원인을 진단하고 안전하게 처리하는 습관을 기르면 예기치 않은 서비스 장애를 효과적으로 예방할 수 있습니다.