하위 디렉토리에 액세스 할 때 상위 디렉토리의 권한이 중요합니까?


159

제한적인 권한을 가진 루트 폴더가있는 경우 600이라고 가정하고 하위 폴더 / 파일에 777 권한이 있으면 루트 폴더가 600이지만 모든 사람이 하위 파일을 읽거나 쓰거나 실행할 수 있습니까?


12
디렉토리를 600으로 chmodding하면 디렉토리에 chdir에 대한 실행 권한이 필요하므로 소유자도 액세스 할 수 없습니다.
Shadur

답변:


183

정확한 규칙은 다음과 같습니다. 디렉토리에 대한 실행 권한이있는 경우에만 디렉토리를 통과 할 수 있습니다.

그래서 액세스 예를 들어 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/joejoe'다음의 홈 디렉토리 joe(와 쉘 스크립트를 실행을 포함하여 시스템의 나머지 부분에 액세스 할 수 없습니다 /bin/sh액세스해야 링크 된 바이너리 또는 동적으로 /lib, 당신 때문에' 실용화를 위해서는 더 깊이 들어가야한다 (예 :) setfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib.

디렉토리에 대한 읽기 권한은 항목을 열거 할 권리를 부여합니다. 읽기 권한을 부여하지 않고 실행 권한을 부여하는 것이 유용한 경우가 있습니다. 항목 이름은 해당 항목에 액세스하기위한 비밀번호 역할을합니다. 실행 권한이 없으면 디렉토리에 읽기 또는 쓰기 권한을 부여하는 데 사용할 수 없다고 생각합니다.


32

아니요. 루트 폴더 권한은 하위 파일 권한을 제한합니다. 시도해 볼 수 있습니다.

$ mkdir rootdir
$ touch ./rootdir/childfile
$ chmod 777 ./rootdir/childfile
$ chmod 600 rootdir
$ cat ./rootdir/childfile

나는 이것을 얻는다 :

$ cat: ./rootfolder/childfile: permission denied

4

부모 디렉토리가 아닌 경우에도 자식 디렉토리를 쓰기 가능하게 만들 수 있습니다. 나는 그룹을 위해 이것을한다.

예 : 부모 디렉토리는 그룹 코더가 소유합니다.

drwxr-sr-x

자식 디렉토리

drwxrwsr-x

코더 그룹의 모든 구성원은 여전히 ​​하위 디렉토리에는 쓸 수 있지만 상위 디렉토리에는 쓸 수 없습니다.


1

상위 디렉토리에 대한 실행 권한이없는 경우에도 파일에 액세스하기위한 하드 링크를 작성할 수 있습니다. 그러나 여기서 중요한 것은 부모 디렉토리에 대한 실행 권한을 잃기 전에 하드 링크를 만들어야한다는 것입니다.

$ ln foo/bar/test_privs privs_test_checking
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.