루트가 아닌 사용자에 대한 'mv' 명령의 예기치 않은 동작

루트가 아닌 사용자에 대한 'mv' 명령의 예기치 않은 동작

최근에 저는 다음과 같은 사실을 우연히 발견했습니다.

루트가 아닌 사용자가 다음에 속한 파일을 myuser이동하려고 합니다 .root일했다? ! ?

$ whoami
myuser

$ ls -lAhd
drwx------ 2 myuser myuser 4,0K  4. Nov 14:24 .

$ ls -lAh
total 0
-rw-r--r-- 1 root root 0  4. Nov 14:24 testfile.txt

$ mv testfile.txt testfile.txt.bak

$ ls -lAh
total 0
-rw-r--r-- 1 root root 0  4. Nov 14:24 testfile.txt.bak

그래서 내 질문은: 이것이 왜 작동하는가?

"mv" 명령은 항상 나를 귀찮게 한다루트가 아님, 옳은?

나는 이해한다:

  • 파일을 읽을 수 있습니다 myuser(644 권한, 모든 사람이 파일을 읽을 수 있음).
  • 파일은 다음을 통해 복사할 수 있습니다 myuser(디렉토리가 에 속하기 때문에 myuser).

..그렇다면 실제로 무슨 일이 일어나는지 (나는 mv의 소스 코드를 보지 않았습니다).

그러나 myuser파일에 대한 쓰기 권한이 없습니다. 그렇다면 어떻게 원본 파일을 삭제할 수 있었습니까?

이것이 일어나지 않고 파일이 실제로 "이름이 바뀌었다"고 해도 작동하지 않아야 합니다. 그렇죠? ! ?

내가 뭐 놓친 거 없니?

답변1

이름 바꾸기 시스템 호출이 제대로 작동하는 데 필요한 (소스 및 대상) 디렉터리에 대한 쓰기 권한이 있습니다. 더 안전한 디렉토리는 쓰기 액세스 권한을 부여하지 않습니다.

나쁜 비유: 사서는 책을 다른 책장에 분류하기 위해 책을 열 필요가 없습니다.

이름 바꾸기는 복사와 다릅니다. 파일을 읽지 않으면 cp나 편집기를 사용할 수 없습니다. 그러나 최소한 동일한 파일 시스템에서는 이름을 바꿀 수 있습니다.

관련 정보