CentOS初期設定
CentOSをインストールしたら最初にやっておくべき作業まとめ
CentOSのバージョンを確認
サーバーにSSH接続(プレインパスワード)
TeraTermでSSH接続する方法を参考に、プレインパスワードでサーバーにSSH接続
セキュリティ強化のため、あとでSSH鍵を発行して、プレインパスワード接続
からSSH鍵接続
に切り替える
TeraTermで接続できるようにしておくと、コマンドや設定ファイルなど、テキストをローカルからサーバーにコピペできるようになる
コピペを活用して手入力での入力ミスをなくすために、真っ先にTeraTermを使えるようにしておいた方が便利
VirtualBoxの仮想マシンにTeraTermで接続する場合
VirtualBoxの仮想マシンにTeraTermで接続する場合は、ホストオンリーアダプターに設定したIPアドレスを使う
詳細は以下を参照
VirtualBoxのホストオンリーアダプターを有効にする方法
既存のパッケージをアップデート
yum update -y
既存のパッケージを一括でアップデート
ロケールを設定
ロケールを設定を参考に、LANG
をja_JP.UTF-8
に設定
タイムゾーンを設定
タイムゾーンを設定を参考に、タイムゾーンをAsia/Tokyo
に設定
SELinuxの無効化
SELinuxとは、Linuxのセキュリティ機能
SELinuxが有効になっていると、
sshd_config
ファイルからsshdのポートを変更したときに
Failed to start OpenSSH server daemon.
というエラーが表示され、sshdサービスが起動できなくなる
セキュリティ関係は、firewalldでポートの制限等を行うのでSELinuxはオフにしておく
SELinuxの状態を確認する
SELinuxの設定を変更する
vi /etc/selinux/config
SELinuxのconfig
ファイルを開く
- config抜粋(変更前)
SELINUX=enforcing
- config抜粋(変更後)
#SELINUX=enforcing SELINUX=disabled
SELINUX=enforcing
をコメントアウト、
SELINUX=disabled
を追加
サーバーを再起動する
reboot
再起動しないとSELINUX=disabled
の設定が有効にならない
再起動後、
getenforce
コマンドで、
Disabled
と表示されればOK
ファイアウォールを設定
firewalldがインストールされているか確認
systemctl status firewalld
- 実行結果
Unit firewalld.service could not be found.
Unit firewalld.service could not be found.
と表示される場合は、firewalld
がインストールされていない
firewalldをインストール
firewalldがインストールされていない場合はインストールする
詳細は下記を参照
firewalldをインストールする方法
firewalldの現時点での設定を表示
firewall-cmd --list-all
- 実行結果
public (active) target: default icmp-block-inversion: no interfaces: enp0s3 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
servicesのところにdhcpv6-client
とssh
が表示されている
dhcpv6-client
は不要なので削除する
firewalldがアクティブになっていない場合
firewall-cmd --list-all
- 実行結果
FirewallD is not running
firewall-cmd –list-all
コマンドを実行したときに
FirewallD is not running
と表示される場合は
firewalld
のサービスがダウンしている
systemctl enable firewalld systemctl start firewalld
systemctl enable firewalld
コマンドでOS再起動時の自動起動を設定
systemctl start firewalld
コマンドで'firewalld'のサービスを今すぐ起動できる
firewalldを設定
services: ftp http https ssh
となるようにファイアウォールを設定
(ftp・http・https・sshは許可、それ以外はブロック)
firewall-cmd --remove-service=dhcpv6-client --permanent firewall-cmd --add-service=http --permanent firewall-cmd --add-service=https --permanent firewall-cmd --add-service=ftp --permanent
dhcpv6-client
は削除
http
とhttps
とftp
は追加
firewalldをリロード
firewall-cmd --reload
変更した設定を反映させるには上記のコマンドを実行する
firewalld 変更後の設定
firewall-cmd --list-all
- 実行結果
public (active) target: default icmp-block-inversion: no interfaces: enp0s3 sources: services: ftp http https ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
上記のようになっていればOK
一般ユーザーを追加
root
ユーザーでsshログインできるのはセキュリティ的によくない
(パスワードなどが漏洩し、いったんログインされてしまうと、なんでもできてしまうので)
root
ユーザーとは別の普段使い用のユーザーを追加する
ユーザーの一覧を表示
cat /etc/passwd
ユーザーを追加
普段使い用のユーザーを作成する
既に作成済みならこのコマンドはパスしてOK
useradd user1
passwd user1
user1
という名前のユーザーを追加
パスワードを設定
ユーザーの所属グループを確認
id user1
- 実行結果
uid=1000(user1) gid=1000(user1) groups=1000(user1)
ユーザーをwheelグループに追加
usermod -aG wheel user1 id user1
- 実行結果
uid=1000(user1) gid=1000(user1) groups=1000(user1),10(wheel)
wheelグループに入るとrootに相当する権限が与えられ
コマンドの前にsudoをつけると何でもできるようになる
sudoコマンドをパスワード入力なしで実行できるようにする
SSHの秘密鍵・公開鍵を生成する
TeraTermでSSHの秘密鍵・公開鍵を生成する方法を参考に、SSHの秘密鍵・公開鍵を生成する
SSHの公開鍵をサーバーに登録する
サーバーにid_rsa.pub
(公開鍵)を設置して
クライアントにid_rsa
(秘密鍵)を持つことで
公開鍵方式でSSH接続可能にする
サーバーにSSH接続する(プレインテキスト)
user1
(SSH鍵で接続させるユーザー、ただしroot
以外)でサーバーにログインする
公開鍵をサーバーにアップロード
id_rsa.pub
(公開鍵)をサーバーにアップロードする
TeraTermのウィンドウにファイルをドラッグ&ドロップすれば、SCP転送の画面になり
/home/user1
(現在ログイン中のユーザーのホームディレクトリ)にファイルがコピーされる
authorized_keysを作成する
mkdir ~/.ssh chmod 700 ~/.ssh mv id_rsa.pub ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
user1
のホームディレクトリに
.ssh
というディレクトリを作成
.ssh
の権限を'700'に設定
id_rsa.pub
を.ssh
ディレクトリの下に移動、ファイル名をauthorized_keys
に変更
authorized_keys
の権限を600
に変更
~/.ssh/authorized_keys
というディレクトリ・ファイル名にすることで、SSHの鍵認証が利用可能となる
サーバーにSSH接続(鍵認証)
TeraTerm・鍵認証でSSH接続する方法を参考に、サーバーにSSH接続(鍵認証)をする
SSHの設定を変更する(sshd_config)
vi /etc/ssh/sshd_config
/etc/ssh
ディレクトリのsshd_config
というファイルにSSHの設定が書かれている
これを編集することで、以下の設定を行う
root
ユーザーでのログインを禁止- ポートを変更
- プレインパスワードでのログイン禁止(鍵認証でのログインのみ許可)
- 接続元のIPアドレスを制限
rootユーザーでのssh接続を禁止
- sshd_config抜粋(変更前)
#LoginGraceTime 2m #PermitRootLogin yes #StrictModes yes #MaxAuthTries 6 #MaxSessions 10
- sshd_config抜粋(変更後)
#LoginGraceTime 2m PermitRootLogin no #StrictModes yes #MaxAuthTries 6 #MaxSessions 10
sshd_config
というファイルの
#PermitRootLogin yes
という部分を
PermitRootLogin no
に書き換え
root
ユーザーでのsshログインを禁止するための設定
SSHのポートを変更する
- sshd_config抜粋(変更前)
#Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress ::
- sshd_config抜粋(変更後)
Port 10022 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress ::
sshd_config
というファイルの
#Port 22
という部分を
Port 10022
に書き換え
TeraTermなどでSSH接続するときのポートを22
から10022
に変更している
デフォルトの22
番ポートを使用していると、IDとパスワードが漏洩したときにサーバーを乗っ取られるリスクがある
IDとパスワードが分かっていてもポート番号が不明だとSSH接続ができないので、ポート番号をデフォルト以外のものに設定することでセキュリティが向上する
他のサービスで使用中のポートとかぶらなければ好きな番号を設定していい
プレインパスワードの使用を禁止する
- sshd_config抜粋(変更前)
# To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes #PermitEmptyPasswords no PasswordAuthentication yes
- sshd_config抜粋(変更後)
# To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes #PermitEmptyPasswords no PasswordAuthentication no
sshd_config
というファイルの
PasswordAuthentication yes
という部分を
PasswordAuthentication no
に書き換え
プレインパスワードを使ったSSH接続をできなくする
つまり、SSH接続に鍵認証が必須となる
これで、id_rsa
(秘密鍵)のファイルそのものを盗まれない限りは、第三者がSSH接続でサーバーに侵入することはなくなる
接続元IPアドレスの制限
echo "AllowUsers *@xx.xx.xx.xx" >> /etc/ssh/sshd_config
sshd_config
というファイルの末尾に
AllowUsers *@xx.xx.xx.xx
という文字列を追加
xx.xx.xx.xx
というIPアドレスの端末からしかSSH接続ができなくなる
xx.xx.xx.xx
の部分には自分の端末のIPアドレスを書く
(サーバーから見たときの自分のPCのグローバルIPアドレス)
sshdサービスを再起動する
systemctl restart sshd
sshd_config
を書き換えた後は、sshd
サービス再起動のタイミングで設定反映する
ここではまだTeraTermを切断しない
先にファイアウォールのSSHポートを変更しないと接続できなくなるので注意
ファイアウォールでSSHのポートを変更する
SSHサービスが使用するポートを10022
に変更したので、
ファイアウォールでもSSHが10022
ポートを使用していることを定義する必要がある
ssh.xmlファイルをコピー
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
/usr/lib/firewalld/services/
ディレクトリにあるssh.xml
ファイルを
/etc/firewalld/services/
ディレクトリにコピーする
/usr/lib/firewalld/services/ssh.xml
を直接編集することでもポート番号の変更は可能
しかし、モジュールのアップデート時に
/usr/lib/firewalld/services
ディレクトリの中身は上書きされる可能性がある
/etc/firewalld/services
ディレクトリはモジュールアップデート時に上書きされない
/usr/lib/firewalld/services
と
/etc/firewalld/services
の両方にssh.xml
というファイルがあった場合、
/etc/firewalld/services
のファイルが優先される
sshのポートを変更
vi /etc/firewalld/services/ssh.xml
- 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 you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description> <port protocol="tcp" port="22"/> </service>
ssh.xml
というファイルの
22
の部分を
10022
に書き換え
ファイアウォールをリロード
firewall-cmd --reload
ssh.xml
を書き換えた後は、ファイアウォールサービスの再起動が必要
TeraTermのショートカットを作成する
TeraTermのデフォルト設定を変更するを参考に、TeraTermのショートカットを作成する
ショートカットをダブルクリックすると
ホスト名・ポート番号・ユーザー名・秘密鍵が入力された状態で
パスワード入力だけで目的のサーバーへSSH接続できるようになる
すでにショートカットを作成済みの場合は、ポートを更新して設定ファイル(TERATERM.INI)を再保存する