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シェル、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

(最後は確かに太田です)

ベストアンサー1

おすすめ記事