RHEL8 系統憑證管理

RHEL8 管理系統 SSL 憑證,首先要安裝 ca-certificates 套件

yum install ca-certificates

這個套件主要是外部的憑證,會定期更新,若是在連線到外部有遇到憑證問題,通常更新這個套件就可以解決。

如果有需要安裝自簽憑證,可以複製到以下這兩個憑證路徑:

  • /etc/pki/ca-trust/source/anchors
  • /usr/share/pki/ca-trust-source/anchors

/etc/pki/ca-trust 的權限比較高。

複製完成,執行

update-ca-trust

要察看目前有放了哪些憑證,可以用 trust 指令

trust list

前面提到的複製、執行 update-ca-trust ,也可以用以下指令替代

trust anchor <path.to/certificate.crt>

參考資料

explainshell

前陣子看到有人介紹這網站,把指令貼上去以後,下方會出現指令跟引數的解說,覺得挺不錯。在懶得用 man 或用 google 查詢時,用這很方便。

使用方法很簡單,就在輸入欄貼上要查詢的指令,除了單個指令以外,也可以貼上有 pipe 這類的組合指令。貼上以後,下方就出現說明了,以後就不用一個一個查了。

定時自動重啟服務

定時自動重啟服務,第一個最先想到就是用 crontab ,執行 crontab -e 加入

30 3 * * sun /bin/systemctl restart myService

就可以在每周日的 3:30 去重新啟動 myService 這個服務。

那可不可以用 systemd 來解決呢?

How can I configure a systemd service to restart periodically? 這篇有提到 systemd 在 229 這個版本以後有一個設定:RuntimeMaxSec ,這個可以表明服務存活的時間,所以如果是寫 1d ,表示存活一天,然後依照 Restart 設定來決定服務是否重新啟動

[Service]
Restart=always
RuntimeMaxSec=1d

以上設定就表示,服務存活一天,一天後重新啟動。

但這樣的設定,無法指定時間。

若需要指定時間,就需要使用 systemd timer 來進行

首先建立一個 oneshot 的 service ,新增 /etc/systemd/system/my_program.service

[Unit]
Description=Restart service

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl try-restart myService.service

這個 service 就只重新啟動 myService.service。接著加入 timer 設定,新增 /etc/systemd/system/my_program.timer

[Unit]
Description=Do something daily

[Timer]
# OnCalendar=daily
OnCalendar=*-*-* 3:30:00
Persistent=true

[Install]
WantedBy=timers.target

新增好以後,設定啟用這個 timer

systemctl daemon-reload
systemctl enable --now my_program.timer

這樣就可以在每天的 3:30 重新啟動 myService 這個服務了。

這方法跟 crontab 相比,需要管理兩個檔案,好處是可以統一使用 systemctl 來管理,各有好處。

以上介紹了三種方法,多知道一些,未來就可以因應各種情況來做搭配使用。

參考資料

cockpit 改 port

cockpit 是 RHEL 現在主打的 web console,透過網站介面,就可以管理主機。Debian/Ubuntu/RHEL 都有把這個套件包進去。

預設在安裝以後,是不啟用的,需要使用以下指令來啟用

sudo systemctl enable cockpit.socket

port 的預設值是 9090,若需要改 Port 的話,可以透過以下指令來覆寫之前的設定

sudo systemctl edit cockpit.socket

編輯以後,輸入以下內容

[Socket]
ListenStream=
ListenStream=PORT_NUMBER

把 PORT_NUMBER 改為想要的 port 就可以。

修改完畢以後,用以下指令重新載入跟啟動

sudo systemctl daemon-reload
sudo systemctl restart cockpit.socket

RHEL8修復磁碟

Red Hat Enterprise Linux (RHEL) 7, 8, 9 的方法都一樣。

  1. 拿 RHEL 安裝光碟開機
  2. 開機選單進入 Troubleshooting
  3. 進入 Rescue a Red Hat Enterprise Linux System
  4. 進入終端機

有終端機就好辦事了。

Software RAID 就用 mdadm --assemble --scan ,這主要是用 RAID 工具去掃描磁碟並重組 RAID 。執行完,要用 cat /proc/mdstat 檢查看看。

LVM 就用 lvm vgchange -ay 去尋找並啟用 LVM。啟用成功以後,可以再檢查 LVM 相關設定看看 (/etc/lvm) 以及 Kernel 的開機參數 cat /proc/cmdline

先用 lsblk 或是 df -h 看看目前的磁碟跟掛載的分割區,通常無法掛載或是掛載成唯讀時,都表示可能有問題,這時候要用適當的修復指令去修復。

各種檔案系統的修復指令

  • ext2/ext3/ext4: e2fsck -fvy /dev/sdX
  • xfs: xfs_repair /dev/sdX
  • ReiserFS: reiserfsck /dev/sdX
  • Btrfs: btrfsck /dev/sdX
  • vfat: fsck.vfat /dev/sdX

修復好,可以掛載以後,要再把分割區掛載起來,檢查一下裡面的設定,例如 /etc/fstab ,/etc/lvm 等等的。

大致上是這樣,關於修復這部份,我覺得蠻吃經驗的,也需要對 Linux 開機過程有足夠的認識,這樣會比較好解決。

最後附帶一提,Ubuntu 也是用類似的方法來處理,Ubuntu 比較好的地方是用 LiveCD 開機完以後,有桌面環境可以用,這時就可以開終端機或是磁碟分割工具來使用,甚至也可以配置網路,用瀏覽器去查找資料來處理。

nice and renice

之前在準備考試時,看到的一篇文,裏面有解說跟實驗,寫的很好。

A brief guide to priority and nice values in the linux ecosystem

以下做筆記

  1. Linux 裡每個程序有 CPU 優先權,這個值是可以使用 nice 跟 renice 調整的,主要是讓程序可以得到更多一點的 CPU 使用權。
  2. nice 指令是啟動程序時就要帶入優先權的: nice -n 10 your_prog
  3. renice 指令可以在啟動程序之後去做調整: renice -n 10 -p pid
  4. 優先權的值是依照使用者身份而定,root 可以設定 -20~19 ,一般使用者可以設定 0~19
  5. 優先權的數值愈小,表示優先權越高,Kernel 裡面的計算方式是用 “優先權的數值 + 20” 。

一般來說很少會去調整這個優先權,都是讓 Kernel 自行去調控。

禁用ctrl+alt+del

這個其實我不太會去關掉,但蠻多公司都會把這個關閉,避免不小心按到,導致伺服器重新開機。另外跟安全漏洞也有關係,有人會利用這個熱鍵來做壞事。

用 systemd 的話,蠻簡單的,ctrl+alt+del 被設定為一個 target,所以可以用 systemctl disablesystemctl mask 來關閉。

systemctl disable ctrl-alt-del.target
systemctl mask ctrl-alt-del.target

但是,systemd 有埋一個機關,就是兩秒內連續按下七次,他仍然會重新開機 ( man systemd-system.conf 可找到),所以最好也在 /etc/systemd/system.conf 裡加入以下設定

CtrlAltDelBurstAction=none

然後重新載入設定

systemctl daemon-reexec

若是在 RHEL 8 使用 GUI,還需要加一個地方,新增 /etc/dconf/db/local.d/00-disable-CAD ,內容如下

# /etc/dconf/db/local.d/00-disable-CAD 
[org/gnome/settings-daemon/plugins/media-keys]
logout=''

新增以後,執行 dconf update 來讓設定生效。

RHEL8系統加密原則(SSH)

在 Red Hat Enterprise Linux 8 以後導入了整合的加密原則管理,透過 update-crypto-policies 指令就可以很方便的去設定系統加密原則。

使用以下指令就可以看到使用哪個原則

update-crypto-policies --show

預設都是 DEFAULT

若需要設定為 FUTURE 可以用

update-crypto-policies --set FUTURE

Red Hat 有針對這部份撰寫一篇 KB: System-wide crypto policies in RHEL ,說明是如何運作的。在產品手冊裡也有提到這部份:Chapter 4. Using system-wide cryptographic policies。若有需要客製化,可以參考 Red Hat 的另外一篇 How to customize crypto policies in RHEL 8.2 來進行客製化。

接下來講一下 sshd 的部份,一般若要讓 sshd 使用指定的金鑰交換原則或是加密原則,會說要去修改 /etc/sysconfig/sshd ,把裡面的

# System-wide crypto policy:
# To opt-out, uncomment the following line
#CRYPTO_POLICY=

改為

# System-wide crypto policy:
# To opt-out, uncomment the following line
CRYPTO_POLICY=

然後再去修改 /etc/ssh/sshd_config 。

這個設定實際上會影響的地方是 sshd systemd service ,我們可以用 systemctl cat sshd 來看看

# /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.target
Wants=sshd-keygen.target

[Service]
Type=notify
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

從這邊可以看到有兩行 EnvironmentFile,第一行 EnvironmentFile 去含括 /etc/crypto-policies/back-ends/opensshserver.config ,這就是系統的 ssh 加密原則設定。第二行 EnvironmentFile 含括的檔案,就是前面提到的 /etc/sysconfig/sshd 。

那在 ExecStart 這行可以看到啟動 sshd 時,有放置 $CRYPTO_POLICY ,表示會使用這個環境變數的內容。也因此,若在 /etc/sysconfig/sshd 裡移除 CRYPTO_POLICY 的註解,在啟動 sshd 時,就不會帶入參數,而使用 /etc/ssh/sshd_config 裡的設定。

在查到這邊時,我才想起之前好像有找過,但之前沒有記錄,沒記錄就容易忘記,所以今天特別記下來。

net-snmp

最近試著架設了 SNMP,SNMP 的運作跟 Prometheus 相似,SNMP Agent 相當於 nodeexporter ,提供 Agent 所在的主機資訊;需要知道該台主機資訊的管理主機,就用 SNMPWalk 去抓取主機資訊,這就相當於 Prometheus。

在 RHEL8 裡的安裝很簡單

sudo yum install -y net-snmp net-snmp-utils

安裝完成,就啟用 SNMP Agent,這個 snmpd 就是 SNMP Agent。

# 啟用 SNMP Agent 服務
sudo systemctl enable --now snmpd

# 開啟防火牆
sudo firewall-cmd --add-service=snmp --permanent
sudo firewall-cmd --reload

啟用之後,就可以取得基本的系統資訊。

可以用以下指令確認

snmpwalk -v1 -c public <IP>

如果要提供額外的系統資訊,就需要再增加設定,例如網路介面資訊、磁碟資訊或是負載,就需要在 /etc/snmp/snmpd.conf 裡去增加以下設定

# 網路介面資訊
view    systemview    included   .1.3.6.1.2.1.2
view    systemview    included   .1.3.6.1.2.1.6
view    systemview    included   .1.3.6.1.2.1.7

# 磁碟資訊
disk / 10%
view    systemview    included   .1.3.6.1.4.1.2021.9

# 負載
load 12 14 14
view    systemview    included   .1.3.6.1.4.1.2021.10

驗證是否有輸出這些資訊,一樣也是用 snmpwalk

snmpwalk -v1 -c public <IP> system
snmpwalk -v1 -c public <IP> interfaces
snmpwalk -v1 -c public <IP> .1.3.6.1.4.1.2021.9
snmpwalk -v1 -c public <IP> .1.3.6.1.4.1.2021.10

透過 SNMP 可以很方便的取得主機資訊,管理時可以利用這些資訊,而無需登入該台主機。但這樣對於駭客來說,也便利很多,他們能透過 SNMP Agent 得到主機的資訊,進而做出攻擊。因此在實務上會建議使用 SNMP v3 ,加入驗證,只允許讓特定的使用者才能取得資訊,這部份下一篇再來介紹。

參考資訊

difftastic

終端機模式下檔案的比對是個很常見的場景,我知道的作法有兩個。

第一個是使用 diff -Naur <file1> <file2> ,這方法的好處是隨處可得,一般來說安裝完基本系統,就會有這個指令可以使用。缺點是不容易閱讀,你需要稍微知道他的規則才可以。

第二個方法是使用 vimdiff ,這個指令一般在安裝 vim 以後,就會有,需要熟悉 vim 操作,也需要知道 folding 的熱鍵怎麼用。好處是分左右兩邊呈現,容易閱讀。

後來知道有不錯的指令列工具可以使用,像是今天要介紹的 difftastic,他可以分左右兩邊呈現,可以單獨呼叫,也可以結合 git 使用,缺點就是要另外安裝,例如 RHEL/Ubuntu 還沒包這個套件。

安裝

下載位址:https://github.com/Wilfred/difftastic/tags

下載,解壓縮以後,把 difft 這個檔案複製到 /usr/local/bin 即可。

使用

difft <file1> <file2>

輸出結果

$ difft /tmp/foo.txt /tmp/bar.txt
/tmp/bar.txt --- Text
1 1111                                                       1 1214
2 22                                                         2 22
3 33                                                         3 99
4 44                                                         4 44
5 55                                                         5 55
6 66                                                         6 66

相異的地方有顏色呈現,很清楚,這部份可以參考 github 上的網頁

要搭配 git 使用,可以參閱手冊:https://difftastic.wilfred.me.uk/git.html

設定方法可以使用環境變數,也可以用 git config 來設定。

環境變數的方式

export GIT_EXTERNAL_DIFF=difft

使用 git config 的方式。

# Set git configuration for the current repository.
$ git config diff.external difft

# Set git configuration for all repositories.
$ git config --global diff.external difft

有了 difftastic,在比對檔案上就方便許多,省下許多看錯的困擾。