httpdサーバーが起動できるようになったら、ユーザーページ(ユーザーアカント)でのホームページ作りを行っていきましょう。PCでの操作はWindowsにおいてもユーザー単位でおこなうことが基本ですね。よほどのことがないかぎりAdministratorでログインすることはないと思います。Linuxに置いてもユーザーアカウントによる操作を基本にしていきましょう。rootでの操作は、サーバーや基本設定の環境を整る時に利用することに限定して普段のネットアクセス、ホームページ作成、プログラミング開発等は、ユーザーアカウントで行うようにした方がいいかなと思ってます。
下記操作はrootアカウントでログインして行った方がスムーズかもしれません。なので慎重に行いましょう。編集エディターは、geditを使用してます。
【httpd.conf + userdir.conf】
/etc/httpd/confにありますapache(httpd)の設定ファイルを編集しますので編集前にhttpd.bkupのように事前に元ファイルをバックアップしておきましょう。addHandler cgi-script .cgiのコメントを外します(#の記号を取り除くことを言います)。これはperlでcgiプログラムを実行できるようにするためです。
/etc/httpd/conf.dにあるuserdir.confではデフォルト(default初期設定のことです)でUserDir disabledが有効になっています(apacheがユーザーディレクトリーにアクセス出来ない設定)。なので#を付けて無効にします。UserSir public_htmlの#を外してapacheがアクセスできるようにします。public_htmlでssiが使えるようにoptionsを追加します。cgiが実行できるようにExecCGIを追加します。
httpd.confの変更が終了したら、設定を反映するようhttpdを再起動します。端末で操作します。
systemctl restart httpd
【semanage】
ユーザーページでのホームページ設定の前にapacheのドキュメントルートの状態を把握しましょう。/var/wwwディレクトリーで「ls -lZ」コマンドを入力します。lsコマンドのオプション「Z(半角大文字)」は、selinuxのファイルラベルを表示するコマンドです。cgi-binディレクトリーは、「httpd_sys_script_exec_t」になってます。cgi実行ファイルは、このラベルでないとselinuxでは許可されません。また、ホームページを設置するディレクトリーであるhtmlディレクトリーのラベルは、「httpd_sys_content_t」になってます。
下記の操作は端末で行います。rootアカウント又は一般アカウントの場合は、端末でsu -を入力しrootユーザーに切替えてください。suの後にハイフンでrootのカレント・ディレクトリーに移動します。
ホームページ及びphpを配置するためにSelinux(コンテキスト context)のラベルを永続的に変更できる設定にします。apacheがSelinuxに阻まれるのを防ぐためです。ローカル環境でのホームページ作りやプログラミングが実行できるようにするために必要な処置かと思います。
semanage fcontext -a -t httpd_sys_content_t "/home/[^/]*/public_html(/.*)?"
perlでCGIプログラムを配置して実行できるようにします。
【Selinux Management (poclicycoreutils-gui)】
semanageで上記のコマンドを実施後、Selinuxに反映されているか確認します。Selinux Managementを起動して「ファイルのラベル付け」で「カスタム」をクリックします。semanageで行ったラベルの変更が反映されています。Selinux Managementは、rootアカウントでログインしないと起動できません。
Selinux Managementでラベルを確認したら、論理値(Boolean ブーリアン)の編集をします。論理値をクリックします。apacheの動作に許認可を与えます。該当する所にチェックを入れます。
httpd_builtin_scripting PHP利用時
httpd_can_network_connect データベース利用時
httpd_can_network_connect_db データベース利用時
端末で行う場合の例
setsebool -P httpd_builtin_scripting on
httpd_enable_homedirs public_html利用時
httpd_ssi_exec SSI利用時
【public_html】
ユーザーアカウントでの端末操作になりますが、suを使ってスーパーユーザーに切替しながら設定していきますので、慎重に進めていきましょう。これは仮にakakageと言うユーザーアカウントを作成し、進めます。lsコマンドは、ファイルやディレクトリーの状態を表示します。オプションで「-lZ」を付けて表示すると、ファイル・ディレクトリーのパーミンションやSelinuxのラベルを表示できます。
ユーザーアカウントでのディレクトリーの状況が把握できましたら、apacheが読み込めるようにpublic_htmlのディレクトリーを作成します。「mkdir ディレクトリー名」でpublic_htmlのディレクトリーを作成します。
「ls -lZ」コマンドで表示するとSelinuxのラベルがhttpd_user_content_tになってます。通常のhtmlファイルであれば表示できると思いますが、本格的なhtmlを編集していくとSelinuxから拒否される場合があるかもしれません。なので、apacheのドキュメントルートと同じSelinuxのラベルに変更します。ディレクトリーの永続的なSelinuxのラベル変更はsemanage fcontextで設定してあります。そこで個別にSelinuxのラベル変更を行います。
ここはスーパーユーザーに変更して行います。public_htmlディレクトリーのSelinuxのラベル変更をchconコマンドで行います。最後の「-R」は、public_htmlのディレクトリー全体に反映させるオプションです。
chcon -t httpd_sys_content_t public_html -R
public_htmlディレクトリーのパーミンションを変更します。rootで変更しましたが、ユーザーアカウントで変更できます。
chmod 755 public_html -R
①スーパーユーザー(root)から「exit」してユーザーアカウント(akakage)に戻ります。
②public_htmlディレクトリーに移動します。
③mkdirでディレクトリー(image)を作成して「ls -lZ」コマンドで確認します。
④touchコマンドでindex.htmlファイル(空ファイル)を作成し「ls -lZ」コマンドで確認します。
Selinuxのラベルが「httpd_sys_content_t」に反映されているのを確認します。
ユーザーアカウントディレクトリーの一つ上のディレクトリーに移動して「cd ../」ユーザーアカウントであるakakageのパーミンションを表示します。そしてapacheがユーザーディレクトリーにアクセスできるようchmodコマンドでパーミンションを変更します。
chmod 755 akakage
☆☆☆☆☆まとめ☆☆☆☆☆
【ユーザー(akakage)での作業】
public_htmlディレクトリーを作成する
mkdir public_html
public_htmlのパーミンションを変更する
chmod 755 public_html
ユーザーディレクトリー(akakage)のパーミンションを変更する
chmod 755 akakage
Apacheでは、suexecが効いているためCGIファイルのパーミションを変更する
chmod 700 akakage.cgi
【rootでの作業】
apacheの再起動 systemctl restart httpd
Selinuxのラベル変更
semanage fcontext -a -t httpd_sys_content_t "/home/[^/]*/public_html(/.*)?"
chcon -t httpd_sys_content_t public_html -R
Selinux Management (poclicycoreutils-gui)でブール値(ブーリアン)の設定
☆☆☆☆☆まとめ☆☆☆☆☆
以上ローカルでLAMP環境の簡単報告です。CentOS8はまだ、リリースされたばかりでFedoraに比べて個人的に必要なアプリが揃っていないと思ってます。今後のEpel8でアプリが充実していけば、強力なOSに発展していくのかなと希望してます。
Carpenters - Ticket To Ride