Android 장치에 디렉토리가 있고 해당 권한을 777로 설정했습니다. 그러나 루트가 아닌 사용자로서 이러한 권한으로 기존 파일에 액세스할 수는 있지만 새 파일을 생성할 수는 없습니다.
$ ls -la
total 0
drwxrwxrwx 2 root root 60 2022-02-05 11:11 .
drwxrwxrwx 3 root root 60 2022-02-05 10:23 ..
-rw-rw-rw- 1 root root 0 2022-02-05 11:12 a.txt
$ touch a.txt
$ ls -la
total 0
drwxrwxrwx 2 root root 60 2022-02-05 11:11 .
drwxrwxrwx 3 root root 60 2022-02-05 10:23 ..
-rw-rw-rw- 1 root root 0 2022-02-05 11:14 a.txt
파일을 터치할 수 있음을 나타내는 타임스탬프가 변경됩니다. (파일을 cat >>할 수도 있는데 그것도 작동합니다.) 이제 새 파일을 생성하려고 합니다.
$ touch b.txt
touch: 'b.txt': Permission denied
디렉토리 권한(777)은 누구에게나 디렉토리를 수정할 수 있는 권한을 부여해야 하는데 왜 새 파일을 만들 수 없습니까? 또한 디렉터리 권한을 1777로 설정해 보았으나 문제가 해결되지 않았습니다. cat >> 파일을 시도하면 동일한 오류가 발생합니다.
/system/bin/sh: can't create b.txt: Permission denied
내 휴대폰의 앱, ssh 셸, adb 셸을 포함하여 몇 가지 다른 위치에서 파일을 생성해 보았습니다.
확장된 속성이 있을 수 있다는 내용을 다른 곳에서 읽었지만 "attr" 명령은 존재하지 않는 것 같습니다.
# attr
/system/bin/sh: attr: inaccessible or not found
그러나 나는 해당 디렉토리에 대한 권한을 직접(루트로서) 생성하고 부여했으므로 거기에 있는 것을 원하지 않습니다.예모든 확장 속성!
고쳐 쓰다:
실행하면 strace touch b.txt
오류 주위에 다음 줄이 생성됩니다.
utimensat(AT_FDCWD, "b.txt", NULL, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "b.txt", O_RDWR|O_CREAT, 0666) = -1 EACCES (Permission denied)
write(2, "touch: b.txt: Permission denied\n", 32touch: b.txt: Permission denied
) = 32
(마지막 것은 분명히 오타입니다)