ext2/3/4 파일 시스템의 디렉토리에 하드 링크를 사용할 수 있습니까?

ext2/3/4 파일 시스템의 디렉토리에 하드 링크를 사용할 수 있습니까?

하드 링크를 생성하는 데 사용된 명령(및 어쩌면 시스템 호출)이 디렉토리에 대한 하드 링크 생성을 허용하지 않는다는 내용을 읽었습니다. 또한 하드 링크가 DAC, Linux 보안 모듈, IMA/EVM과 같은 경로 기반 보안에 문제를 일으킬 수 있다는 것도 배웠습니다. 디렉터리에 대한 하드 링크를 만들 수 없는 경우 해당 디렉터리에서 발생할 수 있는 보안 문제를 해결할 수 있습니다. 그러나 스토리지 수준에서 파일 시스템을 편집하여 디렉터리 inode에 대한 두 개 이상의 하드 링크를 생성할 수 있습니까?

답변1

목차하다하드 링크가 있습니다... mkdir새 디렉토리를 만들 때마다 ..항목은 상위 디렉토리와 동일한 inode에 대한 링크입니다.

예를 들어

$ ls -lid .
23855134 drwxr-xr-x 2 sweh sweh 4096 Sep  8 21:57 .
$ mkdir foo
$ ls -lid . foo/..
23855134 drwxr-xr-x 3 sweh sweh 4096 Sep  8 21:57 .
23855134 drwxr-xr-x 3 sweh sweh 4096 Sep  8 21:57 foo/..

디렉토리의 링크 수가 1씩(2에서 3으로) 증가하고 인덱스 노드가 "."임을 알 수 있습니다. 그리고 "foo/.."는 둘 다 23855134입니다. "."과 상위 디렉토리의 항목도 inode 번호를 공유하기 때문에 링크 수가 2로 시작한다는 것을 알 수 있습니다.

$ ls -lid foo foo/.
23855343 drwxr-xr-x 2 sweh sweh 4096 Sep  8 21:57 foo
23855343 drwxr-xr-x 2 sweh sweh 4096 Sep  8 21:57 foo/.

이제 파일 시스템을 편집하여 다른 링크를 만들 수 있다면 쉽게 불평할 수 있습니다 fsck.

이러지 마세요 :-)

답변2

기술적으로도 이 작업을 쉽게 수행할 수 있습니다. 디렉토리 하드 링크를 생성할 수 있는 명령이 debugfs있습니다 . ln그렇게 하면 동일한 inode를 가리키는 여러 디렉터리가 있는 작업 파일 시스템이 생성됩니다 ..(스티븐 해리스' 대답), 링크 개수를 올바르게 표시하려면 링크 개수를 수동으로 처리해야 합니다.

Stephen이 말했듯이 이것은 e2fsck불쾌할 것이며 중복된 디렉토리 항목을 제거합니다(그러나 데이터는 손실되지 않으며 디렉토리는 남게 됩니다).

(나는 실제로 깨진 것, 특히 디렉토리 루프를 시도한 적이 없습니다 ...)

관련 정보