개인 디렉터리 아래에 공용 디렉터리를 만들 수 있나요?

개인 디렉터리 아래에 공용 디렉터리를 만들 수 있나요?

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

이제 모든 사용자에게 /a/b/c 디렉터리에 대한 전체 권한을 부여해야 합니다.

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

답변1

당신은 할 수 있습니다. 디렉토리에 실행 가능 비트를 설정하기만 하면 됩니다 /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이 경고를 피할 수 있습니다.

답변2

이러한 권한으로는 목표를 달성할 수 없습니다. 디렉토리에 액세스하려면 c다른 모든 사용자가 디렉토리를 탐색할 수 있도록 허용해야 하며 b, 이는 디렉토리에 실행 권한을 부여함으로써 수행됩니다. 모드 711로 설정하면 /a/b디렉터리 탐색을 허용하지만 읽기 및 쓰기는 거부하므로 원하는 결과를 얻을 수 있습니다. 하지만 다른 사용자는 할 수 없다는 점을 명심하세요.목록에 있는 파일 /a/b, 이름이 추측되고 파일에 충분한 열기 권한이 있으면 액세스 파일일 가능성이 높습니다.

답변3

사용자가 에 액세스할 수 없으면 /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 …

관련 정보