article-thumbnail

CentOS7の初期環境構築

カテゴリ: CentOS

タグ: 初期環境構築,GCP,CentOS7基礎

2020-09-09 01:14:22

【概要】

CentOS7を初期環境構築する時のドキュメントです。

ここではSELINUXの停止、ZSH、peco、ユーザー作成と設定、SSHポートの変更、タイムゾーンの設定等を行います。 

サーバー構築に慣れていない場合はpecoを入れてコマンド実行履歴を確認できるのでお勧めです。


[目次]

・SSH接続

・初期設定

・zsh・シェル・peco・vim設定

・ユーザー・グループ作成と設定

・セキュリティとユーザー設定

・サーバーのタイムゾーンを日本時間に合わせる


【SSH接続】

1. 作成したCentOS7インスタンスにSSH接続する

・公開鍵を登録した場合

インスタンス作成時に公開鍵を登録している場合、インスタンス情報を「.ssh/config」に設定します。

Host インスタンス名
 HostName インスタンスのグローバルIP
 User root

Hostはわかりやすいようにインスタンス名にしています。

HostNameはインスタンスのグローバルIPを設定します。

クラウドの場合、コンソール画面に表示されています。

GCPでは下記のサンプル画面からわかります。


下記のコマンドでSSH接続します。

ssh インスタンス名


・公開鍵の登録をしていない場合

i. SSH接続をする

基本的にインスタンス構築時には「root」ユーザーで接続します。

ssh root@グローバルIP

この場合、上記のコマンドを打った後にインスタンス構築時に設定したパスワードを入力します。


ii. インスタンスに「~/.ssh」ディレクトリを作成する

cd ~/
mkdir .ssh
chmod 700 .ssh


iii. authorized_keysを作成する

cd .ssh
touch authorized_keys
chmod 600 authorized_keys
vi authorized_keys

インスタンスに自身の公開鍵(id_rsa.pub)を登録します。

注意点としてはパーミッションを変更しないと機能しません。


「公開鍵を登録した場合」の項目のように.ssh/configを設定するとSSH接続が楽になります。

上記のどちらかの方法でインスタンスにSSH接続します。


Cf. グローバルIPをSSH接続先で調べる方法

グローバルIPがコンソール画面からわからない場合、コンソール画面からSSH接続する方法GCPやさくらのクラウド等ではあります。

よって、コンソール画面からSSH接続し、下記のコマンドを入力すればグローバルIPがわかります。

curl inet-ip.info


【初期設定】

1. 各グループパッケージの確認とアップデートを行う

yum groups list


2. yumをアップデートする

yum update

「y」で全てのパッケージをアップデートします。

RPM-GPG-KEY-CentOS-7も「y」で進めます。

パスは「/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7」です。


3. SELinuxの設定

SELinuxとはセキュリティ関連のLinuxカーネル制御機能です。

ただ、制御は難しい為、ここではSELinuxを無効化します。

さくらクラウド等では最初からdisabledになっている事が多いです。

しかし、物理サーバーでCentOS7をインストールする所から始めると最初はenforcingになっています。

vi /etc/sysconfig/selinux

変更内容

SELINUX=disabled

「SELINUX=enforcing」を「SELINUX=disabled」にします。


4. rebootする

yumのアップデートとSELinux設定を反映する為にrebootします。

reboot


・SELinuxの設定確認

getenforce

下記のように出力されれば無効化されています。

Disabled


【zsh・シェル・peco・vim設定】

[zshの設定]

1. zshをインストール

yum install -y zsh

インストールされたzshのパスを確認する

which zsh

出力結果

/usr/bin/zsh


2. SHELLをzshに変更

chsh -s /usr/bin/zsh


Cf. Amazon Linux 2でのSHELL変更

※ Amazon Linux 2では chshコマンドがない為、下記のコマンドでインストールする必要があります。

yum install util-linux-user

「util-linux-user」をインストールした後、「chsh -s /usr/bin/zsh」コマンドを実行します。


[oh-my-zshの設定]

1. oh-my-zshのインストールする為にwget、git等をインストールする

yum install -y wget git curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker


2. oh-my-zshをインストール

wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | zsh


[vimの設定]

・vimをインストールする

yum -y install vim-enhanced


[pecoの設定]

1. pecoをインストールする

cd ~/
wget https://github.com/peco/peco/releases/download/v0.5.3/peco_linux_amd64.tar.gz


2. pecoの圧縮ファイルを解凍

tar xvfz peco_linux_amd64.tar.gz


3. 解凍したディレクトリに移動

cd peco_linux_amd64


4. pecoを「/usr/local/bin/.」に移動

mv peco /usr/local/bin/.


5. pecoをrootのグループとユーザーに変更

cd /usr/local/bin
chown root.root peco


6. pecoのPATH確認

which peco


[pecoの設定]

1. .zshrcの設定

下記のコマンドで.zshrcを編集します。

vi ~/.zshrc


i. pecoをzshにて使用できるようにする

下記を追記します。

function peco-select-history() {
  local tac
  if which tac > /dev/null; then
    tac="tac"
  else
    tac="tail -r"
  fi

  BUFFER=$(history -n 1 |
    eval $tac |
    peco --query "$LBUFFER")
  CURSOR=$#BUFFER
  zle clear-screen
}
zle -N peco-select-history
bindkey '^r' peco-select-history

setopt nonomatch


ii. oh-my-zshのテーマを変更する

「ZSH_THEME」の項目を変更する事でoh-my-zshのテーマを変更します。

ZSH_THEME="dallas"

ここでは「dallas」を設定していますが、その他にもテーマがあるので気になる方は調べてみて下さい。


iii. vimコマンドのalias設定

「vi」コマンドで「vim」を使用するようにしたい為、aliasを設定しています。

しかし、「vi」と「vim」を別々に使用したい、またはaliasが不要な場合はここの設定は不要です。

下記を追記します。

alias vi="vim"


2. 「~/.zshrc」の変更を反映する

・コマンドで反映する方法

source ~/.zshrc


・一度ログアウトし、再ログインする事で反映する

再ログインすると最初にshellを読み込みに行く為、設定が反映されます。


上記どちらの方法でも、確認が取れれば成功です。


【ユーザー・グループ作成と設定】

[概要]

ここではサンプルとして「ec2-user」ユーザーを作成します。

「ec2-user」ユーザーに権限を持たせて最低限の環境構築が行えるようにします。


[詳細]

1. ec2-userを作成する

パスワードを使用せずに「root」ユーザーになる為に、セカンダリグループに「wheel」グループを追加します。

・ec2-userグループを作成

groupadd -g 500 ec2-user

・ec2-userを作成

useradd -G wheel -u 500 -g 500 ec2-user

・ec2-userのパスワード設定

passwd ec2-user

このドキュメントでは最終的にパスワード認証でのSSH接続を拒否する設定にします。

しかし、パスワードは極力強い設定にしておきましょう。


2. oh-my-zshを使用する

zsh SHELLはrootユーザーで済んでいます。

よって、oh-my-zshのインストールを行います。

・ec2-userになる

su - ec2-user

・oh-my-zshを取得

wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | zsh

・一度ログアウトしてoh-my-zshが適応されたか確認する

「control + d」でec2-userをログアウトします。


3. SHELLをzshに変更する

i. zshのパス確認

which zsh

出力結果例

/bin/zsh


ii. SHELLをzshに変更

chsh -s /bin/zsh


iii. zshを反映する

一度「ec2-user」ユーザーをログアウトしてzshを反映させます。


4. pecoとSHELLを設定する

・.zshrcの設定を変更

vi ~/.zshrc


・変更内容

i. ZSHのテーマをfishyに変更

ZSH_THEME="fishy"

rootユーザーでは「dallas」テーマにしました。

ec2-userでは「fishy」にします。

理由はrootユーザーとec2-userで見た目が違うと、自身が今どのユーザーであるかを直感的にわかるからです。

気に入っているテーマがあればどちらのユーザーも同じでも良いと思います。


ii. pecoをzshにて使用できるようにする

下記を追記します。

function peco-select-history() {
  local tac
  if which tac > /dev/null; then
    tac="tac"
  else
    tac="tail -r"
  fi

  BUFFER=$(history -n 1 |
    eval $tac |
    peco --query "$LBUFFER")
  CURSOR=$#BUFFER
  zle clear-screen
}
zle -N peco-select-history
bindkey '^r' peco-select-history

setopt nonomatch


iii. vimコマンドのalias設定

「vi」コマンドで「vim」を使用するようにしたい為、aliasを設定しています。

しかし、「vi」と「vim」を別々に使用したい、またはaliasが不要な場合はここの設定は不要です。

下記を追記します。

alias vi="vim"


5. ec2-userに公開鍵の設定

i. 「~/.ssh」ディレクトリを作成する

cd ~/
mkdir .ssh
chmod 700 .ssh


ii. authorized_keysを作成する

cd ~/.ssh
touch authorized_keys
chmod 600 authorized_keys
vi authorized_keys

自身の公開鍵(id_rsa.pub)を登録します。


【セキュリティとユーザー設定】

0. 前提

この設定はrootユーザーで行います。

よって、「sudo su -」等のコマンドでrootユーザーになっておいて下さい。


1. sudoをパスワードなしで使用できるようにする

ec2-userにてsudoの実行をパスワードなしで許可する設定にします。

下記のどちらかのコマンドを実行します。

どちらのコマンドを実行しても実行対象のファイルは同じファイルになります。

・パターン1

visudo

・パターン2

vi /etc/sudoers

変更内容

# Same thing without a password
%wheel    ALL=(ALL)    NOPASSWD: ALL

最初は「%wheel ALL=(ALL) NOPASSWD: ALL」の文頭に「#」のコメントアウトが記述されているので「#」を削除します。


・ec2-userがrootユーザーにパスワードなしでなれるかを確認する

i. ec2-userになる

su - ec2-user


ii. ec2-userからrootユーザーになる

sudo su -

これでパスワードなしでrootユーザーになれれば成功です。


2. rootユーザーでのログイン関係を変更する

変更点は下記の2点です。

・rootユーザーでのSSH接続ができないようにする

・全ユーザーのSSH接続におけるパスワード認証を拒否する

vi /etc/ssh/sshd_config

変更内容

PermitRootLogin no
PasswordAuthentication no

上記は変更前から設定されている場合もあります。

「PermitRootLogin」と「PasswordAuthentication」の項目はあるので探して変更して下さい。


3. SSH接続の設定変更を適応する

systemctl restart sshd.service


・注意点

これでルートユーザーでのSSH接続とパスワード認証によるSSH接続ができなくなりました。

このあと確認を行うのですが、現在接続しているSSH接続は切らないようにして下さい。

理由は、もし作成したユーザー(ここではec2-user)の設定が間違っていた場合、ローカルでの接続が困難になります。

クラウドの場合は、コンソール画面からSSH接続できますが、物理サーバーの場合はCentOS7の再インストールから始めなければなりません。

よって、現在の接続は切らないようにして下さい。


4. ローカルからCentOS7にec2-userで接続できるか確認する

・.ssh/config設定

vi ~/.ssh/config

macに下記のように.ssh/configを設定します。

Host インスタンス名
HostName インスタンスのグローバルIP
User ec2-user


・ターミナルの新規タブでローカルからサーバーに接続する

ssh インスタンス名

これで接続できれば成功です。


5. ポート変更

SSH接続のデフォルトのポートは22番です。

つまり、22番ポートは誰もが知っているSSHポートとなります。

22番を使い続けるのはハッキングされる可能性が高まります。

デフォルトのSSHポート番号を変更する事で多くの方が使用している番号から変わる為、対策となります。


i. rootユーザーになる

sudo su -


ii. SSH接続ポートの変更

vi /etc/ssh/sshd_config

変更内容

# Port 22
Port 10022

ここでは10022ポートを使用しますが、他の番号でも大丈夫です。

ただし、今後インストールするアプリケーションにもデフォルトのポートがあります。

例えば、Nginxでは80番ポート、MySQLでは3306ポート。

下記のウィキペディアにポート番号の一覧が記載されているので、参考にし、競合しないようにして下さい。

TCPやUDPにおけるポート番号の一覧


iii. 変更を反映

systemctl restart sshd.service


6. Firewallを設定している場合のポート開放

SSH接続で10022番ポートを使用する場合、Firewallに10022ポートを開ける設定をします。

ただ、GCPやAWSといったクラウドの場合はパケットフィルタで設定します。

パケットフィルタを使用しない場合の対応としてまとめているのでパケットフィルタで対応する場合はこちらの項目は飛ばして下さい。


・ポート解放設定

firewall-cmd --zone=public --add-port=10022/tcp --permanent


・設定反映

firewall-cmd --reload


※ 標準のSSH(22)を開放する場合のコマンド

firewall-cmd --add-service=ssh --permanent


7. ポート変更に伴い、macの.ssh/configを再設定する

CentOS7のSSHポートを10022に変更した為、macの.ssh/configも変更する必要があります。

vi ~/.ssh/config

下記のように.ssh/configの対象サーバー設定に「Port10022」の設定を追加します。

Host インスタンス名
HostName インスタンスのグローバルIP
User ec2-user
Port 10022


8. 再度SSH接続できるか確認する

ssh インスタンス名

これで接続できれば設定完了です。


【サーバーのタイムゾーンを日本時間に合わせる】

下記はサーバーの時刻を東京のに合わせるコマンドです。

timedatectl set-timezone Asia/Tokyo

アプリケーションやcron等にも時刻は影響します。

ここでは時刻を東京にしていますが、使用するアプリケーションに合わせて時刻を設定して下さい。


【まとめ】

これで最低限の設定は完了です。

この後にPHPやNGINX等の設定を行います。

この設定をしておくと今後のサーバー構築もしやすいと思います。

サーバー構築初心者の方に特にお勧めなので、是非試してみて下さい。