개인 디렉터리 아래에 공용 디렉터리를 만들 수 있습니까? 있습니다. 다른

권한이 700 인 서버에 개인 폴더 / a / b가 있습니다. 다른 사용자가 / a / b의 내용을 나열하지 않기를 바랍니다. / a의 소유자는 루트입니다.

이제 모든 사용자에게 디렉토리 / a / b / c의 모든 권한을 열어야합니다.

/ a / b / c의 권한을 777로 변경했지만 다른 사람은 여전히 ​​액세스 할 수 없습니다.



답변

할 수 있습니다. /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해야합니다. 이렇게하면 이러한 경고를 피할 수 있습니다.


답변

이러한 권한이 있으면 목표에 도달 할 수 없습니다. directory에 가려면 c다른 모든 사용자가 b해당 디렉토리에 대한 실행 권한을 부여하여 수행되는 디렉토리를 통과하도록 허용해야합니다 . 로 /a/b모드를 711로 설정, 당신은 당신이 디렉토리 탐색을 부여하지만, 읽기 및 쓰기를 거부하고 있기 때문에 원하는 것을 얻을 수 있습니다. 그러나 다른 사용자가에 파일을 나열 할 수는 없지만 /a/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/

/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/


답변