【前編】AlmaLinux9.3にhttpd2.4.57で1ユーザー1ドメイン権限を実現する

AlmaLinux9.3にインストールしたhttpdを1ドメイン1ユーザー方式にしたいと思います。

ん?1ユーザー1ドメイン?なんのこっちゃ?
ってなりますか?

1ユーザーとは、Linuxのユーザーです。
1ドメインとは、httpdに設定するサイトです。

ん-ーと、なので、httpdにはVertialHost機能を使って複数サイトを配置していくのですが、標準の apache ユーザーをそのまま使っていたのでは、サイトAとサイトBで同じ実行権限では色々困りますよね、ってことです。

なお本番環境で利用される場合はここにある内容だけを鵜呑みにせずセキュリティ専門家に相談されることをお勧めします。

環境

実施日2024-04-24
サーバ さくらのVPS 2G
OSAlmaLinux9.3
cat /etc/redhat-release
AlmaLinux release 9.3 (Shamrock Pampas Cat)

確認

/usr/sbin/suexec -V
 -D AP_DOC_ROOT="/var/www"
 -D AP_GID_MIN=1000
 -D AP_HTTPD_USER="apache"
 -D AP_LOG_SYSLOG
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=1000
 -D AP_USERDIR_SUFFIX="public_html"

ディレクトリを作る

先に確認した DOC_ROOT より下層に作る必要があるので、次のようにディレクトリを作成しておきます。

mkdir /var/www/users
chmod 0711 /var/www/users
chown apache:apache /var/www/users

FastCGI(mod_fcgid)

FastCGIは、httpdからPHPをCGIモードで実行できるようにします。

CGIモードの何が嬉しいかと言うと、PHPの実行ユーザーを変えれるようになることです。

dnf install mod_fcgid

インストールが完了したら設定を変えておきます。

vi /etc/httpd/conf.d/fcgid.conf

下記を末尾に追記しつつ数字を調整します。

FcgidIdleTimeout 600
FcgidProcessLifeTime 3600
FcgidMaxProcesses 300
FcgidMaxProcessesPerClass 150
FcgidMinProcessesPerClass 0
FcgidConnectTimeout 600
FcgidIOTimeout 3600
FcgidBusyTimeout 3600
FcgidIdleScanInterval 10
FcgidMaxRequestLen 1610612736

FcgidMaxRequestLen は、PHPの post_max_size や upload_max_filesize にも関わってくるので、だいたい同じ数字にしていたら良いです。

注意

PHP を dnf で入れている場合は、 モジュール版PHPを止めないとCGIにならないです。

# 確認
ls -li /etc/httpd/conf.d

# リネームして無効化
mv /etc/httpd/conf.d/php.conf /etc/httpd/conf.d/php.conf.stop

# 勝手に作られないように空ファイルを置いておく
touch /etc/httpd/conf.d/php.conf

# 確認
ls -li /etc/httpd/conf.d

ユーザー・ドメイン作成スクリプト

ここで配布するスクリプトは完全自己責任でご利用ください。
ダウンロードして利用することで発生するいかなる問題も責任を負いません。

スクリプトのダウンロード

スクリプトの中身を読んで書いている内容が理解できない方の利用はご遠慮ください。

https://aulta.co.jp/data/user_add-20220329.zip

▲よりダウンロードできます。

ダウンロードしたら解凍して /root 直下に配置します。

ls -la /root/user_add/
chown -R root:root /root/user_add
chmod 0700 /root/user_add
chmod 0600 /root/user_add/*
chmod 0700 /root/user_add/*.sh
ls -la /root/user_add/

次のようになります。
sh が 0700 、その他は 0600 です。

後編へ

ここからはPHPとMySQLがインストールされている前提になります。
さきにPHPとMySQLのインストールを済ませてきます。