디렉토리에 대한 쓰기 전용 권한으로는 내부 파일 이름 바꾸기(이동)가 허용되지 않습니까?

디렉토리에 대한 쓰기 전용 권한으로는 내부 파일 이름 바꾸기(이동)가 허용되지 않습니까?

사실 저는 좀 더 일반적인 질문을 하고 싶습니다. "디렉토리에 대한 쓰기 권한을 통해 정확히 무엇을 할 수 있습니까?" -- 구체적인 예를 들어 접근해 보겠습니다.

질문이 길어서 급하시다면굵은 글씨를 읽어라-- 주요 부분을 덮어야 합니다.

다양한 소스(좋은 질문,하나 더,그리모아르의) 디렉토리 권한에 대해 다음과 유사한 내용을 말하십시오.

r, read - 디렉토리 내용 읽기(내부 파일 이름)

w, 쓰기 - 디렉토리 속성(예: 수정 시간) 변경 및 내부 항목 생성/이름 변경/제거

x, 검색 - 내부 파일에 액세스하면 파일의 inode에 액세스할 수 있으므로 실제 콘텐츠에 접근할 수 있습니다.

내 문제는 w. 어떤 디렉토리 속성에 액세스할 수 있나요?쓰기 권한만 있는 디렉터리 내에서 파일을 생성/이름 바꾸기/제거할 수 없습니다.tdir/: 디렉토리( )와 그 안에 있는 파일( afile) 을 만듭니다 . chmod -x-r tdir/, mv tdir/afile tdir/af, rm tdir/afile, -- 해당 디렉토리에도 권한을 touch tdir/newfile설정하지 않으면 모두 권한 거부로 실패합니다 .x

그리고 x혼자서는 디렉토리 내부에 파일을 생성/이름 바꾸기/제거할 수 있는 권한을 부여하지 않습니다.

그렇게 하려면 다음 두 가지가 모두 필요합니다 x.w.

그러나 touch tdir디렉토리의 수정 시간은 w다음과 같이 변경됩니다.

문제를 준수하기 위해 위의 소스를 이런 식으로 바꾸겠습니다. 디렉토리를 사용하면 r내부의 파일 이름을 볼 수 있지만 실제 파일(inode에 대한)에는 액세스할 수 없습니다. x파일의 inode에 대한 액세스를 제공하지만(즉, 해당 권한을 볼 수 있고 그에 따라 내용에 액세스할 수 있음을 의미함) 여전히 디렉토리의 어떤 것도 변경할 수 없습니다. 디렉토리는 실제로 일종의 파일이며 그 안의 내용을 변경하려면 권한이 필요합니다 w.

따라서 디렉토리에서 무언가를 변경하려면 w권한이 필요합니다. 변경 사항에 디렉터리에 있는 파일의 inode가 필요한 경우 x에도 필요합니다.

다음만 사용하여 디렉터리 내부의 파일을 제거할 수 없는 이유를 설명합니다 w.파일을 제거할 때 inode의 링크 수를 1씩 줄여야 합니다. inode를 알아야 합니다. 따라서 x디렉터리가 필요합니다..

그런데 x파일 생성(inode를 노출하지 않고 파일을 생성하도록 시스템에 요청할 수 있습니까?)과 파일 이름 변경/이동(파일을 이동할 때 어떤 식으로든 변경하지 않고 레코드만 변경)이 필요한 이유는 무엇입니까? 디렉토리 내부와 해당 inode 수?)?

어쩌면 그것은 단지 구현 일일까요? 즉, 실제로 파일 이름을 바꾸거나 파일을 생성하는 데 inode가 필요하지 않습니다. 파일 이름과 w권한만 필요합니다. 그러나 inode와 파일 이름은 디렉토리에서 하나의 레코드를 구성합니다. 따라서 파일 이름 변경 = 레코드 변경 = inode에 액세스하는 종류.

또한 수정 시간, 권한 및 파일 기록 외에 디렉터리에는 어떤 속성이 있습니까? 디렉토리에서 다른 무엇을 통해서만 변경할 수 있습니까 w?

답변1

x는 파일의 inode에 대한 액세스를 제공하지만(즉, 해당 권한을 볼 수 있고 그에 따라 내용에 액세스할 수 있음을 의미함) 여전히 디렉토리의 어떤 것도 변경할 수 없습니다. 디렉토리는 실제로 일종의 파일이며 그 안의 내용을 변경하려면 w 권한이 필요합니다.

예.

그러나 파일 생성(inode를 노출하지 않고 파일을 생성하도록 시스템에 요청할 수 있습니까?)과 파일 이름 변경/이동(파일을 이동할 때 어떤 방식으로든 변경하지 않고 파일 이름만 변경하는 데 x가 필요한 이유는 무엇입니까?) 디렉토리 내부의 레코드와 해당 inode 수?)?

가 없으면 x디렉토리 자체에만 영향을 미칠 수 있습니다. 즉, 외부에서 디렉토리를 보게 됩니다. 이 없으면 x디렉토리 항목이 범위를 벗어납니다. 디렉토리의 항목을 추가, 제거 또는 수정(예: 이름 바꾸기)하려면 해당 항목에 액세스할 수 있어야 합니다.

파일에 대한 권한에 따라 파일 콘텐츠로 수행할 수 있는 작업이 결정됩니다. 디렉토리 항목은 디렉토리의 내용이므로 디렉토리에 대한 권한은 파일의 디렉토리 항목으로 수행할 수 있는 작업을 결정합니다.

디렉토리에 대한 쓰기 권한을 사용하면 항목을 생성하고 제거할 수 있습니다. 이름 바꾸기는 항목을 원자적으로 생성하고 다른 항목을 제거하는 것으로 간주됩니다. 그 외에도 디렉터리에는 일반 파일과 동일한 메타데이터가 있습니다. 쓰기 권한을 사용하면 디렉터리의 마지막 수정 및 마지막 액세스 타임스탬프를 변경할 수도 있습니다. 디렉터리의 권한, 그룹 소유권 또는 액세스 제어 목록(지원되는 경우)을 변경하려면 이를 소유해야 합니다. 사용자 소유권을 변경하려면 대부분의 Unix 변형에는 루트가 필요합니다.

관련 정보