LoginSignup
17
17

More than 3 years have passed since last update.

CentOS 7 のインストールと SSH 接続 (さくらのVPS)

Last updated at Posted at 2015-07-24

:warning: 注意 (2020-02-13 記載)

当記事は CentOS 7 がカスタムOSだった頃の古い記事 (最終更新日は記号や暗号化方式の互換性を除いて2015-07-24) であり、2019-04-16以降 CentOS 7 は標準OSとして提供が開始し 1 、2019-09-03以降はデフォルトのOSとなり 2 、2019-10-01に CentOS 8 のカスタムOSとしての提供が開始しています。 3


導入

さくらの VPS の標準OSである CentOS 6 では、初心者でもトラブルが起きにくいような設定になっています。カスタムOSである CentOS 7 は、標準OSと設定値などが異なります。OS再インストールによって CentOS 7 にアップグレードした際に非常に手間取りましたので、備忘として残しておきます。

サーバーには CentOS 標準の SSH サーバーである OpenSSH、クライアントには Windows 7 上で Tera Term を使用しています。

記号や暗号化方式の互換性

  • ユーザー名、パスワード、パスフレーズに用いる文字列
    • 文字化けなどを避けるため、ASCII印字可能文字 (半角英数記号) のみを利用する
    • キー配列の違いによる誤入力などを防ぐため、記号を用いる場合は ! # $ % , - . / < > ? のみを利用する 4 5 6 7 8
  • ユーザー名、パスワード、パスフレーズの長さ
    • Linux のユーザー名は8文字以内で 9 10
    • Linux のパスワードは128文字以内で 11
    • 暗号鍵のパスフレーズは128文字以内で 12
    • MariaDB のユーザー名は16文字以内で 13 8
  • SSH接続時の公開鍵認証
    • 秘密鍵は (bcrypt KDF 形式ではなく) OpenSSH 形式で保存 14
    • 公開鍵は (RFC 4716 形式ではなく) OpenSSH 形式で保存 15
    • 暗号化方式は RSA-2048 16 17

CentOS7のインストール

インストーラーでフォーマットするため、データベースのデータや秘密鍵など、必要なデータのバックアップを忘れずに行ってください。

以上のページによく目を通し、インストールを完了させます。

以下の手順には、以上のページの手順とは違う部分 があります。

  1. VPS コントロールパネルのサーバページを開きます。
  2. ページ右上の「OSインストール」プルダウンメニューから「カスタムOSインストール」を選択すると、カスタムOSインストールダイアログが開きます。
  3. インストールOSのプルダウンメニューから「CentOS 7 x86_64」を選択し、「設定内容を確認する」ボタンを押します。
  4. インストールOSが「CentOS 7 x86_64」になっていることを確認し、「インストールを実行する」ボタンを押します。
  5. 表示されたメッセージ内の「VNCコンソールを起動」ボタンを押します。
  6. CentOS 7 のインストーラーが起動するので、「Install CentOS 7」を選択してEnterキーを押します。
  7. 「LANGUAGE SUPPORT」を選択し、「日本語 (日本)」を追加します。
  8. 「INSTALLATION DESTINATION」を選択し、ディスクの選択とフォーマットを行います。
  9. 「Begin Installation」ボタンを押して、CONFIGURATION画面に移動します。
  10. 「ROOT PASSWORD」を選択し、root ユーザーのパスワードを設定します。
  11. 「USER CREATION」を選択し、【SSH接続でシェルにログインするユーザー】を追加します。 18
    • 「Username」を入力すると、「Full name」も同時に埋まります。
    • sudo sudoedit コマンドを有効にするため、 「Make this user administrator」にチェックを入れます。 19
    • パスワードを入力します。
  12. インストールが完了するまで待ちます。

パスワード認証でログイン

まず、VPS コントロールパネルのサーバページを開き、ページ左上の「起動」ボタンを押します。

IPアドレス・ホスト鍵の確認

  1. VPS コントロールパネルのサーバページを開きます。
  2. 接続元の回線で IPv6 を利用できるなら「IPv6」の項、利用できなければ「IPv4」の項の「アドレス」をメモしておきます。
  3. 「コンソール」プルダウンメニューから「VNCコンソール (HTML5版)」を選択します。
  4. login: という表示が出るので、インストール中に作成した管理者ユーザー名を入力し、Enterキーを押します。
  5. Password: という表示が出るので、同ユーザーのパスワードを入力してログインします。
# ホスト公開鍵の指紋とアスキーアートの確認
ssh-keygen -lvf /etc/ssh/ssh_host_ecdsa_key.pub
ssh-keygen -lvf /etc/ssh/ssh_host_ed25519_key.pub
ssh-keygen -lvf /etc/ssh/ssh_host_rsa_key.pub

# ログアウト
exit

以上のコマンドを実行し、3種類のホスト公開鍵の指紋と、必要であればアスキーアート表現もメモしておきます。どのホスト公開鍵が使われるかは、クライアント側の設定に依ります。なお、オプションを -lf とすれば、アスキーアートは表示されません。

シェルにログイン

ユーザーに公開鍵を設定していないため、まずはパスワードでシェルにログインします。

  1. Tera Term を起動し、ホスト欄にサーバーのIPアドレスを入力し、「OK」ボタンを押します。
  2. セキュリティ警告ダイアログが出るので、表示されているサーバ側のホスト鍵指紋と、記録しておいた指紋が一致するかチェックします。問題が無ければ「続行」ボタンを押します。
  3. 「ユーザ名」に管理者ユーザー名、「パスフレーズ」欄に同ユーザーのパスワードを入力し、「OK」ボタンを押します。

公開鍵認証でログイン

SSH公開鍵を設定

パスワード認証でログインしたまま、次の手順に従い、管理者ユーザーが公開鍵認証でログインできるようにします。

  1. Tera Term メニューバーから、設定 ▸ SSH鍵生成 を開きます。
  2. 「生成」ボタンを押すと鍵が生成されます。
  3. パスフレーズを入力します。18
  4. 「秘密鍵の保存」ボタンを押し、任意の場所に保存します。20
  5. 「公開鍵の保存」ボタンを押し、任意の場所に保存します。20
  6. 保存した公開鍵を Tera Term ウィンドウ内にドラッグ&ドロップし、「SCP」でファイルを転送します。
# SSHの設定ディレクトリを作成
mkdir --mode=500 ~/.ssh

# 公開鍵を設定ディレクトリに配置
mv ~/id_rsa.pub ~/.ssh/authorized_keys

# 公開鍵のアクセス権を変更
chmod 400 ~/.ssh/authorized_keys

# ログアウト
exit

  1. Tera Term を起動し、「OK」ボタンを押します。
  2. 「ユーザ名」に管理者ユーザー名、「パスフレーズ」欄に秘密鍵のパスフレーズを入力します。
  3. 「RSA/DSA/ECDSA/ED25519鍵を使う」を選択し、「秘密鍵」ボタンから秘密鍵ファイルを選択して「OK」ボタンを押します。

テキストエディタの設定

Vim 以外のテキストエディタはインストールされていないため、Vim 以外のテキストエディタを使う場合は、あらかじめインストールしておきます。

# Emacs を使う場合
sudo yum install emacs

# nano を使う場合
sudo yum install nano

最初に yum コマンドを使用したとき、以下のように GPG 公開鍵を取り込んでも良いか訊ねられるため、Fingerprint が https://www.centos.org/keys/#centos-7-signing-key と大文字小文字無視で一致するか確認します。

Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-1.1503.el7.centos.2.8.x86_64 (@CentOS-7)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Is this ok [y/N]:

Emacsのカスタマイズ

私は以下のように設定しています。21 22 23

.emacs.el
;; バックアップファイルを作成しない
(setq make-backup-files nil)
;; オートセーブファイルを作成しない
(setq auto-save-default nil)
;; 対応する括弧をハイライトする
(show-paren-mode t)
;; カーソル位置の桁数をモードライン行に表示する
(column-number-mode t)
;; メニューバーを消す
(menu-bar-mode 0)
;; タブ幅を 4 に
(setq default-tab-width 4)
(setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
                      64 68 72 76 80 84 88 92 96 100 104 108 112 116 120))

既定のテキストエディタは Vim なので、それ以外のテキストエディタを利用する場合は環境変数の設定が必要です。以下の emacs は利用するエディタに合わせて読み替えてください。

~/.bash_profile
# sudoeditコマンドで利用するテキストエディタを設定
export EDITOR=gedit

source ~/.bash_profile を実行し、設定を反映します。なお、EDITOR 環境変数の代わりに VISUAL 環境変数を利用することもできますが、Composer など EDITOR しか参照しないコマンドもあるので注意が必要です。

suの設定

管理者ユーザー以外は使えないようにします。

/etc/pam.d/su
#%PAM-1.0
auth        sufficient  pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth       sufficient  pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth        required    pam_wheel.so use_uid
## ↑この行のコメントアウトを外す ##
auth        substack    system-auth
auth        include     postlogin
account     sufficient  pam_succeed_if.so uid = 0 use_uid quiet
account     include     system-auth
password    include     system-auth
session     include     system-auth
session     include     postlogin
session     optional    pam_xauth.so

OpenSSHの設定

/etc/ssh/sshd_config
                        ##############
                        ## 以上省略 ##
                        ##############

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin yes
PermitRootLogin no
## ↑この行を追加 ##
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

                        ##############
                        ##   中略   ##
                        ##############

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication no
## ↑この行の値を、「yes」から「no」に変更 ##

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no

                        ##############
                        ##   中略   ##
                        ##############

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding no
## ↑この行の値を、「yes」から「no」に変更し、コメントアウト ##
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes


                        ##############
                        ## 以下省略 ##
                        ##############
# 設定ファイルの文法チェック
sudo sshd -t 

# 設定ファイルの再読み込み
sudo systemctl reload sshd

文法に問題が無い場合、sshd -t は何も表示しません。

socketユニットの利用

CentOS 7 以降で採用されている systemd は、サービスなどをユニットファイルで管理します。socket 型のユニットは、xinetd 経由のサービスと同じような働きをします。

既定で有効な OpenSSH のユニットは sshd.serivce で、これを sshd.socket に切り替えます。ユニット名を指定する際、それが service 型の場合などには、以下のように .service の部分を省略できます。

# sshd.socket の有効化 (OS起動時に自動的に起動)
sudo systemctl enable sshd.socket

# sshd.socket の起動
sudo systemctl start sshd.socket

# sshd.service の停止
sudo systemctl stop sshd

# sshd.service の無効化
sudo systemctl disable sshd

念のため、新しく Tera Term を立ち上げ、接続できるか確認しておきます。

ポート番号の変更 24

# firewalld のサービス定義ファイルを修正用のディレクトリにコピー
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/

# sshd.socket の設定を上書きするファイルを配置するディレクトリの作成
sudo mkdir /etc/systemd/system/sshd.socket.d

OpenSSH の設定ファイルを修正します。

/etc/ssh/sshd_config
                        ##############
                        ## 以上省略 ##
                        ##############

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port ⦅ポート番号⦆
## ↑この行のコメントアウトを外し、ポート番号を変更 ##
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

# The default requires explicit activation of protocol 1
#Protocol 2

                        ##############
                        ## 以下省略 ##
                        ##############

firewalld のサービス定義ファイルを修正します。

/etc/firewalld/services/ssh.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing \
commands on remote machines. It provides secure encrypted communications. If yo\
u plan on accessing your machine remotely via SSH over a firewalled interface, \
enable this option. You need the openssh-server package installed for this opti\
on to be useful.</description>
  <port protocol="tcp" port="⦅ポート番号⦆"/>
                     <!-- ↑port属性値のポート番号を変更 -->
</service>

sshd.socket の設定を上書きするファイルを作成します。25

/etc/systemd/system/sshd.socket.d/port.conf
[Socket]
ListenStream=⦅ポート番号⦆

サービスのポート番号の情報を変更します。

/etc/services
                        ##############
                        ## 以上省略 ##
                        ##############

ftp-data        20/tcp
ftp-data        20/udp
# 21 is registered to ftp, but also used by fsp
ftp             21/tcp
ftp             21/udp          fsp fspd
ssh             ⦅ポート番号⦆/tcp                # The Secure Shell (SSH) Protocol
               ## ↑sshのポート番号を変更 ##
ssh             22/udp                          # The Secure Shell (SSH) Protocol
telnet          23/tcp
telnet          23/udp

                        ##############
                        ## 以下省略 ##
                        ##############

標準OSと違い、SELinuxはデフォルトで有効になっています。

# SELinux の設定を変更
sudo semanage port --add --type ssh_port_t --proto tcp ⦅ポート番号⦆

# firewalld の設定を再読み込み
sudo firewall-cmd --reload

# sshd.socket を再有効化することで設定を再読み込みさせる
sudo systemctl reenable sshd.socket

念のため、新しく Tera Term を立ち上げ、接続できるか確認しておきます。

locateコマンドのインストール

標準OSと違い、locate コマンドはインストールされていません。26

# インストール
sudo yum install mlocate

# ファイル一覧データベースの生成
sudo updatedb

  1. さくらのVPS (バージョン v1/v2) で「標準OS」「カスタムOS」の種類を拡充 | さくらインターネット 

  2. さくらのVPS 標準インストールOSを「CentOS 7」に変更しました – さくらのVPSニュース 

  3. さくらのVPS カスタムOS「CentOS 8」の提供を開始 – さくらのVPSニュース 

  4. JISキーボードなのにUS配列の環境で文字を打つ — Qiita 

  5. VirtualBox のキーボードキャプチャーを通して自動入力した際、" ' ^ ` ~ は正常に入力できなかった。 

  6. さくらの VPS コントロールパネルのVNCコンソールで自動入力した際、" ' ` ~ は正常に入力できなかった。 

  7. Tera Term マクロの connect コマンドにおいて " で囲まれたパスフレーズを指定する場合、パスフレーズ中の " \\ を前置してエスケープする必要がある。自動でエスケープするのは困難なため、" \ を含むパスフレーズの暗号化は難しい。 

  8. mysql_secure_installation コマンドでパスワードを設定する場合、\\\ と入力する必要がある。SQLの文字列リテラル内に記述する場合、' \ はエスケープしてそれぞれ \' \\としなければならない。また、phpMyAdmin の設定ファイルなどで PHP スクリプトに直接ユーザー名・パスワードを埋め込む場合、'\\ を前置してエスケープする必要がある。 

  9. Linuxで8文字を超えるユーザ名を使うと、topやpsコマンドでの表記がuidとなる - Y-Ken Studio 

  10. 技術メモ - 01-004_psで長いuser名を表示 

  11. 256文字のパスワードを設定したところ、GUIでの認証に失敗した。 

  12. Tera Term マクロにおける文字列変数の最大文字数は511文字。connect コマンドを使用する際、ユーザー名や暗号鍵ファイルのパスも同じ変数にまとめる必要があるので、パスワードが長すぎると自動化できなくなる。また、getpassword コマンドは長い文字列の保存に失敗する。 

  13. ユーザー名は最大16文字。 

  14. PuTTY、FileZilla は、bcrypt KDF 形式の秘密鍵を解析できない。 

  15. OpenSSH では、RFC 4716 形式の公開鍵を解析できない。 

  16. PuTTY、FileZilla は、Ed25519 に対応していない。 

  17. CnetOS 7.1 の SSH サーバー、および Tera Term は Ed25519 に対応しているので、私は管理者ユーザーの認証のみ Ed25519 を使用しています。 

  18. いざログインしようとしたときに認証失敗しないよう、記号や暗号化方式の互換性 に目を通しておいてください。 

  19. administrator (管理者) というのは、wheel グループに所属するユーザーのことを指しています。 

  20. OpenSSH 形式で保存されます。 

    シェルにログイン

  21. Emacs の設定ファイル (.emacs.el) の小技 

  22. Emacs講座 -第8回- タブ幅 / マスタカの ChangeLog メモ 

  23. Emacs 24 とツールバー - とりあえず暇だったし何となく始めたブログ 

    sudoeditなどで利用するテキストエディタ

  24. CentOS 7 で sshd のポート番号を変更する - Web Application Security Memo 

  25. ソケットアクティベーションで SSH ポート番号を変更する (sshd.socket) | Secure Shell - ArchWiki 

  26. locateコマンドのインストール | CentOSサーバ構築術 文具堂 

17
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
17