Linux 서버를 사용하다 보면 파일을 실행하거나 디렉터리에 접근할 때 Permission denied라는 오류를 자주 만나게 됩니다. 이는 Linux에서 가장 흔하게 발생하는 오류 중 하나이며, 대부분 권한(Permission) 또는 소유자(Owner) 설정과 관련이 있습니다.
Permission denied 오류는 단순히 파일 권한만의 문제가 아니라 사용자 권한, 디렉터리 접근 권한, SELinux, 마운트 옵션 등 다양한 원인으로 발생할 수 있습니다. 따라서 오류 메시지만 보고 성급하게 chmod 777을 적용하는 것은 보안상 매우 위험합니다.
이번 글에서는 Permission denied 오류가 발생하는 원인과 안전하게 해결하는 방법을 알아보겠습니다.
Permission denied란 무엇인가?
Permission denied는 현재 사용자에게 해당 파일이나 디렉터리를 사용할 권한이 없다는 의미입니다.
대표적인 오류 예시는 다음과 같습니다.
bash: ./test.sh: Permission denied
또는
cp: cannot open file: Permission denied
또는
mkdir: Permission denied
이처럼 다양한 명령어에서 동일한 오류가 발생할 수 있습니다.
Permission denied가 발생하는 대표적인 원인
다음과 같은 경우에 자주 발생합니다.
- 실행 권한 없음
- 읽기 권한 없음
- 쓰기 권한 없음
- 파일 소유자 불일치
- 디렉터리 권한 부족
- SELinux 정책
- 읽기 전용(Read Only) 파일 시스템
- sudo 권한 부족
가장 먼저 권한과 소유자를 확인하는 것이 중요합니다.
1. 파일 권한 확인하기
파일 권한을 확인합니다.
ls -l 파일명
예시
ls -l test.sh
출력 결과
-rw-r--r-- 1 user user 320 Jul 20 test.sh
실행 권한(x)이 없는 것을 확인할 수 있습니다.
2. 실행 권한 추가하기
실행 권한이 없다면 다음 명령어를 사용합니다.
chmod +x test.sh
권한을 확인합니다.
ls -l test.sh
실행 권한이 추가되었는지 확인합니다.
3. 파일 소유자 확인하기
현재 파일의 소유자를 확인합니다.
ls -l
소유자가 다르다면 접근이 제한될 수 있습니다.
소유자를 변경합니다.
sudo chown 사용자:그룹 파일명
예시
sudo chown ubuntu:ubuntu test.sh
4. 현재 사용자 확인하기
현재 로그인한 계정을 확인합니다.
whoami
사용자가 예상과 다르다면 권한 문제가 발생할 수 있습니다.
5. 디렉터리 권한 확인하기
파일 권한뿐 아니라 상위 디렉터리 권한도 확인해야 합니다.
ls -ld 디렉터리명
예시
ls -ld /home/project
디렉터리에 실행 권한(x)이 없으면 내부 파일에도 접근할 수 없습니다.
6. sudo 권한 확인하기
관리자 권한이 필요한 작업이라면 sudo를 사용합니다.
sudo 명령어
예시
sudo cp test.conf /etc/nginx/
일반 사용자로는 시스템 디렉터리에 쓰기 권한이 없습니다.
7. SELinux 확인하기
SELinux 정책으로 인해 접근이 차단될 수도 있습니다.
현재 상태를 확인합니다.
getenforce
SELinux 관련 로그를 확인합니다.
ausearch -m avc
8. 읽기 전용 파일 시스템 확인하기
파일 시스템이 Read Only 상태인지 확인합니다.
mount | grep "ro,"
또는
cat /proc/mounts
읽기 전용으로 마운트되어 있다면 쓰기 작업은 실패합니다.
9. 디스크 공간 확인하기
디스크 용량이 부족한 경우에도 파일 생성이나 복사가 실패할 수 있습니다.
df -h
용량 부족 여부를 함께 확인합니다.
10. 로그 확인하기
관련 로그를 확인합니다.
journalctl -xe
또는
dmesg
권한 오류와 관련된 메시지가 있는지 확인합니다.
Permission denied 문제를 확인하는 순서
실무에서는 다음 순서대로 점검하는 것이 가장 효율적입니다.
- ls -l
- chmod
- chown
- whoami
- ls -ld
- sudo 권한 확인
- SELinux 확인
- Read Only 확인
- df -h
- 시스템 로그 확인
이 순서대로 확인하면 대부분의 Permission denied 오류를 해결할 수 있습니다.
Permission denied 오류를 해결할 때 주의할 점
많은 초보자가 오류를 해결하기 위해 chmod 777을 사용하는데, 이는 모든 사용자에게 읽기·쓰기·실행 권한을 부여하는 것으로 보안상 매우 위험합니다.
가능하면 필요한 권한만 최소한으로 부여하는 것이 좋으며, 권한을 변경하기 전에 소유자와 그룹 설정이 올바른지도 함께 확인해야 합니다.
자주 묻는 질문
chmod 777을 사용하면 항상 해결되나요?
대부분 접근은 가능해지지만 보안 위험이 매우 커지므로 운영 서버에서는 권장되지 않습니다.
sudo를 사용해도 Permission denied가 발생합니다.
SELinux 정책, 읽기 전용 파일 시스템 또는 디스크 오류가 원인일 수 있습니다.
파일 권한은 정상인데 접근이 되지 않습니다.
상위 디렉터리의 실행 권한(x)이 없거나 SELinux 정책에 의해 차단되었는지 확인해야 합니다.
마무리
Permission denied 오류는 Linux 서버에서 가장 자주 발생하는 문제 중 하나이지만, 대부분 권한과 소유자 설정을 올바르게 확인하면 쉽게 해결할 수 있습니다. ls -l, chmod, chown, whoami, getenforce 등의 명령어를 활용하여 단계적으로 원인을 확인하면 불필요한 권한 부여 없이 안전하게 문제를 해결할 수 있습니다.