최근에 저는 다음과 같은 사실을 우연히 발견했습니다.
루트가 아닌 사용자가 다음에 속한 파일을 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나 편집기를 사용할 수 없습니다. 그러나 최소한 동일한 파일 시스템에서는 이름을 바꿀 수 있습니다.