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へログインします。
初めて接続するサーバーなので、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のパスワードは仮登録完了時のものですので、最初にパスワードを変更しましょう。
アップデートに伴うダウンロードファイルの大きさは4月時点で369MB、毎月のWindows Update並です。4分強で終わりました。
アップデートが終わったら、システムの再起動を行います。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
- firewalldサービスのSSH設定ファイル "/usr/lib/firewalld/services/ssh.xml" に記述されているポート番号を変更
これだとfirewall-cmdコマンドで、開放するポートを追加する必要はありません。<port protocol="tcp" port="22"/>
↓
<port protocol="tcp" port="変更後のポート番号"/> - 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 - 変更するポート番号を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
フォローしませんか?
コメント