디렉토리 파일 설명자 dfd의 경우 openat(dfd, "..", ...) 와 같은 상향 탐색을 방지할 수 있습니까?

디렉토리 파일 설명자 dfd의 경우 openat(dfd, "..", ...) 와 같은 상향 탐색을 방지할 수 있습니까?

$service디렉토리를 가진 사용자가 있습니다 /srv/$service/subdir. /srv/$service모드는 0700이며, 이는 를 통해서만 액세스할 수 있음을 의미합니다 $service. 이 사용자는 …/subdir다음 명령을 사용하여 디렉터리 파일 설명자 또는 그 아래의 모든 디렉터리를 열 수 있습니다 .

int fd = open("…/subdir", O_RDONLY | O_CLOEXEC | O_DIRECTORY, 0);

Unix 도메인 소켓을 사용하면 폴더에 액세스할 수 없는 다른 유효한 사용자 ID로 실행되는 다른 프로세스와 파일 설명자를 공유할 수 있습니다. 여태까지는 그런대로 잘됐다.

하지만:홈 디렉토리에서 열려면 다른 프로세스를 호출할 수 있습니다 openat(fd, "../somefile", …). 다른 프로세스에서는 이 작업을 수행하지 않는다고 믿어야 합니다.somefile$service

어떻게이런 일이 발생하지 않도록 할 수 있나요? open()디렉터리 탐색을 방지하는 첫 번째 호출에서 일부 플래그를 놓쳤습니까 ? fcntl(fd, …)일부 호출을 사용하여 이 작업을 수행 할 수 있습니까 ? 아니면 다른 방법이 있나요?

답변1

하지만: 또 다른 프로세스[다른 사용자로 실행]열린 홈 디렉토리 openat(fd, "../somefile", …)에 있는 파일을 호출하는 기능.$service

아니요, 그렇지 않습니다. 이를 수행하려면 fd상위 디렉토리에 대한 실행 권한이 있어야 하지만 상위 디렉토리 모드에서는 0700소유자만 탐색할 수 있습니다.

관련 정보