하드 링크 생성-권한?


17

어떤 권한이 하드 링크 생성에 영향을 줍니까? 파일 소유권 자체가 중요합니까?


사용자 alicetarget.txt디렉토리에있는 파일 에 대한 하드 링크를 작성하려고 한다고 가정하십시오 target-dir.

  • 어떤 권한은 않습니다 alice모두 필요 target.txt하고 target-dir?
  • 경우 target.txt사용자가 소유 bill하고 target-dir사용자가 소유 chad, 그것은 아무것도 변경합니까?

ext4파일 시스템 에서 다음 폴더 / 파일 구조를 작성 하여이 상황을 시뮬레이션하려고했습니다 .

#> ls -lh . *
.:
drwxr-xr-x 2 bill bill 60 Oct  1 11:29 source-dir
drwxrwxrwx 2 chad chad 60 Oct  1 11:40 target-dir

source-dir:
-r--r--r-- 1 bill bill 0 Oct  1 11:29 target.txt

target-dir:
-rw-rw-r-- 1 alice alice 0 Oct  1 11:40 dummy

alice대한 소프트 링크를 만들 수는 있지만 target.txt하드 링크를 만들 수는 없습니다.

#> ln source-dir/target.txt target-dir/
ln: failed to create hard link ‘target-dir/target.txt’ => ‘source-dir/target.txt’: Operation not permitted

alice소유 target.txt하고 권한이 변경되지 않으면 하드 링크가 성공합니다. 내가 여기서 무엇을 놓치고 있습니까?


과제입니까? 어떤 경우에는 어떤 대답을하기로 선택했는지에 영향을 줄 수 있습니다 (물론 과제에 대해 질문하는 것은 경계를 벗어난 것이 아닙니다). 어쨌든, 당신은 그 시나리오를 만들고 어떤 일이 일어나는지 보려고 노력 했습니까?
Eric Renouf

아니요 과제를위한 것이 아닙니다. 나는이 정확한 시나리오에 직면하고 있으며 약간의 추측이 있지만 이론적 인 관점에서 묻는 것이 더 좋을 것이라고 생각했습니다. 제 경우에는 루트 권한이 없으면 권한 target.txt과 관계없이 하드 링크를 만들 수 없습니다 . target-dirsudo
gcscaglia

하드 링크는 동일한 소유권과 권한을 공유하므로 원본 파일에 액세스하는 것과 동일합니다.
teppic

@teppic 내 어려운로 하드 링크를 생성하고, 생성 된 하드 링크에 접속되지 alice.I이 원본 파일과 (만들어 그것에 대한 하드 링크 모두에 액세스 할 수 있습니다 sudo),하지만 난으로 링크를 만들 수 없습니다 alice우리 모두는 이러한 권한으로 충분하다는 데 동의 하지만 사용자 입니다.
gcscaglia

답변:


19

하드 링크를 만들려면 모든 경우에 alice대한 write+execute권한 이 필요합니다 target-dir. 필요한 권한 target.txt은 다음과 같습니다.

  • 경우 fs.protected_hardlinks = 1다음 alice중 하나를 소유해야 target.txt또는 적어도 read+write그 권한을.
  • 그렇다면 fs.protected_hardlinks = 0모든 권한 집합이 수행됩니다. 000도 괜찮습니다.

비슷한 질문 에 대한이 답변에는이 질문에 대한 답변이 누락되었습니다.

에서 http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1 [강조 광산]

하드 링크 :

시스템 파일과 동일한 파티션에 사용자 쓰기 가능 디렉토리가있는 시스템에서 오랜 보안 문제는 하드 링크 기반의 사용 시간 점검 시간 경쟁이며, 세계 기록 가능 디렉토리에서 가장 일반적으로 나타납니다 / tmp와 같은 이 결함을 악용하는 일반적인 방법은 주어진 하드 링크를 따라갈 때 권한 경계를 넘는 것입니다 (즉, 루트 프로세스는 다른 사용자가 만든 하드 링크를 따릅니다). 또한 사용자가 잠재적으로 취약한 setuid / setgid 파일을 "고정"하여 관리자가 실제로 시스템을 완전히 업그레이드하지 못하는 문제가 있습니다.

해결 방법은 사용자가 이미 기존 파일의 소유자이거나 기존 파일에 대한 읽기 / 쓰기 액세스 권한이있는 경우에만 하드 링크를 만들 수 있도록하는 것 입니다.


감사! 이것이 데비안 9에서 하루 동안 고군분투했던 것입니다!
Arda

디렉토리에 rwx perms가 있고 파일에 rw perms가 있어도 "작동이 허용되지 않는"이유는 무엇입니까?
Michael

1

alice필요 최소한 읽기 대한 권한 target.txt및 쓰기 + 실행 권한을 target-dir.

이제 권한 구조는 3 중으로 구분 된 세트로 작동합니다.

  1. 사용자 권한 : 노드를 소유 한 사용자 에게 적용됩니다 .
  2. 그룹 권한 : 노드를 소유 한 그룹에 속한 모든 사용자에게 적용됩니다 .
  3. 다른 사람의 권한 : 노드를 소유하지 않은 다른 사용자 / 그룹에 적용됩니다 .

따라서 소유권 질문은 필요한 권한에 대한 권한 집합에만 영향을 미칩니다 alice.

  • 경우 alice소유자 사용자입니다, 필요한 권한은 "사용자"부분에 있어야합니다.
  • alice그룹을 소유 한 그룹의 일부인 경우 필요한 권한이 "그룹"파트에 있어야합니다.
  • 경우 alice그것을 소유하지 그것을 소유하는 그룹의 일부가 아닌 않으며, 필요한 권한은 '기타'부분에 있어야합니다.

나도 그렇게 생각했다. 그러나 내 상황 target.txt에서 444 권한 target-dir이 있고 777 권한이 있지만 루트로 연결하거나 링크하는 파일을 소유하지 않으면 하드 링크를 만들 수 없습니다. 이상하게도 설명대로 소프트 링크가 작동합니다.
gcscaglia

이 정보는 질문 자체에 유용 할 것이므로 업데이트하는 것이 좋습니다. 이상하게도 이전에는 생각하지 못했습니다 ...하지만 작업중 인 파일 시스템이 Unix와 같은 소유권 / 허가를 지원합니까?
dave_alcarin

그렇습니다. 페도라 21 시스템의 기본 ext4입니다. 링크는 내가 파일의 소유자 일 때 작동합니다.
gcscaglia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.