+rw -x 권한을 사용하여 파일을 디렉토리로 이동하고 디렉토리에 있는 파일 이름을 바꿀 수 있는 UNIX 시스템이 있습니까?

+rw -x 권한을 사용하여 파일을 디렉토리로 이동하고 디렉토리에 있는 파일 이름을 바꿀 수 있는 UNIX 시스템이 있습니까?

저는 UNIX/LINUX 파일 시스템이 어떻게 작동하는지 더 잘 이해하려고 노력하고 있습니다.

Linux의 파일 시스템

inode와 비교하여 디렉토리 구조에는 파일에 대한 제한된 정보가 포함되어 있습니다. 파일의 inode 번호, 이름, 이름 길이만 저장됩니다.

info '(coreutils) File permissions'
  1. 파일을 읽을 수 있는 권한입니다. 디렉토리의 경우 이는 디렉토리의 내용을 나열할 수 있는 권한을 의미합니다.
  2. 파일을 쓰기(변경)할 수 있는 권한입니다. 디렉터리의 경우 이는 디렉터리에서 파일을 생성하고 삭제할 수 있는 권한을 의미합니다.
  3. 파일을 실행할 수 있는 권한입니다(프로그램으로 실행). 디렉터리의 경우 이는 디렉터리의 파일에 액세스할 수 있는 권한을 의미합니다.

이제 권한 readwrite디렉토리에 대한 읽기 및 쓰기를 의미하므로 x ls이름만 제공되지는 않습니다. inode: 파일 권한 등과 데이터를 읽을 수 있으므로 이름을 미리 알고 파일에 액세스할 수 있습니다 x.access files

그런데 왜 시스템(정확하게는 Linux Mint 20, 내가 기억하는 바에 따르면 많은 UNIX가 동일한 방식으로 작동하지만 모든 운영 체제는 아님)이 작동하는 이유는 다음과 같습니다.

ls -lad 1
drw-rw-rw- 2 alex alex 60 Oct  5 10:55 1
mv ./test ./1
mv: cannot stat './1/test': Permission denied
mv 1/2 1/3
mv: failed to access '1/3': Permission denied

mv폴더에 파일을 +rw -x생성하고 permission denied? - 디렉토리에 기록했으며 시스템은 파일과 디렉토리 이름에 대한 하드 링크를 기록하고 r해당 이름을 가진 파일이 이미 존재하는지 확인할 수 있습니다( mv파일 이름을 바꾸면 비슷한 결과가 생성됩니다). . 사용 사례는 파일을 디렉터리로 끌어다 놓을 수 있지만 나중에 액세스하거나 변경할 수 없다는 것입니다. 그렇게 작동하지 않는 이유가 있나요? 이를 허용하는 UNIX 시스템이 있습니까?

다음에 추가:

의견에 따르면 : man 'rename(2)'

오류 EACCES oldpath 또는 newpath를 포함하는 디렉토리에 대한 쓰기 권한이 거부되었거나, oldpath 또는 newpath의 경로 접두어 중 하나가 있는 디렉토리에 대한 검색 권한이 거부되었거나, oldpath가 디렉토리이고 쓰기 권한이 허용되지 않습니다(. . 항목). (path_solution(7)도 ​​참조하십시오.)

그러면 질문은 다음과 같습니다. 이름 바꾸기 시스템 호출에 newpath 접두사의 마지막 부분에 대한 검색 권한이 필요한 이유는 무엇입니까? 이름이 존재하는지, 대체가 허용되는지 확인하는 것이 더 쉽다는 것을 알고 있지만 검색 권한 없이 작성할 수 있지만 이름이 존재하는지 확인하기 위해 읽기 권한이 있으면 쓸 수 있는 것 같습니다.

답변1

파일을 디렉터리로 이동하려면 디렉터리 내용(예: X 권한)을 열거할 수 있어야 합니다.

위키피디아에서:실행 권한은 파일을 실행할 수 있는 권한을 부여합니다. 디렉토리에 대해 설정되면 실행 권한은 검색 권한으로 해석됩니다. 파일 이름이 알려진 경우 파일 내용 및 메타 정보에 대한 액세스를 허용하지만 읽기도 설정하지 않는 한 디렉토리 내의 파일을 나열하지 않습니다.

자세한 내용을 보려면 여기를 클릭하세요:https://www.hackinglinuxexpose.com/articles/20030424.html

man renameat2(시스템 호출 mv사용법) 에서 :

       EACCES Write permission is denied for the directory containing
              oldpath or newpath, or, search permission is denied for
              one of the directories in the path prefix of oldpath or
              newpath, or oldpath is a directory and does not allow
              write permission (needed to update the ..  entry).  (See
              also path_resolution(7).)

Linux에서는 최소한 실행 권한이 필요하며 Linux는 대부분 POSIX와 호환되므로 다른 모든 Unix도 같은 방식으로 작동한다고 생각합니다.

나는 이것이 약간 직관에 어긋난다고 말하고 싶지만 그것이 바로 그것입니다.

+rw -x 권한을 사용하여 파일을 디렉토리로 이동하고 디렉토리에 있는 파일 이름을 바꿀 수 있는 UNIX 시스템이 있습니까?

저는 그런 Unix는 모르지만 MacOS, Linux, FreeBSD만 사용해 왔습니다.

관련 정보