【前編】httpd2.4.57で1ユーザー1ドメイン権限を実現する/ Rocky Linux9.4 on さくらのVPS

アフィリエイト広告を利用しています

このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です

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

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

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

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

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

環境

実施日2024-05-14
サーバさくらのVPS 2G
OSRocky Linux9.4
cat /etc/redhat-release
Rocky Linux release 9.4 (Blue Onyx)

確認

/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

▲よりダウンロードできます。
OSの設定管理をGitで行う / Rocky Linux9.4 on さくらのVPSしている場合は含まれています。

ダウンロードしたら解凍して /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のインストールを済ませてきます。