답변:
할 수 있습니다. /a/b
디렉토리 에서 실행 가능 비트를 설정하기 만하면 됩니다. 그러면 아무것도 볼 수 b
없지만 직접 가면 모든 것을 할 수 있습니다 a/b/c
.
% mkdir -p a/b/c
% chmod 711 a/b
% sudo chown root a/b
% ll a/b
ls: cannot open directory a/b: Permission denied
% touch a/b/c/this.txt
% ls a/b/c
this.txt
다른 사람이의 내용을 나열 할 수는 없지만 /a/b
파일 이름을 추측하면 해당 디렉토리의 파일에 액세스 할 수 있습니다.
% echo hello | sudo tee a/b/f
% cat a/b/f
hello
% cat a/b/doesntexist
cat: a/b/doesntexist: No such file or directory
따라서 디렉토리 내의 다른 모든 파일 / 디렉토리에 대한 적절한 권한 (그룹 / 세계 없음)을 유지 b
해야합니다. 이렇게하면 이러한 경고를 피할 수 있습니다.
b
링크를 읽어야 합니다.c
a/b
그룹 에 없는 그룹 / 기타 권한이 있는 파일 중 하나라도 공격자가 자신의 이름을 알고 있거나 추측 할 수 있으면 해당 파일과 상호 작용할 수 있습니다.
b
은을 작성하기 전에이를 방지하도록 설정 한 권한이 있어야하며 c
, 다른 항목 b
을 채워서 소유자에게만 권한을 보장하기 위해 부지런히 필요합니다 .
사용자가에 액세스 /a/b
할 수 없으면의 파일에 액세스 할 수 없습니다 /a/b/c
. /a/b/c
디렉토리 탐색이에서 중지되므로 에 대한 권한 은 관련이 없습니다 /a/b
.
원하는 것은 디렉토리 /a/b
가 나열되는 것을 방지하는 것이지만 /a/b
파일 이름을 추측하면 파일에 액세스하는 사용자에게는 문제가 /a/b
없지만 실행 가능하지만 읽을 수는 없습니다. 디렉토리에서 읽기 권한은 디렉토리 내용 나열 만 제어하는 반면, 실행 권한은 해당 디렉토리의 항목에 대한 액세스를 제어합니다.
# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# echo 'hello' >/a/b/existingfile
# su bob -c 'ls -l /a/b'
ls: /a/b: Permission denied
# su bob -c 'cat /a/b/nosuchfile'
cat: /a/b/nosuchfile: No such file or directory
# su bob -c 'cat /a/b/existingfile'
hello
# su bob -c 'ls -l /a/b/c'
… contents of /a/b/c …
을 /a/b
제외한 다른 사용자가 파일에 액세스하지 못하게 /a/b/c
하려면 바인드 마운트/a/b/c
를 통해 다른보기를 통해 노출 할 수 있습니다 .
# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# mkdir /c
# mount --bind /a/b/c /c
# su bob -c 'ls /a/b/c'
ls: /a/b/c: Permission denied
# su bob -c 'ls -l /c'
… contents of /a/b/c …
chmod +x /a/b