为什么我无法在权限为777的目录中创建文件?

为什么我无法在权限为777的目录中创建文件?

我在 Android 设备上有一个目录,已将其权限设置为 777。但是作为非 root 用户,虽然我可以使用这些权限访问现有文件,但无法创建新文件。

$ 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 shell 和 adb shell。

我在其他地方读到可能有扩展属性,但“attr”命令似乎不存在。

# attr
/system/bin/sh: attr: inaccessible or not found

但是,我自己(作为 root)创建并授予了该目录的权限,所以我不希望在那里任何扩展属性!

更新:

运行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

(最后一个显然是打印错误的地方)

相关内容