CentOS Stream8でセキュアにLinuxユーザー作成、LAMP構築【その1】
コノハVPSにて、CentOS Stream8(EOL 2024-05-31)でLAMPを作ります。最初にLinuxの管理者ユーザー作成、rootユーザーSSH接続の封印、ドキュメントルートのアプリケーションのファイル編集者用にLinuxの一般ユーザーを作成します。Linuxのユーザーをなるべくセキュアに設計しましょう。その後でLAMPを作ります。CentOS Stream8を接続許可ポートでWEBとSSHのみで仮想マシンを起動、VPSの仮想マシンにターミナルやTeratermやgitbashなどのシェルにてrootユーザーでSSH接続してください。尚、手元のローカルPCはWindows10 Proです。【その2】以降で、Let’sEncryptのSSL、Basic認証、Apacheログローテーション、MySQLログローテーション、Laravel、node.js、git/github、CircleCI、そしてローカル開発環境のDocker構築までセットアップしていく予定です。AWSを使いたいところですが、料金がお高いのでVPSになりました・・・。
gitbashでSSH接続する
ssh -i ローカルWindows10Proのroot秘密鍵フルパス root@IPアドレス
Linuxユーザー作成
rootユーザーでLinux更新
yum -y update
Linux管理者ユーザー、adminconoha をrootユーザーで作ります。最終的にrootユーザーのSSH接続を封印し、adminconoha がrootに成れる唯一の管理者権限のLinuxユーザーになるようにします。
adduser adminconoha
adminconohaのパスワードを設定します。
passwd adminconoha
この状態でrootユーザーのSSHをログアウトして、adminconohaでSSHのパスワード接続は出来ませんでした。
/etc/ssh/sshd_config の69・70行目を確認すると、SSHのパスワード認証出来ない設定になっています。ここは変えません。
#PermitEmptyPasswords no
PasswordAuthentication no
rootユーザーでadminconohaをwheelグループに追加します。
usermod -G wheel adminconoha
Linuxユーザーadminconoha用のキーペアを手元のローカルPCで作ります。この作業は仮想マシンではなく手元のローカルPCの任意のディレクトリで次のコマンドを実行し、キーペアを作ります。
ssh-keygen -t rsa -b 4096 -C "メールアドレス"
キーペアが出来たら、以下のように仮想マシンに手元のローカルPCで作った.pubの公開鍵登録をadminconohaで仮想マシンに対して行います。最後のviコマンドで手元のローカルPCに作った.pubの公開鍵を貼り付けて保存してください。
su adminconoha
cd
mkdir .ssh
chmod 700 .ssh
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
vi ~/.ssh/authorized_keys
adminconohaのSSH接続が出来ることを確認します
ssh -i ローカルWindows10Proのadminconoha秘密鍵フルパス adminconoha@IPアドレス
adminconohaはrootに成れることも確認します。
sudo su -
rootユーザーで、SSH接続出来ないように /etc/ssh/sshd_config を書き換えます。
vi /etc/ssh/sshd_config
PermitRootLogin no のように書き換えます。以後、Linuxのrootユーザーを使いたい場合、adminconohaでsudo su – を行ってください。
#PermitRootLogin yes
PermitRootLogin no
rootユーザーでコノハVPSの仮想マシンにSSH接続できないことを確認出来たら、Linux管理者ユーザーadminconohaの作成完了です。
Linux一般ユーザーconohaを、adminconohaでコノハVPSの仮想マシンにSSH接続して、root成りしてから作ります。
adduser conoha
passwd conoha
Linuxユーザーconoha用のキーペアを手元のローカルPCで作ります。この作業は仮想マシンではなく手元のローカルPCの任意のディレクトリで次のコマンドを実行し、キーペアを作ります。githubやCircleCIなどを見越してキーはパスフレーズ無しで作成します。
ssh-keygen -t rsa -b 4096 -C "メールアドレス"
手元のローカルPCで作った.pubの公開鍵登録をLinuxユーザーconohaで仮想マシンに対して行います。最後のviコマンドで手元のローカルPCに作った.pubの公開鍵を貼り付けて保存してください。
su conoha
cd
mkdir .ssh
chmod 700 .ssh
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
vi ~/.ssh/authorized_keys
conohaのSSH接続が出来ることを確認します
ssh -i ローカルWindows10Proのconoha秘密鍵フルパス conoha@IPアドレス
以上でLinux一般ユーザーconohaの作成は終わりです。
もっとセキュアにLinuxユーザーを構成したい場合、LAMP開発で使うLinuxユーザーとgthub/CircleCIで使うデプロイ用のLinuxユーザーをつくり、デプロイ用のLinuxユーザーのみパスフレーズ無しにするといいです。
LAMP構築
Apache,MySQL,phpなどを仮想マシンにインストールします。
Apache2.4をインストール
adminconohaユーザーでrootに成って以下のコマンド実行
yum install httpd
Apache起動
systemctl start httpd.service
Apache自動起動設定
systemctl enable httpd
ファイヤーウォールの http 80ポート、https 443ポート を開ける(httpsだけにするべきですが・・・)
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
ファイヤーウォールの設定変更を反映させる
firewall-cmd --reload
httpd稼働確認
systemctl status httpd
MySQLインストール
MySQLインストール前にMariaDBの存在有無と削除をしておいたほうがいいかもです。
adminconohaユーザーでrootに成って以下のコマンド実行
yum install mysql-server
MySQL起動
systemctl start mysqld
MySQL自動起動設定
systemctl enable mysqld
MySQLの初期設定
mysql_secure_installation
MySQLにログインしてみる
mysql -u root -p
MySQLデータベース一覧確認
show databases;
MySQLモニタを終了
quit
MySQLバージョン確認
mysql --version
phpインストール
adminconohaユーザーでrootに成って以下のコマンド実行
php7.2をインストール
yum install -y php php-mysqlnd
systemctl restart httpd
php7.2から7.4へupgrade
pkgs=`rpm -qa --queryformat "[%{NAME}\n]" | grep php | sort`
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf module list php
dnf module reset php
dnf module enable php:remi-7.4
dnf install $pkgs
php7.4を確認するためにindex.phpを作ります。
vi /var/www/html/index.php
index.phpの中に以下を記載
<?php phpinfo();
IPアドレスをブラウザのURLに打ち込んで、phpinfoのApache画面を見られるか?確認してください。
Apache2.4のバーチャルホスト設定
以下のやり方で1つのApache2.4のWEBサーバーに複数独自ドメインのホスティングが出来ます。
/etc/httpd/conf/httpd.confにて 独自ドメインのServerNameをListen 80の下に追加
#Listen 12.34.56.78:80
Listen 80
ServerName 独自ドメイン:80
バーチャルホストの/etc/httpd/conf.d/独自ドメイン_http.confを作る。バーチャルホストまわりのパス構成や命名ルールは慎重に検討されることをおすすめします。Let’sEncryptかつ複数バーチャルホストの交通整理や命名の規則性がきれいなためです。
vi /etc/httpd/conf.d/独自ドメイン_http.conf
独自ドメイン_http.confの中身は以下のような感じで作る。上部のバーチャルホストは、http://IPアドレス によるブラウジングで403を返す設定です。下部のバーチャルホストのRequire all grantedは全てのアクセスを許可するとなります。
<VirtualHost *:80>
ServerName any
<Location />
Require all denied
</Location>
</VirtualHost>
<VirtualHost *:80>
ServerName 独自ドメイン
ServerAlias www.独自ドメイン
DirectoryIndex index.php index.html index.htm
AddDefaultCharset UTF-8
DocumentRoot /var/www/独自ドメイン/DocumentRoot
ErrorLog /var/www/独自ドメイン/logs/独自ドメイン-error_log
CustomLog /var/www/独自ドメイン/logs/独自ドメイン-access_log common
<Directory "/var/www/独自ドメイン/DocumentRoot/">
Require all granted
</Directory>
</VirtualHost>
上記設定を終えたら、/var/www/独自ドメイン/DocumentRoot/index.php を作る
vi /var/www/独自ドメイン/DocumentRoot/index.php
index.phpの中身は、とりあえず、phpinfoで
<?php phpinfo();
/var/www/独自ドメイン/logs も作る
mkdir /var/www/独自ドメイン/logs
Apacheの起動とリロードと文法テストとステータス確認
systemctl start httpd
systemctl reload httpd
service httpd configtest
systemctl status httpd
ドキュメントルート内のファイル編集の権利を一般ユーザーconohaに与える。一般ユーザーconohaをLaravelやTypeScriptなどのアプリ開発のエンジニア領域として切り出します。
chown -R conoha:conoha /var/www/独自ドメイン/DocumentRoot
バーチャルホストのパス構成の理由として、ディレクトリトラバーサルの話は、一旦、放置して、
- /var/www/独自ドメイン ではhttp/httpsリクエストに対し非公開のファイルを配置
- /var/www/独自ドメイン/DocumentRoot ではhttp/httpsリクエストに対して公開のファイルを配置したり、後にgitリポジトリ化
するためです。
次回は、CentOS Stream8でセキュアにLinuxユーザー作成、LAMP構築【その2】 となります。Laravel8、Let’sEncryptのSSL(certbot)、Basic認証、Apacheログローテーション、MySQLログローテーション、node.js、git/github、CircleCI、そしてローカル開発環境のDocker構築などの予定です。Laravel8は、Apacheバーチャルホストの公開ディレクトリの変更が必要となるため、certbotによるSSL証明書取得の前にかならず行ってください。