600과 같이 제한적인 권한이 있는 루트 폴더가 있고 하위 폴더/파일에 777 권한이 있는 경우 루트 폴더에 600 권한이 있어도 모든 사람이 하위 폴더를 읽고 쓰고/실행할 수 있습니다.
답변1
정확한 규칙은 해당 디렉토리에 대한 실행 권한이 있는 경우에만 디렉토리를 탐색할 수 있다는 것입니다.
예를 들어 액세스하려면 dir/subdir/file
및 에 대한 실행 권한과 원하는 액세스 유형에 대한 권한이 필요합니다. 극단적으로 말하면, 상대 경로를 통해 파일에 액세스하려면 현재 디렉터리에 대한 실행 권한이 필요한 것이 일반적인지 잘 모르겠습니다(Linux에서는 실행 권한이 필요함).dir
dir/subdir
file
파일에 액세스하는 방법이 중요합니다. 예를 들어, 실행 권한은 있지만 /foo/bar
실행 권한은 없지만 /foo
현재 디렉터리가 인 경우 상대 경로를 통해 의 파일에 액세스 /foo/bar
할 수 있지만 /foo/bar
절대 경로를 통해서는 액세스할 수 없습니다. /foo/bar
이 경우에는 변경할 수 없습니다. cd /foo/bar
권한이 더 높은 프로세스가 권한이 해제되기 전에 완료되었을 수 있습니다. 파일에 여러 개의 하드 링크가 있는 경우 파일에 액세스하는 데 사용되는 경로에 따라 액세스 제한이 결정됩니다.
심볼릭 링크는 아무것도 변경하지 않습니다. 커널은 호출 프로세스의 액세스 권한을 사용하여 이를 탐색합니다. 예를 들어, sym
디렉토리에 대한 심볼릭 링크인 경우 해당 디렉토리에 액세스 dir
하려면 실행 권한이 필요합니다 . 심볼릭 링크 자체에 대한 권한은 운영 체제 및 파일 시스템에 따라 중요할 수도 있고 중요하지 않을 수도 있습니다(일부는 이를 존중하고 일부는 무시함).dir
sym/foo
루트 디렉터리에서 실행 권한을 제거하면 사용자가 디렉터리 트리의 일부(더 높은 권한을 가진 프로세스가 변경해야 하는 부분)로 효과적으로 제한됩니다. 이를 위해서는 액세스 제어 목록이 필요합니다. 예를 들어, /
및 /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
디렉토리에 대한 읽기 권한은 항목을 열거할 수 있는 권한을 부여합니다. 읽기 권한을 부여하지 않고 실행 권한을 부여하는 것이 유용한 경우가 있습니다. 항목 이름은 해당 항목에 액세스하기 위한 비밀번호로 사용됩니다. 실행 권한 없이 디렉토리에 읽기 또는 쓰기 권한을 부여하는 것은 어떤 용도로도 사용할 수 없습니다.
답변2
캔트. 루트 폴더 권한은 하위 파일 권한을 제한합니다. 시도해 볼 수 있습니다.
$ mkdir rootdir
$ touch ./rootdir/childfile
$ chmod 777 ./rootdir/childfile
$ chmod 600 rootdir
$ cat ./rootdir/childfile
알겠어요:
$ cat: ./rootfolder/childfile: permission denied
답변3
상위 디렉터리가 쓰기 가능하지 않은 경우에도 하위 디렉터리를 쓰기 가능하게 만들 수 있습니다. 나는 그룹을 위해 이것을한다.
예: 상위 디렉터리는 그룹 인코더가 소유합니다.
drwxr-sr-x
하위 디렉토리
drwxrwsr-x
인코더 그룹의 모든 구성원은 여전히 하위 디렉터리에 쓸 수 있지만 상위 디렉터리에는 쓸 수 없습니다.
답변4
상위 디렉터리에 대한 실행 권한이 없더라도 파일에 액세스하기 위한 하드 링크를 만들 수 있습니다. 하지만 여기서 문제는 상위 디렉터리의 실행 권한을 잃기 전에 하드 링크를 만들어야 한다는 것입니다.
$ ln foo/bar/test_privs privs_test_checking