ls에는 분명 reports가 보인다. 그런데 cd reports를 하면 Permission denied라니, 폴더가 숨바꼭질을 하는 걸까? chmod 644를 폴더에 적용했다면 읽기 권한은 있어도 들어갈 권한은 없는 상태일 수 있다.
읽을 수 있는 폴더인데 cd는 왜 실패할까?
일반 파일의 r은 내용을 읽고 x는 실행하는 권한이다. 디렉터리에서는 뜻이 다르다. r은 안에 있는 이름을 나열하는 데, x는 그 안으로 들어가거나 내부 경로에 접근하는 데 필요하다. w는 항목을 만들거나 지우는 작업과 관련되지만, 이런 작업에도 보통 x가 함께 필요하다.
644는 소유자에게 rw-, 그룹과 그 밖의 사용자에게 각각 r--를 준다. 어느 칸에도 x가 없다. 다음 실습은 직접 만든 reports 폴더에서만 진행하자.
mkdir reports
touch reports/today.txt
chmod 644 reports
ls -ld reports
ls reports
cd reports소유자가 실행하면 권한은 drw-r--r--로 표시되고, ls reports에서는 today.txt라는 이름이 보인다. 그러나 cd reports는 Permission denied가 된다. 파일 이름을 보는 것과 그 경로에 들어가는 것은 다른 일이다. 이 상태에서 cat reports/today.txt도 경로를 통과하지 못한다.
chmod u+x를 하면 무엇이 달라질까?
소유자인 내가 들어가야 한다면 폴더에 필요한 권한만 더한다.
chmod u+x reports
ls -ld reports
cd reports
pwd이제 drwxr--r--가 되고 cd가 성공한다. u+x는 소유자에게만 실행 권한을 추가한다. 처음부터 chmod 755 reports를 입력하면 그룹과 다른 사용자에게도 x를 주므로, 단지 내 접근을 복구하려는 상황에서는 권한을 더 넓히는 셈이다.
여기서 x는 파일을 프로그램처럼 실행한다는 뜻이 아니다. 디렉터리 안의 경로를 통과할 수 있다는 뜻이다. 반대로 x만 있고 r이 없으면, 이름을 이미 아는 항목에는 접근할 수 있어도 목록을 자유롭게 나열하지는 못한다.
폴더에 x가 있는데도 Permission denied라면?
목적지 폴더만 보지 말고 그 위 경로도 확인하자. cd parent/reports에는 parent를 통과할 x도 필요하다. reports가 755여도 parent가 644라면 그 안으로 내려갈 수 없다.
ls -ld parent parent/reports
id먼저 각 디렉터리의 권한과 소유자·그룹을 확인하고, 접근해야 하는 사용자에게 빠진 x만 조정한다. 원인을 모른 채 chmod 777로 열면 문제는 가려지고 접근 범위만 넓어진다. 권한이 맞는데도 거부된다면 그때 추가 접근 제어를 살펴보자.
핵심 요약
디렉터리의 r은 이름을 나열하고 x는 내부 경로를 통과하게 한다. chmod 644를 폴더에 적용하면 x가 사라져 ls에 이름이 보여도 cd는 실패할 수 있다. ls -ld로 목적지와 상위 폴더를 확인한 뒤, 필요한 사용자에게만 x를 되돌리자.
작성자
기초 개념을 구현과 검증, 실제 운영 판단까지 연결해 기록합니다.

