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)を再保存する