CentOS初期設定

CentOSをインストールしたら最初にやっておくべき作業まとめ

cat /etc/redhat-release
実行結果
CentOS Linux release 7.9.2009 (Core)

CentOSのバージョンを確認する

TeraTermでSSH接続する方法を参考に、プレインパスワードでサーバーにSSH接続

セキュリティ強化のため、あとでSSH鍵を発行して、プレインパスワード接続からSSH鍵接続に切り替える

TeraTermで接続できるようにしておくと、コマンドや設定ファイルなど、テキストをローカルからサーバーにコピペできるようになる
コピペを活用して手入力での入力ミスをなくすために、真っ先にTeraTermを使えるようにしておいた方が便利

VirtualBoxの仮想マシンにTeraTermで接続する場合は、ホストオンリーアダプターに設定したIPアドレスを使う

詳細は以下を参照
VirtualBoxのホストオンリーアダプターを有効にする方法

yum update -y

既存のパッケージを一括でアップデート

ロケールを設定を参考に、LANGja_JP.UTF-8に設定

タイムゾーンを設定を参考に、タイムゾーンをAsia/Tokyoに設定

SELinuxとは、Linuxのセキュリティ機能

SELinuxが有効になっていると、
sshd_configファイルからsshdのポートを変更したときに
Failed to start OpenSSH server daemon.
というエラーが表示され、sshdサービスが起動できなくなる

セキュリティ関係は、firewalldでポートの制限等を行うのでSELinuxはオフにしておく

getenforce
実行結果
Enforcing

Enforcingと表示されたら、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

systemctl status firewalld
実行結果
Unit firewalld.service could not be found.

Unit firewalld.service could not be found.
と表示される場合は、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-clientsshが表示されている

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'のサービスを今すぐ起動できる

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は削除
httphttpsftpは追加

firewall-cmd --reload

変更した設定を反映させるには上記のコマンドを実行する

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)
usermod -aG wheel user1
id user1
実行結果
uid=1000(user1) gid=1000(user1) groups=1000(user1),10(wheel)

wheelグループに入るとrootに相当する権限が与えられ
コマンドの前にsudoをつけると何でもできるようになる

TeraTermでSSHの秘密鍵・公開鍵を生成する方法を参考に、SSHの秘密鍵・公開鍵を生成する

サーバーにid_rsa.pub(公開鍵)を設置して
クライアントにid_rsa(秘密鍵)を持つことで
公開鍵方式でSSH接続可能にする

user1(SSH鍵で接続させるユーザー、ただしroot以外)でサーバーにログインする

id_rsa.pub(公開鍵)をサーバーにアップロードする

TeraTermのウィンドウにファイルをドラッグ&ドロップすれば、SCP転送の画面になり
/home/user1(現在ログイン中のユーザーのホームディレクトリ)にファイルがコピーされる

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の鍵認証が利用可能となる

TeraTerm・鍵認証でSSH接続する方法を参考に、サーバーにSSH接続(鍵認証)をする

vi /etc/ssh/sshd_config

/etc/sshディレクトリのsshd_configというファイルにSSHの設定が書かれている
これを編集することで、以下の設定を行う

  • rootユーザーでのログインを禁止
  • ポートを変更
  • プレインパスワードでのログイン禁止(鍵認証でのログインのみ許可)
  • 接続元のIPアドレスを制限
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ログインを禁止するための設定

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接続でサーバーに侵入することはなくなる

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アドレス)

systemctl restart sshd

sshd_configを書き換えた後は、sshdサービス再起動のタイミングで設定反映する

ここではまだTeraTermを切断しない
先にファイアウォールのSSHポートを変更しないと接続できなくなるので注意

SSHサービスが使用するポートを10022に変更したので、
ファイアウォールでもSSHが10022ポートを使用していることを定義する必要がある

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のファイルが優先される

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のショートカットを作成する

ショートカットをダブルクリックすると
ホスト名・ポート番号・ユーザー名・秘密鍵が入力された状態で
パスワード入力だけで目的のサーバーへSSH接続できるようになる

すでにショートカットを作成済みの場合は、ポートを更新して設定ファイル(TERATERM.INI)を再保存する

  • 最終更新: 2023/05/25 13:38