備忘録も兼ねて、CentOS 7でのLEMPサーバー構築手順を書きためます。 LEMPとはLinux
,Nginx
,Mysql(MariaDB)
,php
の頭文字をとったのサーバー環境のことです。 また、データベースの利便性を高めるために、Webベースのインターフェースでデータベースを管理するシステム " phpMyAdmin “もインストールします。
サーバーのセキュリティと使いやすさを考慮してSELinux
を有効にしたままでの設定となります。
ステップ1 - ルートログイン
まだCentOSにユーザーを作成していない場合は、次のコマンドを使用してrootとしてログインします。
local$ ssh root@SERVER_IP_ADDRESS
ステップ2 - 新しいユーザーを作成する
rootユーザーは、Linuxの特権を持つ管理ユーザーです。OSに破壊的な変更を加えることができるrootを常用することはお勧めできません。 必要に応じて特権を与えた新しいユーザーアカウントを追加して使用しましょう。
この例では "demo"という名前の新しいユーザーを作成しますが、"demo"部分は好きなユーザー名に置き換えてください。
# adduser demo
次に、新しいユーザーにパスワードを割り当てます。"demo"部分は、上で置き換えたユーザー名に置き換えてください。
# passwd demo
強力なパスワードを入力し、もう一度確認してください。
ステップ3 - root権限
通常のアカウントに「スーパーユーザー」またはroot権限を設定します。一般のユーザーがコマンドの前に sudo
を付けることによって管理者権限でコマンドを実行することを可能になります。 sudo
を使用するには、ユーザーを "wheel"グループに追加する必要があります。CentOS 7では、 "wheel"グループグループに属するユーザーはこのsudoコマンドの使用を許可されています。
# gpasswd -a demo wheel
# gpasswd -a demo nginx
ステップ4 - 公開鍵認証を追加する
ユーザー用に公開鍵認証を設定します。これにより、ログインにSSH秘密鍵が必要になるので、サーバーのセキュリティが向上します。
キーペアを生成する
公開鍵と秘密鍵のSSH鍵ペアを持っていない場合は生成する必要があります。
local$ cd ~/.ssh
local$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/username/.ssh/id_rsa):
ファイル名とパスを確認して、問題がなかったらReturn
キーを押します。 次に、キーを保護するためのパスフレーズの入力を求められます。パスフレーズを設定しないならReturn
キーを押して進みます。
公開鍵をコピーする
“ssh-copy-id”を使ってssh公開鍵を対象サーバーに配置します。homebrewでssh-copy-idをインストールしましょう。
local$ brew install ssh-copy-id
次にキーをインストールするサーバーのユーザーとIPアドレスを指定してスクリプトを実行します。
local$ ssh-copy-id demo@SERVER_IP_ADDRESS
local$ ssh -i ~/.ssh/id_rsa demo@SERVER_IP_ADDRESS
ステップ5 - SSHデーモンの設定
新しいアカウントを作成したので、SSHデーモンの設定(リモートからログインできるプログラム)を変更して、rootアカウントへのリモートSSHアクセスを禁止します。 また、パスワードによるログインも禁止します。 この時点で作成したユーザーではなく、ルートで作業いています。
# vim /etc/ssh/sshd_config
- #PermitRootLogin yes
+ PermitRootLogin no
- PasswordAuthentication yes
+ PasswordAuthentication no
sshd のポート番号を変更する
デフォルトのSSHポートは22番です。このポート番号を変えることで、さらにセキュリティーが向上します。 SELinux の状態を確認しましょう。
# getenforce
Enforcing
SELinux の設定を変更するためには semanage というコマンドを利用するのが便利なのですが、CentOS 7 のデフォルトではインストールされていない場合があります。
# yum install policycoreutils-python
semanage コマンドで、SSHのポートを確認します。
# semanage port --list | grep ssh
ssh_port_t tcp 22
SELinux のポリシーにポート番号を追加しましょう。
# semanage port --add --type ssh_port_t --proto tcp 55522
コマンドの実行完了後に再び semanage port –list コマンドを実行すると、今度は 55522 番ポートが追加されたことがわかります。
# semanage port --list | grep ssh
ssh_port_t tcp 55522, 22
ファイアウォール (firewalld) の設定を変更する
ファイアウォールの状態を確認します。
# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 金 2019-05-03 15:42:08 JST; 50min ago
(略)
コマンドの実行結果の Active の値が active (runnning) となっていれば、ファイアウォールが有効になっています。
公開されているサービス(ポート)を確認します。
# firewall-cmd --list-services --zone=public --permanent
dhcpv6-client ssh
dhcpv6-client と ssh のサービスが公開されていることがわかります。 ここで表示されたサービス名「ssh」は、/usr/lib/firewalld/services/
に設定があります。
firewalldの初期設定は/usr/lib/firewalld/
内に、ユーザーがカスタマイズした設定は/etc/firewalld/
内に配置します。さっそく/etc/firewalled/services/
にssh.xml
を設置しましょう。 まずは、/usr/lib/firewalld/
配下のファイルをコピーします。
# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
ssh.xml をコピーしたら55522番のポート番号の設定を追加します。
# vim /etc/firewalld/services/ssh.xml
<!--?xml version="1.0" encoding="utf-8"?-->
SSH
Secure Shell (SSH) is a protocol ...
+
firewalld に設定を再読み込みさせます。
# firewall-cmd --reload
sshd の待ち受けポート番号を追加する
sshd の設定は、ファイル/etc/ssh/sshd_config
に記載されています。 この sshd_config
ファイルをもう一度変更します。
vim /etc/ssh/sshd_config
- #Port 22
+ Port 22
+ Port 55522
これで22番と55522番の2つのポートで待ち受けるようになります。 sshd を再起動して設定を読み込み直しましょう。
# systemctl restart sshd
ポート番号 55522 を指定してSSH接続してみます。
local$ ssh -p 55522 -i ~/.ssh/id_rsa demo@SERVER_IP_ADDRESS
接続できたなら不要になった22番ポートを無効化します。
22番ポートを無効にする
SELinux, Firewalld, sshd の22番ポートの設定を無効化します。 SELinux のポリシーから22番ポートを削除・確認します。 ※「ValueError: ポート tcp/22 はポリシーに定義されているため、削除できません」と言われたら、firewalld、sshdの変更に進みましょう。
# semanage port --delete --type ssh_port_t --proto tcp 22
# semanage port --list | grep ssh
ssh_port_t tcp 55522
ファイアウォール (firewalld) から削除します。
# vim /etc/firewalld/services/ssh.xml
<!--?xml version="1.0" encoding="utf-8"?-->
SSH
Secure Shell (SSH) is a protocol ...
-
firewalld に設定を再読み込みさせます。
# firewall-cmd --reload
sshd の設定を変更します。
# vim /etc/ssh/sshd_config
- Port 22
Port 55522
sshd を再起動して設定を読み込み直しましょう。
# systemctl restart sshd
これで22番ポートが利用できなくなったはずです。 SSH クライアントから接続を試みてください、今度は接続できないはずです。
参考にしたサイト