mockroNotes -モックロノート-

ガジェットやイラスト、ワークアウトに関心を示すブログです

LEMP環境の構築[ルートログインからSSHデーモンの設定]

f:id:mockro:20210616234213p:plain

 

備忘録も兼ねて、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

以降、作成した秘密鍵を指定して、sshでログインできます。

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 クライアントから接続を試みてください、今度は接続できないはずです。

 

参考にしたサイト