test -r が ls -l と一致しません。

test -r が ls -l と一致しません。

ファイルとディレクトリのアクセス許可の問題で問題が発生しています。矛盾するls -lことを言ってくださいtest -w

$ ls -l
total 1792
-rw-r--r--  1 root www-data     168 Jan 29 23:53 CODE_OF_CONDUCT.md
-rw-r--r--  1 root www-data   19421 Jan 29 23:53 COPYING
-rw-r--r--  1 root www-data   14547 Jan 29 23:53 CREDITS
-rw-r--r--  1 root www-data      95 Jan 29 23:53 FAQ
-rw-r--r--  1 root www-data 1414049 Jan 29 23:53 HISTORY
-rw-r--r--  1 root www-data    3638 Jan 29 23:53 INSTALL
-rw-r--r--  1 root www-data    5273 Jan 29 23:54 LocalSettings.php
-rw-r--r--  1 root www-data    1530 Jan 29 23:53 README.md
-rw-r--r--  1 root www-data   36717 Jan 29 23:53 RELEASE-NOTES-1.39
-rw-r--r--  1 root www-data     199 Jan 29 23:53 SECURITY
-rw-r--r--  1 root www-data    4371 Jan 29 23:53 UPGRADE
-rw-r--r--  1 root www-data    4496 Jan 29 23:53 api.php
-rw-r--r--  1 root www-data  156078 Jan 29 23:53 autoload.php
drwxr-xr-x  3 root www-data    4096 Jan 29 23:53 images
$ sudo -u www-data test -r INSTALL; echo "$?"
0
$ sudo -u www-data test -w INSTALL; echo "$?"
1
$ sudo -u www-data test -x INSTALL; echo "$?"
1

www-dataはwww-dataのメンバーです。

$ groups www-data
www-data : www-data

Apacheは私が何を逃していますか?lsにアップロードできないので同意するようです。image/

オペレーティングシステム:Ubuntu 22.04.1 LTSカーネル:Linux 5.15.0-58-generic

答え1

非常にうまく動作しますtest -w。 (タイトルにはとされていますが、test -r質問は に関するものなのでtest -w誤字のようです。)

表示または表示できるman test場合:man [

-wファイル

   FILE exists and the user has write access.

test評価参考にしてくださいユーザーに読み取り権限があります

あなたの場合、次の権限があります。

-rw-r--r--  1 root www-data    3638 Jan 29 23:53 INSTALL

これユーザー(最初r)、グループメンバーwww-データ(2番目r)および他のすべての人(3番目r)、ディレクトリにアクセスできる限り、誰でも使用できます。読み取り権限

それにもかかわらず、 www-データグループ番号書く...でもない実装する権限を評価するときwww-データ発生したユーザー1(またはエラー):

sudo -u www-data test -w INSTALL; echo "$?"
1
sudo -u www-data test -x INSTALL; echo "$?"
1

~について

Apacheは画像/にアップロードできないため、lsに同意するようです。

このグループのメンバーに対するディレクトリに対する権限にはimages書き込み権限がないため、これも正確です。www-データsudo chmod g+w(グループへのアクセスを許可するために使用されます)

Apacheプロセスを実行しているユーザーも必要です。探すaccess( x) は、このディレクトリより前のすべてのディレクトリにアクセスします。

関連情報