나는 user 를 생성하고 small
그를 그룹에 추가했으며 kek
그룹이 사용자의 홈 디렉터리에 있는 파일만 읽을 수 있도록 허용했습니다. 그런 다음 모든 파일 을 root:kek
.small
내가 실행한 명령은 다음과 같습니다.
useradd -ms /bin/bash small
groupadd kek
usermod -a -G kek small
chown -R root:kek /home/small/*
chmod -R g=r /home/small/*
그런 다음 파일을 삭제하려고 하면 다음과 같습니다.
$ ls -l
total 16
-rw-r--r-- 1 root kek 240 Jun 23 06:17 Dockerfile
-rw-r--r-- 1 root kek 39 Jun 21 09:17 flag.txt
-rw-r--r-- 1 root kek 2336 Jun 22 14:19 server.py
-rw-r--r-- 1 root kek 24 Jun 22 08:16 small.py
$ rm flag.txt
$ ls -l
total 12
-rw-r--r-- 1 root kek 240 Jun 23 06:17 Dockerfile
-rw-r--r-- 1 root kek 2336 Jun 22 14:19 server.py
-rw-r--r-- 1 root kek 24 Jun 22 08:16 small.py
$ whoami
small
왜 이런 일이 발생합니까?
답변1
파일 삭제 가능 여부는 파일의 속성이 아니라 파일이 위치한 디렉터리의 속성입니다. 사용자는 쓸 수 없는 디렉터리에 있는 파일을 삭제할 수 없습니다.
파일(및 하위 디렉터리)은 디렉터리 노드의 항목입니다. 파일을 삭제하려면 디렉터리 노드에서 파일의 링크를 해제해야 하므로 디렉터리에 있는 파일을 삭제하려면 디렉터리에 대한 쓰기 권한이 있어야 합니다.
- 파일의 쓰기 권한에 따라 파일 내용 변경이 허용되는지 여부가 결정됩니다.
- 디렉토리의 쓰기 권한은 디렉토리 내용에 대한 변경이 허용되는지 여부를 결정합니다.
관련된:
답변2
Unix에서는 파일을 삭제하지 않고 디렉터리 목록에서 제거합니다. 파일에 더 이상 디렉토리 목록이 없고(여러 개가 있을 수 있음) 프로세스에 의해 더 이상 열리지 않으면 삭제됩니다.
디렉토리에 대한 쓰기 권한이 있는 경우 파일 디렉토리 목록을 삭제할 수 있습니다.
무엇을 해야할지
- 옵션 1 디렉터리에 대한 쓰기 권한을 제거합니다.
- 옵션 2는 디렉터리(
chmod +t «directory-name»
)에 고정 비트를 추가합니다. 소유자와 루트 사용자(실제로 CAP_FOWNER 기능이 있는 사용자)만 파일을 삭제할 수 있도록 만듭니다. 사용자가 파일을 추가할 수 있도록 쓰기 권한이 필요한 경우 이 옵션을 사용하십시오.