몇 년 동안 리눅스와 함께 일하면서 자유 시간을 보냈을 때 몇 가지 기본 사항을 다시 살펴보기로 결심했습니다. 그래서 권한 (소스 코드를 확인하지 않고)과 폴더의 특별한 경우에 대한 내용을 다시 읽고 폴더 권한에 대한 새로운 (적어도 ...) 생각을했습니다 (특정 사용자 / 그룹 / 기타) : 폴더를 두 개의 열이있는 테이블로 생각합니다.
filename | inode
foo | 111
bar | 222
읽기 당신이 테이블의 왼쪽 열을 읽을 수 (및 목록) 할 수있는 권한 수단의 쓰기 추가하고 테이블에 항목을 제거하고에 권한 대응 실행 아이 노드에 파일 이름에서 번역 할 수있는 권한에 해당합니다; 즉 , 폴더의 내용에 액세스 할 수 있습니다 .
몇 가지 실험을 해본 결과 결과는이 "세계관"과 일치하지만 한 가지 결론은 피할 수없는 것 같습니다. 권한이있는 폴더 d-w-------
는 전혀 쓸모가 없습니다. 정교하게 : 내용을 나열 할 수 없으며 내부에 존재하는 파일을 읽을 수 없습니다 (이름을 inode로 변환 할 수 없기 때문에). 번역을 의미하는 파일을 제거하거나 이름을 바꾸거나 추가 할 수 없습니다 그리고 하드 링크를 추가 할 수도 없습니다 (따라서 이름과 inode 번호를 추가해야한다는 것을 의미하기 때문에 실행 권한을 설정하지 않는 목적을 위반한다는 것을 의미합니다. . 이 경우 물론, 있는 하나의 폴더 안에 파일이 당신이 그 내용을 삭제할 수 없기 때문에, 당신은 어느 폴더를 삭제할 수 없습니다.
그래서 ... 나는 두 가지 질문을하고 싶습니다 :
- 이 비유가 맞습니까, 아니면 큰 실수입니까?
- 에 관계없이 이전의 대답은,이 모든 설명이 적절한 같은 권한을 가진 폴더를 가진 상황은?
mkdir foo ; chmod 200 foo ; touch foo/bar
내가 얻을 touch: cannot touch ‘foo/bar’: Permission denied
. 이것은 foo / bar가 이미 존재하더라도 발생합니다. bash (Arch Linux)에서 테스트 중입니다.