무엇을 해야할지

무엇을 해야할지

나는 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 기능이 있는 사용자)만 파일을 삭제할 수 있도록 만듭니다. 사용자가 파일을 추가할 수 있도록 쓰기 권한이 필요한 경우 이 옵션을 사용하십시오.

관련 정보