답변:
정확한 규칙은 다음과 같습니다. 디렉토리에 대한 실행 권한이있는 경우에만 디렉토리를 통과 할 수 있습니다.
그래서 액세스 예를 들어 dir/subdir/file
, 당신은 실행 권한을 필요로 dir
하고 dir/subdir
, 플러스에 대한 사용 권한 file
원하는 액세스 유형에 대한. 모퉁이로 들어가면 상대 경로를 통해 파일에 액세스하기 위해 현재 디렉토리에 대한 실행 권한이 필요한 것이 보편적인지 확실하지 않습니다 (Linux의 경우).
파일에 액세스하는 방법이 중요합니다. 예를 들어에 대한 실행 권한은 /foo/bar
있지만 on에 대한 권한은 없지만 /foo
현재 디렉토리는 /foo/bar
에 /foo/bar
있는 경우 절대 경로가 아닌 상대 경로 를 통해 파일에 액세스 할 수 있습니다 . /foo/bar
이 시나리오 에서는로 변경할 수 없습니다 . 더 특권이있는 프로세스는 cd /foo/bar
권한이없는 상태가되기 전에 수행 된 것 같습니다. 파일에 여러 개의 하드 링크가있는 경우 파일 액세스에 사용하는 경로에 따라 액세스 제한이 결정됩니다.
심볼릭 링크는 아무 것도 변경하지 않습니다. 커널은 호출 프로세스의 액세스 권한을 사용하여이를 통과합니다. 예를 들어, sym
디렉토리에 대한 심볼릭 링크 인 경우 에 액세스 dir
하려면 실행 권한이 필요 dir
합니다 sym/foo
. 심볼릭 링크 자체에 대한 권한은 OS 및 파일 시스템에 따라 중요하거나 중요하지 않을 수 있습니다 (일부는 존중하고 일부는 무시).
루트 디렉토리에서 실행 권한을 제거하면 사용자가 디렉토리 트리의 일부 (보다 특권이있는 프로세스로 변경되어야 함)로 효과적으로 제한됩니다. 이를 위해서는 액세스 제어 목록을 사용해야합니다. 예를 들어, /
및 것은 /home
한계가-떨어져있다 joe
( setfacl -m user:joe:0 / /home
) 및 /home/joe
인 joe
'다음의 홈 디렉토리 joe
(와 쉘 스크립트를 실행을 포함하여 시스템의 나머지 부분에 액세스 할 수 없습니다 /bin/sh
액세스해야 링크 된 바이너리 또는 동적으로 /lib
, 당신 때문에' 실용화를 위해서는 더 깊이 들어가야한다 (예 :) setfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib
.
디렉토리에 대한 읽기 권한은 항목을 열거 할 권리를 부여합니다. 읽기 권한을 부여하지 않고 실행 권한을 부여하는 것이 유용한 경우가 있습니다. 항목 이름은 해당 항목에 액세스하기위한 비밀번호 역할을합니다. 실행 권한이 없으면 디렉토리에 읽기 또는 쓰기 권한을 부여하는 데 사용할 수 없다고 생각합니다.