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
(最後は確かに太田です)