HDDをマウントしたフォルダにhttpdからアクセス出来なかった

原因はやっぱりSElinux

システムの概要

動画の閲覧機能、アップロード機能のあるWEBサイトの構築をしています。HDDに動画を保存しており、それを特定のディレクトリにマウントして見に行くシステムになっています。環境はCentOS stream8上にapacheで構成しています。

まずは普通にマウントして接続

以下のようにHDDをWEBサーバーにつないでからマウントを行いました。まず、fdiskで外付けHDDを確認してからマウントします。大容量HDDはフォーマットがNTFSなので、事前にパッケージをインストールしておく必要があります。

[root@webserver hoge]# fdisk -l
ディスク /dev/sda: 119.2 GiB, 128035676160 バイト, 250069680 セクタ
単位: セクタ (1 * 512 = 512 バイト)
...
デバイス 起動 開始位置 終了位置 セクタ サイズ Id タイプ
/dev/sdb1 2048 1953521663 1953519616 931.5G 7 HPFS/NTFS/exFAT
[root@webserver hoge]# mount -t ntfs-3g /dev/sdb1 /home/www/html/hogemedia

ここでクライアントPCから接続をしてみると、アクセス出来ません。トータル容量を計算するコードを置いていましたが0.00GB表示です。

SElinuxを一時的に停止してみると

[root@webserver hoge]# getenforce
Enforcing
[root@webserver hoge]# setenforce 0
[root@webserver hoge]# getenforce
Permissive

こうすると、無事に接続出来るようになりました。

対処法は

まずはラベル確認

「これはWEBサーバー構築の時に、既に経験済の問題だぜ」と思いラベル(context)を確認してみます。

[root@webserver hoge]# ls -Z /home/www/html/
unconfined_u:object_r:httpd_sys_content_t:s0 hogehoge.php
unconfined_u:object_r:httpd_sys_content_t:s0 icon
unconfined_u:object_r:httpd_sys_content_t:s0 images
unconfined_u:object_r:httpd_sys_content_t:s0 js
               system_u:object_r:fusefs_t:s0 hogemedia

やっぱりラベルが違うということが分かりました。

ラベル設定を変更してみる

"semanage"の"fcontext"を使用して変更して、再度ラベルを確認してみます。

[root@webserver hoge]# semanage fcontext -a -t httpd_sys_content_t /home/www/html/
[root@webserver hoge]# restorecon -v /home/www/html/
[root@webserver hoge]# ls -Z /home/www/html/
unconfined_u:object_r:httpd_sys_content_t:s0 hogehoge.php 
unconfined_u:object_r:httpd_sys_content_t:s0 icon 
unconfined_u:object_r:httpd_sys_content_t:s0 images 
unconfined_u:object_r:httpd_sys_content_t:s0 js 
system_u:object_r:fusefs_t:s0 hogemedia

あれっ?変わってない。ここでHDDを一度アンマウントしてみます。

HDDアンマウント後に再度ラベル確認

[root@webserver hoge]# umount /home/www/html/media
[root@webserver hoge]# ls -Z /home/www/html/
unconfined_u:object_r:httpd_sys_content_t:s0 hogehoge.php  
unconfined_u:object_r:httpd_sys_content_t:s0 icon  
unconfined_u:object_r:httpd_sys_content_t:s0 images  
unconfined_u:object_r:httpd_sys_content_t:s0 js  
unconfined_u:object_r:httpd_sys_content_t:s0 hogemedia

アンマウントすると、設定したラベルになるようです。この後、再度マウントし直しましたが、元のアクセス出来ないラベルに変更されてしまう結果となりました。

ネットで情報を探してみる

何て検索したか忘れましたが、RedHatのサイトに対処法がありました。サイトによるとマウント時のオプションでラベル指定することにより対処出来るようです。早速やってみます。

マウント時にオプションを付けてラベル指定

[root@webserver hoge]# umount /home/www/html/media
[root@webserver hoge]# mount -t ntfs-3g /dev/sdb1 /home/www/html/media -o context="system_u:object_r:httpd_sys_content_t:s0"
[root@webserver hoge]# ls -Z /home/www/html/
unconfined_u:object_r:httpd_sys_content_t:s0 hogehoge.php 
unconfined_u:object_r:httpd_sys_content_t:s0 icon 
unconfined_u:object_r:httpd_sys_content_t:s0 images 
unconfined_u:object_r:httpd_sys_content_t:s0 js 
    system_u:object_r:httpd_sys_content_t:s0 hogemedia

これでラベル変更が出来ました。次に起動時に自動でマウントしてくれるように設定しておきます。

HDDのUUIDを調べる

自動マウント設定はfstabに書きますが、前準備としてUUIDを調べておきます。ラズパイの場合はPARTUUIDを使用したので、Debian系の場合はUUIDではなくPARTUUIDを使用するのかもしれません。

[root@webserver hoge]# blkid
...
/dev/sdb1: LABEL="LaCie" BLOCK_SIZE="512" UUID="****************" TYPE="ntfs" PTTYPE="atari" PARTUUID="********-01"

対象のHDDのUUIDを控えておきます。

起動時のマウント設定を追加

fstabを開いて自動マウントの設定を追加します。

[root@webserver hoge]# vim /etc/fstab

追加内容は下記になります。オプションとしてnofailを付けておかないと何等かのエラーでマウントが上手く行かなかった場合にemergency-modeとなりSSH通信が出来なくなります。

UUID=****************   /home/www/html/hogemedia     ntfs    nofail,context="system_u:object_r:httpd_sys_content_t:s0"       0 0

保存して終了後、再起動を行い、無事にマウントされていれば完了です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

twenty − twelve =