Debian、Apache、403禁止されたエラーと暗号化されたドライブ

Debian、Apache、403禁止されたエラーと暗号化されたドライブ

私のローカルDebianにApacheを設定しました。提示インストールしましたが、VirtualHostを操作できませんでした。アクセスがhttp://localhost正しく機能して表示されます。効果がある!ページ。

ただし、アクセスしようとすると、http://test403 Forbiddenエラーが表示されます。

このサーバーに/アクセスする権限がありません。


私の構成は非常に一般的に見えます。

<VirtualHost *:80>

  DocumentRoot "/home/johndoe/web/test"

  ServerName test

  <Directory "/home/johndoe/web/test">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>

</VirtualHost>

答え1

はじめに:

これにはいくつかの理由があり、この質問はStack Exchangeで何度も要求されました。しかし、私が知っている限り、答えは(直接的に)この質問に対処したり、不正確または古い情報に基づいているわけではありません。

これらの(正しく許可された)回答の多くは、設定されたディレクトリDocumentRootと含まれるファイルとディレクトリの権限または所有権をwww-data

ただし、最新のDebianまたはUbuntuのローカルインストール(デフォルトのWeb開発目的など)について話している場合は、これ以上必要ありません。


ログを見てみましょう!

エラーページ自体には非常に一般的なメッセージのみが含まれているため、詳細についてはエラーログを確認する必要があります。

sudo tail -f /var/log/apache2/error.log 

このtailコマンドはファイルの最後の10行を出力します。この-fオプションを使用すると、ログが大きくなるにつれて出力が更新されます。


ログは私たちに何を伝えますか?

client denied by server configuration: /home/johndoe/web/test

これは簡単です。説明どおりApache: サーバー構成によってクライアントが拒否されました。Require all granted設定で構成を更新するだけです。それでは、次のようになります。

<VirtualHost *:80>

  DocumentRoot "/home/johndoe/web/test"

  ServerName test

  <Directory "/home/johndoe/web/test">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    Require all granted
  </Directory>

</VirtualHost>

次のコマンドを使用してApacheを再起動することを忘れないでください。

sudo service apache2 restart

エラーが続く...

ただし、ログメッセージが変更されました。

Symbolic link not allowed or link target not accessible: /home/johndoe/web/test

この質問にはいくつかの原因がある可能性があるため、少し複雑です。実際の原因を見つけるには、シンボリックリンクを含むターゲットを使用せずに、代わりにターゲットを直接指すように構成を更新することをお勧めします。これは/home/johndoe/webシンボリックリンクなので、/media/johndoe/crypt1/web設定は次のようになります。

<VirtualHost *:80>

  DocumentRoot "/media/johndoe/crypt1/web/test"

  ServerName test

  <Directory "/media/johndoe/crypt1/web/test">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    Require all granted
  </Directory>

</VirtualHost>

固定されていますか?

ログメッセージがより説明的なメッセージに変更された可能性があります。私の場合は、次のように表示されます。

access to / denied (filesystem path '/media/johndoe/crypt1') because search permissions are missing on a component of the path

ここに別のメッセージが表示され、すでに機能しているソリューションがある場合は、ここにコメントを残して適切な議論にリンクして、他の人が正しい情報を見つけることができるようにすることをお勧めします。


今?

メッセージが示すように、パスの1つ以上のコンポーネントを通過できないため、Apacheはパスに完全にアクセスできません。どのコンポーネントが問題を引き起こす可能性があるかを確認するには、次のようにします。

namei -m /media/johndoe/crypt1/web/test/

このnameiコマンドはパスコンポーネントを分離して印刷し、オプションを使用してコマンドと-m同じスタイルで各コンポーネントのモードビットを表示しますls -l

私にとって、出力は次のようになります。

f: /media/johndoe/crypt1/web/test/
 drwxr-xr-x /
 drwxr-xr-x media
 drwxr-x--- johndoe
 drwxr-xr-x crypt1
 drwxr-xr-x web
 drwxr-xr-x test

johndoeディレクトリがここで問題を引き起こしているようです。したがって、権限を変更する前にもう少しchmod詳しく見てみましょう。

ls -ld /media/johndoe/

lsオプションを含むコマンドは、-dリスト形式でディレクトリ情報(内容ではありません)を印刷します-l

私には次のようになります。

drwxr-x---+ 3 root root 4096 May 28 00:00 /media/johndoe/

ご覧になって+再度追加の表示があります。アクセス制御リスト参加する。

私は何も設定していないことを確認しながら、ついに正しい方向を指しました。前方十字靭帯私一人で。さらに、メディアマウントポイントも直接設定していないため。私はNautilusを使ってドライブを暗号化してマウントします。


これにより、トリックを実行できます。

したがって、Nautilusはマウントポイントを台無しにするのではなく、手動でマウントします。

1) すでにマウントされている場合は削除します。

sudo umount /media/johndoe/crypt1

2)すぐ下にマウントポイントを作成します/media

sudo mkdir /media/crypt1

3) デバイスマッピングを見つけ、UUID を探します。

ls -l /dev/mapper/

4) 次の手順で装置を取り付けます。

sudo mount /dev/mapper/luks-<UUID> /media/crypt1

5)これに応じて、Apache設定および/またはシンボリックリンクを更新します。たとえば、次のようになります。

ln -s /media/crypt1/web/ ~/web

メモ:

起動するたびにドライブを暗号化してマウントする必要があることに注意してください。 Stack Exchangeには多くの情報がありますが、以下をお勧めします。

コマンドラインで暗号化されたボリュームをマウントする

起動時にLUKSパーティションをマウントする

関連情報