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


20

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

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

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


2
디렉토리 통과 (/ a 및 / a / b 통과)를 허용하려면 '실행 비트'를 설정해야합니다. 이렇게하면 문제가 해결 될 수 있습니다.chmod +x /a/b
ex0ns

답변:


34

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


실행 가능한 비트를 설정하는 대신 다른 위치에있는 a / b / c에 대한 하드 링크를 제공 할 수 있습니까?
Moby Disk

2
@MobyDisk 디렉토리에 하드 링크 할 수 없습니다.
Michael Hampton

그것은 작동하지 않을 것입니다. 왜냐하면 무엇이든간에 당신은 여전히 b링크를 읽어야 합니다.c
stevieb

3
여기에는 몇 가지 중요한 경고 사항이 있습니다. a/b그룹 에 없는 그룹 / 기타 권한이 있는 파일 중 하나라도 공격자가 자신의 이름을 알고 있거나 추측 할 수 있으면 해당 파일과 상호 작용할 수 있습니다.
Kevin

True @Kevin, 아래의 모든 항목에 대한 권한 b은을 작성하기 전에이를 방지하도록 설정 한 권한이 있어야하며 c, 다른 항목 b을 채워서 소유자에게만 권한을 보장하기 위해 부지런히 필요합니다 .
stevieb

9

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

/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/
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.