상위 디렉터리와 하위 디렉터리가 있는 시나리오를 상상해 보세요. 상위 디렉터리에서 그룹 rwx를 지정했습니다. 해당 디렉토리 아래에는 그룹 권한이 있는 디렉토리가 있습니다. --- (따라서 권한이 없습니다.) 이것이 안전한가요? 그 이유는 무엇?
이 설정은 즉시 안전하지 않다는 생각이 들었습니다. 처음에는 그룹이 상위 디렉터리에 대한 모든 권한을 갖고 있으므로 하위 디렉터리에 대한 권한을 변경할 수 있다고 생각했습니다. 그러나 우리가 이 이론을 테스트했을 때 그것은 효과가 없었습니다. Test 디렉터리를 만들고 chmod 777 Test
;를 사용하여 권한을 변경했습니다. 그런 다음 해당 디렉터리 내에서 ChildTest 디렉터리를 만들고 권한을 설정하여 chmod 700 ChildTest
질문에 매개변수를 설정했습니다. 그런 다음 내 친구가 내 Test 디렉토리에 CD를 넣고 ChildTest에 액세스하기 위해 몇 가지 다른 방법을 시도했습니다. (우리 HP/UX 환경에서는 ksh를 사용합니다.)
cp -R ChildTest ~
chmod 777 ChildTest
mkdir New
mv ChildTest New # (also tried this with cp)
그에게는 그것이 없었기 때문에 모든 것이 실패했습니다 ChildTest
. 그래서 우리는 생각보다 안전할지도 모른다고 생각했습니다. 우리는 교수에게 물었고 그는 전혀 안전하지 않다는 사실을 다시 언급했지만 "자신의 권한을 변경하는 것이 너무 쉽기 때문에 두 사람이 필요합니다"라는 것 외에는 정보를 제공하지 않았습니다. "(이것은 우리를 정말 혼란스럽게 합니다. 왜냐면...우리는 그렇습니까?)
어쨌든 이 설정은 실제로 안전하지 않다고 확신하지만 이를 증명하는 방법을 모르겠습니다. 대답을 기대하지는 않지만 올바른 방향으로 나아가거나 내가 올바른 길을 가고 있다는 확인만 있으면 좋을 것 같습니다.
답변1
사실: 권한은 소위 "inode"의 각 파일/디렉토리에 저장되기 때문에 하위 디렉터리의 권한을 변경할 수 없습니다. 이 점에서는 안전합니다.
하지만이름디렉토리는 포함된 파일(및 하위 디렉토리)의 이름을 포함하는 특수 파일이기 때문에 하위 디렉토리의 이름은 상위 디렉토리에 저장됩니다. 상위 디렉터리에서 모든 사용자/그룹에는 쓰기 권한이 있습니다.
따라서 하위 디렉터리를 소유하지 않은 사용자는이름을 바꿔라그것, 또는제거하다하위 디렉터리(비어 있는 경우) 일부 시스템에서는 그럴 수도 있습니다.움직이는쓰기 권한이 있는 다른 디렉터리로 이동합니다(동일한 파일 시스템에 있는 경우).
답변2
POSIX를 통해,하위 디렉터리 권한을 변경해도 아무런 효과가 없습니다.:
유효 사용자 ID가 파일의 사용자 ID와 일치하는 프로세스 또는 적절한 권한이 있는 프로세스만 파일의 파일 모드 비트를 변경할 수 있습니다.
그러나 이름 바꾸기는 작동해야 하며 포함된 디렉터리에 대한 쓰기 권한만 필요합니다.
(root) /tmp# mkdir -p one/two; chmod 0777 one; chmod 0700 one/two
(user) /tmp/one$ mv two three && echo ok
ok
그러나 적어도 Linux에서는 고정 비트를 설정하면 자신에게 속하지 않은 파일과 디렉터리가 삭제되는 것을 방지할 수 있으므로 이런 일이 발생하지 않습니다.
(root) /tmp# chmod +t one
(user) /tmp/one$ mv three four
mv: cannot move 'three' to 'four': Operation not permitted
나는 이 문제에 영향을 미치는 HP-UX 특정 기능에 대해 알지 못한다는 점을 자유롭게 인정합니다.
하위 디렉터리의 이름을 바꿀 수 있는 문제의 크기는 해당 디렉터리로 무엇을 하느냐에 따라 달라집니다. 최상위 디렉터리에만 액세스할 수 있는 사용자는 하위 디렉터리의 파일을 읽을 수 없으므로 안전합니다. 그러나 동일한 이름으로 디렉터리의 이름을 바꾸고 다시 만들 수 있으므로 거기에 있어야 하는 모든 것을 모방할 수 있습니다.
일부 외부 서비스가 하위 디렉터리의 파일을 읽는 경우 이는 중요합니다. 파일이 저장되는 디렉토리를 생각해 보십시오 . 다른 사람의 이름으로 파일을 생성하는 것을 crontab
원하지 않습니다 .crontab