WEBページが見れない
問題文
問題文は以下の通りでした。
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 点
- curl http://127.0.0.1/home.html 正しく返ってくるか: 40%
- SELinuxのラベルを設定したこと: 20%
- /home/userのディレクトリにotherに実行兼を設定したこと: 20%
- apacheのconfig fileに/home/user/htmlのアクセスの設定をしたこと: 20%
講評
普段自宅でサーバをいじるとき、SELinuxを無効化しがちではないでしょうか?
以前自分もDocumentrootを変更した際、SELinuxを無効化することで動かしたことがありました。なので今回、SELinuxを無効化せずにやろう、ということでこの問題を出題させていただきました。
解答について
SELinuxにラベルを設定するにも、解説に書いたchcon
コマンドのほかに、restorecon
コマンドや、semanage fcontext
コマンド、/etc/selinux/targeted
以下に直接書き込むなどの方法で解いたチームがありました。
終わりに
作りこみが甘く、表現が曖昧な部分がありましたが、解いてくだってありがとうございました。