CentOS7を初期セットアップしよう

 VPSのOSインストールが終わりました。次はいよいよOSに接続して初期セットアップです。ユーザー追加、SSHポート変更、sudo有効化などを設定します。

 前提としてテキスト編集のviコマンドあるいはvimコマンドが使える必要があります。操作が危うい場合は、事前に"vi コマンド"でWeb検索し確認(あるいは表示)しておいてください。さくらのVPSのCentOS 7では、vimコマンドが最初から使えました(2018年7月のKAGOYAのCentOS 7では使えなかった)。

 サーバーのIPアドレスはVPSコントロールパネルに記載されています。IPアドレスを確認後にDNSに登録すれば、最初からドメイン名でアクセスできますが、正直どちらが先でもかまいません。以下はご自身のドメイン名と"exsample.com"を読み替えてください。sshコマンドでrootへログインします。

202004-connect_ssh_client.png

初めて接続するサーバーなので、SSHクライアントには次のようなメッセージを表示し、ホストのフィンガープリントはこうだけど接続していいか?と聞いてきます。

次のログでは、OSの再インストールで、更にDNS逆引きレコードも設定しているので、プロンプトのホスト名も変わっていますね。

$ ssh root@exsample.com
The authenticity of host 'exsample.com (153.127.38.170)' can't be established.
ECDSA key fingerprint is SHA256:(フィンガープリント).
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': yes
root@exsample.com's password:

SAKURA Internet [Virtual Private Server SERVICE]

[root@exsample~]#

OS再インストールするとホストのフィンガープリントも変わります。SSHクライアントのknown_hostsに登録されているフィンガープリントも "ssh-kengen -R ホスト名 or IP"で消去しないといちいちWarningを表示して鬱陶しいのですが、どうもWSLのUbuntuだとうまく消去できず、~/.ssh/known_hostsから該当を直接削除していました。sftpソフト等は鍵更新だけで済むのですけどね。

まずは、"yum update"で最新状態へアップデートします。さくらの準備したOSイメージは最新ではないので必須です。最新といってもCentOSが準備したレポジトリなので、セキュリティパッチが当たっているという程度です。

その前に、VPSのOSイメージが仮登録のままの場合、rootのパスワードは仮登録完了時のものですので、最初にパスワードを変更しましょう。

202004_1st_yum_update.png

アップデートに伴うダウンロードファイルの大きさは4月時点で369MB、毎月のWindows Update並です。4分強で終わりました。

202004_yum_update_size.png

アップデートが終わったら、システムの再起動を行います。needs-restartingコマンドで再起動が必要なプロセスを調べられるそうです。

ユーザー名登録とrootログインを無効

 アップデートを終えたら(再起動したらrootでログインし)、普段SSHクライアントでログインするユーザーを登録し、rootでの外部からのログインを無効に変更します。

まずログインするユーザー名を登録します。

[root@exsample ~]# adduser foo
[root@exsample ~]# passwd foo
Changing password for user foo.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

登録を終えたらexitで一旦rootからログアウトし、登録したユーザー名でログインし直します。

$ ssh foo@exsample.com
foo@exsample.com's password:

SAKURA Internet [Virtual Private Server SERVICE]

[foo@exsample ~]$

次に、外部からrootでのログインを無効に変更します。無効とするにはsshdサービスの定義ファイル "/etc/ssh/sshd_config" のPermitRootLoginを"no"に変更します。変更する前にバックアップを作成します

# SU
Password:
# cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.org
# vim /etc/ssh/sshd_config

コメントアウトされているPermitRootLoginのコメントアウトを除外し値を yes から no へ変更します。

#PermitRootLogin yes
PermitRootLogin no

sshdサービスを再起動、一旦SSHクライアントの接続を終了し、rootでログインできないことを確認します。

# systemctl restart sshd.service

rootでログインしようとするとエラーになります。

$ ssh root@exsample.com
root@exsample.com's password:
Permission denied, please try again.

SSHのポート番号を変更

 SSHのポート番号を標準のままにしておくと、世界中からコンコンとドアを叩かれます。ログを見なければ気になりませんが、一度見てしまえば気になるのでSSHのポート番号を変更します。ポート番号の変更は定義ファイル "/etc/ssh/sshd_config" と同じです。ログインを公開鍵認証とする手順は後程(全て公開鍵認証でいけるかというと使用ソフトが未対応の場合も...)。
公開鍵認証のみで運用する場合は、変更の必要性は少ないと思います。

#Port 22
Port 変更後のポート番号

ポート番号は役割が決められています(Wikipedia ポート番号の一覧)。インストールしたサーバーで自由に登録可能なポート番号の範囲は、32768~60999でした。

# cat /proc/sys/net/ipv4/ip_local_port_range
32768 60999

ちなみにさくらのVPSのパケットフィルタは、1~32767なのでサービス向けのフィルタですね。ここでは32768以上に設定します。パケットフィルタの範囲外のポートは後でOSのファイアウォールであるfirewalldサービスで保護します。しかしfirewalldでポートを追加設定するには起動していなければなりません。つまりsshdのポート番号を変更を適用するのはまだ早いということです。

しかしfirewalldでポートを追加設定するには起動していなければなりません。起動した途端に変更したポートでの通信ができなくなります。つまりsshdのポート番号変更を実行(sshd再起動)するのはまだ早いということです。

firewalldを未起動でfirewall-cmdを実行すると "FirewallD is not running" を表示します。

firewalldサービスで開放するSSHのポート番号を変更するには次の方法があります。今回はポート番号を変更したSSH設定ファイルを作成し登録します(2の手順)。

最初にfirewalldサービスを起動します(自動起動も設定)。以下、firewalldのzoneはpublicで変更していません。

# systemctl enable firewalld
# systemctl start firewalld
  1. firewalldサービスのSSH設定ファイル "/usr/lib/firewalld/services/ssh.xml" に記述されているポート番号を変更
    これだとfirewall-cmdコマンドで、開放するポートを追加する必要はありません。
    <port protocol="tcp" port="22"/>
     ↓
    <port protocol="tcp" port="変更後のポート番号"/>
  2. SSH設定ファイルを ディレクトリ /usr/lib/firewalld/services へ名前を変更してコピー(例えばssh-spec.xml)、1と同じくポート番号を変更しfirewall-cmdで登録
    # cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-spec.xml
    # vim /etc/firewalld/services/ssh-spec.xml
    # firewall-cmd --add-service=ssh-spec --permanent
  3. 変更するポート番号をfirewalldへ直接登録
    # firewall-cmd -add-port=ポート番号/tcp --permanet

上記のいずれかを設定したらfirewalldサービスを再起動し、設定を確認します。

# systemctl restart firewalld

ここでは、2のssh-spec.xmlを追加登録をしています。

# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client ssh ssh-spec
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

ようやく、sshdのポート番号変更を反映できます。

firewalldの設定と起動を確認を終えたら、sshdを再起動します。もし再起動した途端にSSHクライアントの反応が無くなったら?VPSコントロールパネルからコンソールの登場です。設定を見直してください。

# systemctl restart sshd.service

SSHのポートを変更しても、順番に叩けば分かるじゃないですか~ と思われる方は、「/etc/hosts.allow」ファイル(許可)及び「/etc/hosts.deny」ファイル(拒否)に追記します。

"/etc/hosts.allow"ファイルには、許可するサービスとIPアドレスあるいはホスト名を追記します(アクセスを試みようとするリモートホストはDNS逆引きできないことが多いです)。

私の場合は利用しているISPのホスト名の固定部分を登録しています。メインのフレッツ光と、予備でスマートフォン経由で接続するときです。ホスト名がわからないという方は 診断くん などで確認できます。ISPから割り当てられるIPアドレスは動的なので変化しない部分を先頭に(. ピリオド)付きで追記します。

# vim /etc/hosts.allow

(追記)
sshd : .exsample.or.jp

変更は保存した途端に有効になります。

"/etc/hosts.deny"ファイルには、拒否するサービスとIPアドレスあるいはホスト名を登録しますが、すべてでよいでしょう。

# vim /etc/hosts.deny

(追記)
ALL : ALL

もしSSHクライアントがフリーズしたらコンソールで設定を見直します。

ホスト名を変更します

 ここでのホスト名は、サーバーの説明書き程度の意味です。プロンプト部分にホスト名を表示してどのサーバーを操作しているか分かりやすくします。

 サーバーを一つだけを管理する分にはなんでもかまいませんが、変更しないとさくらがVPSに割り当てられたホスト名か、DNS逆引きが設定されていればそれが表示されます。さくらのホスト名はちょっと長いですね。

変更しないと次のようになっています。

# hostname
localhost.localdomain

変更は、hostnamectlコマンドで行います。

# hostnamectl set-hostname ホスト名

プロンプトへの反映は、次にSSHクライアントで接続し直したときのようです。

sudoコマンドを有効にします

sudoコマンドを有効にします。sudoが使えなければsuを使えばいいじゃない、という話ですが、うっかりミスで "|" と ">" を打ち間違えシェルの動作がおかしくなった経験があります。なるべく安全な環境で操作した方が無難です。それでもケアレスミスは避けられないのですが......

sudoを有効とするには、visudoコマンドで、wheelグループに登録したユーザーを許可するように設定します。さくらのVPS(CentOS7)ではコメントアウトが解除されていました。

## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL

sudoコマンドを可能にするユーザー名をwheelグループに追加します。

# usermod -aG wheel foo

SSHクライアント再接続後に、sudoコマンドが使えるようになります。パスワードはユーザーのものを入力します。

[foo@exsample ~]$ sudo su
[sudo] password for foo:
[root@exsample foo]#

sudoコマンドは一度パスワードを入力すると規定の時間(5分)パスワードを入力せずに、sudoコマンドを実行できます。既定の時間を変更できるようですが...

ファイル作成時のパーミッションを変更

ユーザーがファイルを作成したり、sftpでファイルをアップロードしたときのumaskは 002 のようです。このとき作成したファイルのパーミッションは664となります。これを644とするには、~/.bashrcへumask値を追加します。

~/.bashrc

(以下を最後に追加)
umask 022
  1. SSHクライアントを用意しよう
  2. さくらのVPSコントロールパネルからCentOS 7をインストールしよう
  3. CentOS7を初期セットアップしよう
  4. SSHログインで公開鍵認証を使おう
  5. CentOS7へWebサーバー(Apache)をインストールしよう
  6. CentOS7へTLS/SSL(Let's Encrypt)を導入しよう
  7. CentOS7へPHP(7.4)をインストールしよう
  8. CentOS7へMariaDBをインストールしよう
  9. CentOS7へメールサーバー(Postfix/Dovecot)をインストールしよう

前へ

さくらのVPSコントロールパネルからCentOS 7をインストールしよう

次へ

SSHログインで公開鍵認証を使おう