/
カテゴリー

問題文

問題文は以下の通りでした。

apacheのDocumentRootを/var/www/htmlから/home/user/htmlに変更して、$curl http://127.0.0.1/home.htmlを実行したら、403エラーが返ってきてアクセスできない。

初期状態とゴール

初期状態

webサーバ上で $ curl http://127.0.0.1/home.htmlをすると403エラーが返ってくる

終了状態

  • webサーバ上で $ curl http://127.0.0.1/home.html をするとページが返ってくる。
  • 再起動後も問題が解決していること。

解説

curlコマンドを実行する

curl http://127.0.0.1/home.htmlを実行すると、403のページが出てきます。

エラーログを見る

less /var/log/httpd/error_log

 (13)Permission denied: [client 127.0.0.1:45546] AH00035: access to /home.html denied (filesystem path '/home/user/html') because search permissions are missing on a component of the path

というログがあります。

/home/user/htmlに一般ユーザの実行権を与える

/home/userのパーティションは700なので、apacheが実行できるように、
sudo chmod o+x -R /home/user/html

を実行します。

curlコマンドを実行する

curl http://127.0.0.1/home.htmlを実行すると、まだ403のページが出てきます。

エラーログを見る

less /var/log/httpd/error_log

 SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0

というログがあります。

SELinuxコンテキストのラベル付けをする

SELinuxが動作していてアクセスできないので、ラベル付けをします。

sudo chcon -R -t httpd_sys_content_t /home/user/html

Apacheの再起動

systemctl restart httpd

curlコマンドを実行する

curl http://127.0.0.1/home.htmlを実行すると、まだが出てきます。

エラーログを見る

less /var/log/httpd/error_log

[authz_core:error] [pid 18739] [client 127.0.0.1:45548] AH01630: client denied by server configuration: /home/user/html/home.html

というログがあります。

/etc/httpd/conf/httpd.confに追記する

/home/user/htmlのアクセス許可を追記します

sudo vi /etc/httpd/conf/httpd.conf

<Directory "/home/user/html">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>

Apacheの再起動

systemctl restart httpd

curlコマンドを実行する

curl http://127.0.0.1/home.htmlを実行すると、やっと/home/user/home.htmlが表示されます。

解説は以上です。

採点基準

100 点

  1. curl http://127.0.0.1/home.html 正しく返ってくるか: 40%
  2. SELinuxのラベルを設定したこと: 20%
  3. /home/userのディレクトリにotherに実行兼を設定したこと: 20%
  4. apacheのconfig fileに/home/user/htmlのアクセスの設定をしたこと: 20%

講評

普段自宅でサーバをいじるとき、SELinuxを無効化しがちではないでしょうか?
以前自分もDocumentrootを変更した際、SELinuxを無効化することで動かしたことがありました。なので今回、SELinuxを無効化せずにやろう、ということでこの問題を出題させていただきました。

解答について

SELinuxにラベルを設定するにも、解説に書いたchconコマンドのほかに、restoreconコマンドや、semanage fcontextコマンド、/etc/selinux/targeted以下に直接書き込むなどの方法で解いたチームがありました。

終わりに

作りこみが甘く、表現が曖昧な部分がありましたが、解いてくだってありがとうございました。