"Permission denied" 해결하기 (파일 권한)
Linux에서 Permission denied(권한 거부)는 "이 계정은 이 파일을 그렇게 다룰 권한이 없다"는 뜻입니다. 대부분 아래 세 가지 중 하나라서, 순서대로 확인하면 금방 해결됩니다.
권한 읽는 법
ls -l
-rwxr-xr-- 1 kim botteam 1024 Oct 8 12:00 start.sh
- 맨 앞
-rwxr-xr--는 세 묶음으로 읽습니다: 주인(rwx) / 그룹(r-x) / 나머지 모두(r--) r읽기,w쓰기,x실행 (폴더는 들어가기)kim이 주인,botteam이 그룹입니다.
경우 1. sudo로 만든 파일이라 내 계정이 못 고침 (가장 흔함)
sudo로 만들거나 압축을 푼 파일은 주인이 root가 되어, 내 계정으로는 수정할 수 없습니다. 주인을 내 계정으로 바꿉니다.
sudo chown -R $USER:$USER ~/내폴더
앞으로는 내 폴더 안에서 작업할 때
sudo를 붙이지 않는 습관을 들이면 이 문제가 거의 생기지 않습니다.
경우 2. 스크립트에 실행 권한이 없음
./start.sh를 실행했는데 Permission denied가 나온다면 실행 권한을 줍니다.
chmod +x start.sh
경우 3. 관리자 권한이 필요한 작업
프로그램 설치(apt install), 시스템 설정 파일 수정(/etc/...), 1024번 아래 포트(80, 443) 열기는 관리자 권한이 필요합니다. 명령어 앞에 sudo를 붙입니다.
sudo nano /etc/nginx/sites-available/example.com
SSH 키가 거부될 때
SSH는 키 파일과 폴더 권한이 너무 열려 있으면 보안상 키를 쓰지 않습니다. 서버에서:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
내 PC(Linux·macOS)의 개인키도 마찬가지입니다. (chmod 600 ~/.ssh/id_ed25519)
절대 하지 말 것: chmod 777
chmod -R 777은 "누구나 읽고 쓰고 실행해도 된다"는 뜻입니다. 당장은 오류가 사라져도, 서버에 들어온 다른 프로그램이나 사람이 내 파일을 마음대로 바꿀 수 있게 됩니다. 위의 방법(주인 바꾸기, 실행 권한 주기)으로 해결하세요.
그래도 안 된다면
- 어떤 계정으로 실행 중인지 확인:
whoami - 상위 폴더 권한도 확인:
namei -l ~/내폴더/파일이름(경로의 모든 폴더 권한을 한 번에 보여줍니다) - systemd로 실행하는 프로그램이라면, 서비스 파일의
User=계정이 그 폴더에 권한이 있는지 확인하세요.
친구와 폴더를 함께 쓰는 방법은 친구에게 서버 계정 만들어주기를 참고하세요.