root宛のメールを転送します【Rocky Linux 8】

メール通知機能があるアプリ等を使用する際に、デフォルトがroot宛というのがよくあるので、root宛を管理者メールアドレスに転送するようにします。

[root@sv1 ~]# vi /etc/aliases
# Person who should get root's mail
#root:          marc
root:           taro
taro:           taro@pochaneko.net

[root@sv1 ~]# newaliases
→コマンドが無いと表示された場合、postfixをインストールする。

[root@sv1 ~]# mail root
Subject: TEST MAIL
TEST
.
EOT
→コマンドが無いと表示された場合、mailxをインストールする。

システムを最新状態にする【Rocky Linux 8】

サーバー運用開始後は、アップデートが難しい場合もあります。
そのため、サーバー構築時は必ず最新の状態にしましょう。

サーバー構築時の最新化

最新状態にした後、サーバーを再起動します。

[root@sv1 ~]# dnf upgrade
[root@sv1 ~]# shutdown -r now

サーバー運用開始後の最新化

#更新可能パッケージの確認
[root@sv1 ~]# dnf check-update

#全体の更新
[root@sv1 ~]# dnf upgrade

#全体の更新(重要な更新のみ)
[root@sv1 ~]# dnf upgrade-minimal

sshd(OpenSSH)の設定【Rocky Linux 8】

ポート番号の変更、rootログインの禁止、パスワード認証の禁止(公開鍵認証のみ)、sftp通信時のパーミッション変更を設定します。

1.設定ファイルの内容を以下のように編集します

[root@sv1 ~]# vi /etc/ssh/sshd_config
+   Port 50022
-   PermitRootLogin yes
+   PermitRootLogin no
-   PasswordAuthentication yes
+   PasswordAuthentication no
-   Subsystem sftp /usr/libexec/openssh/sftp-server
+   Subsystem sftp /usr/libexec/openssh/sftp-server -u 022

2.変更した設定を反映されるため、sshdを再起動します

[root@sv1 ~]# systemctl restart sshd

最後に変更したポート番号で接続できるかどうか確認しましょう。(変更確認まで、既存のsshコネクションは切断しないように)

firewalldの設定【Rocky Linux 8】

firewalldの考え方として、デフォルト動作(特に指定していない場合、REJECT)があって、その上にzoneが積み重なっていく形になります。

デフォルトだと、public zoneのみアクティブなので、「public」(ssh・dhcpv6-client・cockpitが許可)それ以外の場合、デフォルト動作へ判断を委ねる。(デフォルト動作がREJECTなので、応答ありの拒否になる)

管理用にzoneを追加するなど様々な設定がありますが、例として、以下のような基本的設定のみ紹介します。

  • http/httpsを通信できるようにします。
  • sshのポート番号を「22」から「50022」に変更して通信できるようにします。
  • Webmin用にポート番号を「50000」で通信できるようにします。

1.firewalldをインストールして、自動起動を有効化の上、起動します

[root@sv1 ~]# dnf install firewalld
[root@sv1 ~]# systemctl enable --now firewalld

2.現在の設定を確認します

[root@sv1 ~]# firewall-cmd --get-active-zones
public
  interfaces: eth0

[root@sv1 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

3.sshとWebmin用にservicesファイルを用意します

[root@sv1 ~]# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-50022.xml
[root@sv1 ~]# vi /etc/firewalld/services/ssh-50022.xml
-   <port protocol="tcp" port="22"/>
+   <port protocol="tcp" port="50022"/>

[root@sv1 ~]# vi /etc/firewalld/services/webmin.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>WEBMIN</short>
  <description>Webmin</description>
  <port protocol="tcp" port="50000"/>
  <port protocol="udp" port="50000"/>
</service>

4.許可するサービスを追加します(http・https・ssh-50022・webmin)

[root@sv1 ~]# firewall-cmd --permanent --add-service=http
success
[root@sv1 ~]# firewall-cmd --permanent --add-service=https
success
[root@sv1 ~]# firewall-cmd --permanent --add-service=ssh-50022
success
[root@sv1 ~]# firewall-cmd --permanent --add-service=webmin
success
[root@sv1 ~]# firewall-cmd --reload
success

5.最後に反映されているか確認します

[root@sv1 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client http https ssh ssh-50022 webmin
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

なお、元のssh(ポート番号:22)は、通信確認後に削除しましょう。

SELinuxを無効化する【Rocky Linux 8】

SELinuxに関しては、セキュリティを考慮すれば有効化しておいて、使い方を覚えるべきだと思います。
ただ、かなり難解ですし、使用するミドルウェアによっては、無効化する必要があったりもしますので、無効化しておいた方が無難です。

ただし、RHEL9からは無効化非推奨となり、この方法では無効化できなくなるようです。(別途無効化の方法あり)
その上、AWSのEC2で用意されるOS Amazon Linux 2の後継となる、Amazon Linux 2022でもデフォルトで有効化されるようなので、今後はSELinuxが有効化されている環境がデフォルトになっていくのかなと思います。

[root@sv1 ~]# getenforce
[root@sv1 ~]# vi /etc/selinux/config
+   SELINUX=disabled

ユーザーを新規追加する【Rocky Linux 8】

ユーザーを新規追加する手順です。

1.ユーザー作成(例:jiro)&パスワードの設定

[root@sv1 ~]# useradd jiro
[root@sv1 ~]# passwd jiro

2.(任意)一部コマンドにエイリアスを設定

[jiro@sv1 ~]$ vi .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias ll='ls -laF'
umask 022

3.(公開鍵SSHアクセスする場合)公開鍵を設置

[jiro@sv1 ~]$ mkdir .ssh
[jiro@sv1 ~]$ chmod 700 .ssh/
[jiro@sv1 ~]$ vi authorized_keys
[jiro@sv1 ~]$ chmod 600 authorized_keys

ホスト名を変更する【Rocky Linux 8】

Red Hatなどでは、ホスト名はFQDNと同じものが推奨されています。
ただ、DNSに関係しない場合には適当な値でもOKです。

1.現在のホスト名を確認します。

[root@localhost ~]# hostname
localhost.localdomain

2.恒久的にホスト名を変更する場合。

[root@localhost ~]# hostnamectl set-hostname sv1.pochaneko.net

#確認
[root@localhost ~]# hostnamectl
   Static hostname: sv1.pochaneko.net
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 505b****************************
           Boot ID: 0904****************************
    Virtualization: kvm
  Operating System: Rocky Linux 8.4 (Green Obsidian)
       CPE OS Name: cpe:/o:rocky:rocky:8.4:GA
            Kernel: Linux 4.18.0-305.3.1.el8_4.x86_64
      Architecture: x86-64

3.一時的にホスト名を変更する場合。

[root@sv1 ~]# hostname sv2.pochaneko.net

#確認
[root@sv1 ~]# hostname
sv2.pochaneko.net

AWS EC2等一部サービスの場合

上記の恒久的なホスト名変更を行っても、再起動時に反映されない(=初期値に戻る)場合には、「/etc/cloud/cloud.cfg」があるかどうかを確認します。
存在する場合には、以下の値を変更します。

[root@sv1 ~]# vi /etc/cloud/cloud.cfg
-   preserve_hostname: false
+   preserve_hostname: true

標準ユーザー「rocky」のユーザー名を変更する【Rocky Linux 8】

rockyをそのまま残して、新規ユーザーを追加しても良いのですが、使わないユーザーを残しておくのも気持ちがそわそわするので、ユーザー名を変更しています。
ちなみにRocky Linux 8では、rootはパスワード未設定のロック状態です。特に必要がなければ、そのままで良いかと思います。

1.一時的にrootユーザーを有効化します。(一時的なユーザーを作成しても可)

[rocky@localhost ~]$ sudo passwd root

2.一度ログアウトして、rootでログインし直してから、rockyユーザーのプロセスが無いか確認します。

[root@localhost ~]# ps axu |grep rocky

3.任意のユーザー名(例:taro)に変更します。
ここから先の手順は、rockyユーザーのプロセスが確実に無い状態で実行してください。

[root@localhost ~]# usermod -l taro rocky

4.ユーザーの確認をします。

[root@localhost ~]# id rocky
id: ‘rocky’: no such user

[root@localhost ~]# id taro
uid=1000(taro) gid=1000(rocky) groups=1000(rocky),10(wheel)

5.ユーザーのホームディレクトリを変更します(ユーザーのホームディレクトリは自動的に変更されない為)

[root@localhost ~]# usermod -m -d /home/taro taro

6.任意のグループ名(例:taro)に変更します。

[root@localhost ~]# groupmod -n taro rocky

7.sudoの設定を変更します。
wheelグループを活用してもOK。その場合は、rockyの行は無効化します。

[root@localhost ~]# visudo
-   rocky   ALL=(ALL)       NOPASSWD: ALL
+   taro    ALL=(ALL)       ALL

8.再度、ユーザーの確認をします。
SSHでログインできるか?等も同時にチェックします。

[root@localhost ~]# sudo -l -U taro
既定値のエントリと照合中 (ユーザー名 taro) (ホスト名 server):
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

ユーザー taro は server 上で コマンドを実行できます
    (ALL) ALL

[root@localhost ~]# id taro
uid=1000(taro) gid=1000(taro) groups=1000(taro),10(wheel)

9.一時的に有効化したrootを再度無効化します。

[taro@localhost ~]$ sudo passwd -d root
ユーザー root のパスワードを削除。
passwd: 成功

[taro@localhost ~]$ sudo passwd -l root
ユーザー root 用のパスワードをロック。
passwd: 成功

タイムゾーンの設定【Rocky Linux 8】

国内サービスの場合、おおよそタイムゾーンの設定は東京になっていると思われます。
もし、UTCの場合などには以下のように東京に設定します。

1.現在の設定を確認します。

[root@localhost ~]# timedatectl
      Local time: 金 2022-08-26 06:32:18 UTC
  Universal time: 金 2022-08-26 06:32:18 UTC
        RTC time: 金 2022-08-26 06:32:18
       Time zone: UTC (UTC, +0000)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

2.設定可能な値の一覧を調べます。

[root@localhost ~]# timedatectl list-timezones
Africa/Abidjan
Africa/Accra
…
…
Asia/Tokyo
…
…
Pacific/Wallis
UTC

3.タイムゾーンを設定します。

[root@localhost ~]# timedatectl set-timezone Asia/Tokyo

4.変更された設定を確認します。

[root@localhost ~]# timedatectl
      Local time: 金 2022-08-26 15:32:18 JST
  Universal time: 金 2022-08-26 06:32:18 UTC
        RTC time: 金 2022-08-26 06:32:18
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

日本語環境にする【Rocky Linux 8】

必須ではなく、好みや仕様の問題ですが、日本語環境にしたい場合は以下のように設定します。

システム全体を日本語環境にする場合

1.現在の設定を確認します。

[root@localhost ~]# localectl
   System Locale: LANG=en_US.UTF-8
       VC Keymap: jp
      X11 Layout: jp

2.必要なパッケージをインストールします。

[root@localhost ~]# dnf install langpacks-ja glibc-langpack-ja

3.文字セットを変更します。

[root@localhost ~]# localectl set-locale LANG=ja_JP.UTF-8
[root@localhost ~]# source /etc/locale.conf

4.変更された設定を確認します。

[root@localhost ~]# localectl
   System Locale: LANG=ja_JP.UTF-8
       VC Keymap: jp
      X11 Layout: jp

システムはそのままでユーザー単位で日本語環境にする場合

1.文字セットを変更します。(事前に上記2を済ませておきます)

[rocky@localhost ~]$ vi ~/.bash_profile

LANG=ja_JP.utf8
export LANG

[rocky@localhost ~]$ source ~/.bash_profile

2.変更された設定を確認します。

[rocky@localhost ~]$ echo $LANG
ja_JP.utf8

キーマップを日本語にする

1.現在の設定を確認します。

[root@localhost ~]# localectl
   System Locale: LANG=en_US.UTF-8
       VC Keymap: us
      X11 Layout: us

2.設定可能なキーマップを確認します。

[root@localhost ~]# localectl list-keymaps
ANSI-dvorak
al
al-plisi
…
…

3.キーマップを設定します。

[root@localhost ~]# localectl set-keymap jp106

4.変更された設定を確認します。

[root@localhost ~]# localectl
   System Locale: LANG=ja_JP.UTF-8
       VC Keymap: jp106
      X11 Layout: jp
       X11 Model: jp106
     X11 Options: terminate:ctrl_alt_bksp