chmod 755, 644 의미와 안전한 권한 설정
리눅스 권한 숫자를 읽는 법, 디렉터리 권한의 의미, 777을 쓰면 안 되는 이유를 정리했습니다.
ls -l의 -rwxr-xr-x는 소유자, 그룹, 기타 사용자의 권한을 순서대로 보여줍니다. 숫자로는 읽기 4, 쓰기 2, 실행 1을 더합니다. rwx는 7, r-x는 5이므로 -rwxr-xr-x는 755입니다.
자주 쓰는 권한
- 755: 실행 파일과 디렉터리
- 644: 일반 파일
- 600: SSH 개인키, 비밀 설정 파일
- 700: 소유자만 들어갈 디렉터리 (~/.ssh 등)
디렉터리에서 r, w, x의 의미
디렉터리의 r은 목록 보기, w는 안에서 파일 만들기와 삭제, x는 들어가기와 안의 파일 접근입니다. 그래서 파일 권한이 644여도 상위 디렉터리에 x가 없으면 읽을 수 없습니다. 파일을 지울 수 있는지는 파일 권한이 아니라 디렉터리의 w로 결정됩니다.
Permission denied가 날 때
경로의 모든 단계를 확인해야 합니다. namei는 경로별 권한을 한 번에 보여줍니다.
namei -l /var/www/html/index.html777을 쓰면 안 되는 이유
777은 서버의 모든 계정이 파일을 수정할 수 있다는 뜻입니다. 웹 애플리케이션이 뚫렸을 때 공격자가 코드를 바꾸는 길을 열어줍니다. 웹 서버가 쓰기 어려운 문제는 대부분 소유자나 그룹을 맞춰 해결합니다.
sudo chown -R www-data:www-data /var/www/uploads
sudo find /var/www/uploads -type d -exec chmod 750 {} +
sudo find /var/www/uploads -type f -exec chmod 640 {} +특수 권한
- setuid(4): 파일 소유자 권한으로 실행. passwd 명령이 대표적입니다.
- setgid(2): 디렉터리에 걸면 새 파일이 디렉터리의 그룹을 물려받습니다.
- sticky(1): 자기 파일만 지울 수 있습니다. /tmp의 1777이 대표적입니다.
정기적으로 setuid 파일 목록을 확인하면 이상 징후를 찾는 데 도움이 됩니다.
sudo find / -xdev -perm -4000 -type f