CentOS7を初期環境構築する時のドキュメントです。
ここではSELINUXの停止、ZSH、peco、ユーザー作成と設定、SSHポートの変更、タイムゾーンの設定等を行います。
サーバー構築に慣れていない場合はpecoを入れてコマンド実行履歴を確認できるのでお勧めです。
[目次]
・SSH接続
・初期設定
・zsh・シェル・peco・vim設定
・ユーザー・グループ作成と設定
・セキュリティとユーザー設定
・サーバーのタイムゾーンを日本時間に合わせる
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の設定]
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ポート。
下記のウィキペディアにポート番号の一覧が記載されているので、参考にし、競合しないようにして下さい。
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等の設定を行います。
この設定をしておくと今後のサーバー構築もしやすいと思います。
サーバー構築初心者の方に特にお勧めなので、是非試してみて下さい。