tech. tt

Teens Town 技術ブログ

CentOS7でWebサーバー構築

本記事での環境 ベンダー: ConoHa VPS OS: CentOS 7.6 (64bit) VPS: 東京リージョン / メモリ 1GB / SSD 50GB IP アドレス: 118.27.10.107 サーバー名: TEST_SERVER ログメール受取アドレス: test@example.com

設置

① ConoHa コントロールパネルにて設定

  • VPS: 1GB
  • イメージタイプ: OS(CentOS ver. 7.6) バージョンについての記事はこちら
  • rootパスワード: ランダムな英数字 ランダム英数字を生成できるShell Scriptの記事はこちら
  • ネームタグ: わかりやすければOK
  • オプション: スタートアップスクリプトでCentOSパッケージアップデートを選ぶ インストール後にyum updateする必要がなくなります。

f:id:up-tri:20200219141916p:plain

② 手元端末から SSH 接続

ssh root@118.27.10.107でssh接続します。手元のPCがWindows端末の場合やコマンド操作に不慣れな場合は、Tera Termなどのクライアントソフトウェアを導入しても良いでしょう。

Are you sure you want to continue connecting (yes/no)?と表示されたらyesを入力します。パスワードも聞かれるので入力。 ターミナルに [root@118-27-10-107 ~]#と表示されれば SSH によるリモートアクセスに成功です。

ターミナル上での root の見分け方

ターミナル上でスタンバイ状態(入力待ち)になっているときの表示が、通常ユーザーと root(管理者ユーザー)で異なります。
  • 通常ユーザー: [hoge@118-27-10-107 ~]$
  • root ユーザー: [root@118-27-10-107 ~]#
ユーザー名 表示&行末の$or#が異なるだけです。

root はサーバーの全ての操作を行える最上位(根幹)のアカウントです。

③ ユーザーを作成

root でログインできる状態は非常に危険です。そのためログイン用のアカウントをひとつ作成します。

[root@118-27-10-107 ~]# useradd wg_user  <- ユーザーの追加
[root@118-27-10-107 ~]# passwd wg_user   <- ユーザーのパスワード変更
ユーザー wg_user のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
[root@118-27-10-107 ~]# usermod -G wheel wg_user  <- このユーザーを管理者グループへ追加
[root@118-27-10-107 ~]# vi /etc/pam.d/su          <- 権限昇格(suコマンド)を限定

#auth       required     pam_wheel.so use_uid
↓↓↓↓
auth       required     pam_wheel.so use_uid      <- 行頭の "#" を削除(コメントアウト解除)

④ パッケージ操作

※各パッケージの最初期アップデートは ConoHa のスタートアップスクリプトで完了しています。
[root@118-27-10-107 ~]# yum -y update
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp-srv2.kddilabs.jp
 * epel: ftp.iij.ad.jp
 * epel-debuginfo: ftp.iij.ad.jp
 * epel-source: ftp.iij.ad.jp
 * extras: ftp-srv2.kddilabs.jp
 * updates: ftp-srv2.kddilabs.jp
No packages marked for update
  1. yum install yum-cron -yを実行して yum-cron パッケージをインストールします。
  2. /etc/yum/yum-cron.confを編集し、
    apply_updates = no
    ↓↓↓↓
    apply_updates = yes
    と変更します。
  3. systemctl start yum-cronsystemctl enable yum-cronを実行します。 前者はパッケージを起動させていて、後者は自動起動を ON にしています。
  4. cron が走る度に送られるメールを停止します。 /etc/crontabを編集し、
    MAILTO=root
    ↓↓↓
    MAILTO=""
    と変更します。変更後は cron の再起動(service crond restart)を忘れずに。

④ メール設定

システムから root 宛に重要なメールが送信されるので、これを見逃さないような設定を施します。

  1. root 宛メール転送設定を削除し、新規メールアドレスに変更します。
    sed -i '/^root:/d' /etc/aliases
    echo "root: wg_user" >> /etc/aliases
    echo "wg_user: \wg_user, test@example.com" >> /etc/aliases
    newaliases
    
    1 行目: 旧転送設定を削除 2 行目: root -> wg_user への転送設定 3 行目: wg_user にメールを残しつつ、 test@example.com への転送設定 (バックスラッシュをつけることでメールが残ります。) 4 行目: メール設定を反映させます。
  2. サーバーのホスト名を変更します。→ hostnamectl set-hostname TEST_SERVER
  3. reboot nowで再起動します。 SSH 接続が切れるので、1 分ほど待ってから再度 SSH 接続します。
  4. echo test|mail rootでテストメールを送信します。無事に受け取れていれば完了です。

SSH設定

SSH 接続をパスワード認証から公開鍵認証へ変更します。

  1. 手元の端末ssh-keygen -t rsa -b 4096を実行し、鍵ペアを作成します。
    $ ssh-keygen -t rsa -b 4096
    Generating public/private rsa key pair.
    Enter file in which to save the key (/Users/You/.ssh/id_rsa): /Users/You/.ssh/id_rsa
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /Users/You/.ssh/id_rsa.
    Your public key has been saved in /Users/You/.ssh/id_rsa.pub.
    
    4 行目,5 行目: ここで入力するパスフレーズは 秘密鍵の使用時(= SSH ログイン時) に必要です。
  2. 手元の端末から公開鍵をサーバーへアップロードします。 (参考:scp コマンド[ scp ~/.ssh/id_rsa.pub root@118.27.10.107:/tmp ]を実行するとサーバーの tmp ディレクトリへ転送できます。ここで聞かれるパスワードはサーバーの root アカウントのパスワードです。)
  3. サーバー側で以下の操作を行います。
    [root@TEST_SERVER ~]# su wg_user           <- 一時的に wg_user でログイン
    [wg_user@TEST_SERVER root]$ cd ~           <- ホームディレクトリ荷移動
    [wg_user@TEST_SERVER ~]$ mkdir ~/.ssh      <- ssh設定ファイル用のディレクトリを作成
    [wg_user@TEST_SERVER ~]$ cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
                                                    <- 先ほど転送した公開鍵を設置
    [wg_user@TEST_SERVER ~]$ chmod 700 ~/.ssh/
    [wg_user@TEST_SERVER ~]$ chmod 600 ~/.ssh/authorized_keys
                                                    <- パーミッションを設定
    [wg_user@TEST_SERVER ~]$ exit              <- wg_user からログアウト
    exit
    [root@TEST_SERVER ~]# rm /tmp/id_rsa.pub
                                                    <- 転送した元データを削除
    rm: 通常ファイル `/tmp/id_rsa.pub' を削除しますか? yes
  4. サーバー側/etc/ssh/sshd_configを編集します。
    #Port 22
    ↓↓↓       (ポートを変更します)
    Port 2222
    
    PermitRootLogin yes
    ↓↓↓       (rootアカウントでのログインを禁止します)
    PermitRootLogin no
    
    #PasswordAuthentication yes
    ↓↓↓       (パスワード認証を禁止します)
    PasswordAuthentication no
    
    #PermitEmptyPasswords no
    ↓↓↓       (空パスワードでの認証を禁止します)
    PermitEmptyPasswords no
    
    ※ポート番号は環境に合わせて適宜読み替えてください。
  5. ファイアウォールにポート変更設定を読ませます。
    1. cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-2222.xmlで設定ファイルをコピー
    2. vi /etc/firewalld/services/ssh-2222.xmlで編集
      <port protocol="tcp" port="22"/>
      ↓↓↓
      <port protocol="tcp" port="2222"/>
      
    3. firewall-cmd --permanent --remove-service=sshfirewall-cmd --permanent --add-service=ssh-2222で変更反映
  6. SSH サービスを再起動します。 systemctl start sshd.service
  7. 手元の端末で、別ウインドウにてログインができるか試します。 ssh wg_user@118.27.10.107 -i ~/.ssh/id_rsa -p 2222 Enter passphrase for key '/Users/YOURNAME/.ssh/id_rsa': と表示されたら、鍵ペアを作成した際に設定したパスフレーズを入力します。

参考文献