Windows Server 空間清理

用 Microsoft Windows Server 提供的工具比較保險,查到有兩種方式,一種是需要安裝桌面體驗,一種是下指令。

安裝桌面體驗會要求額外安裝其他的元件,但空間就已經不太夠了,就不選擇這個方案。

下指令的方式是使用 dism 指令,先用以下指令分析

dism.exe /online /Cleanup-Image /AnalyzeComponentStore

分析完畢會有狀態報告,接下來就可以進行清理

dism.exe /online /Cleanup-Image /StartComponentCleanup

看起來是有排程進行清理,所以應該也不需要特別使用這指令。

參考資料

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,在比對檔案上就方便許多,省下許多看錯的困擾。

s3fs

Ubuntu 可以用 apt 安裝,安裝以後,不需要 root 權限就可以掛載。可以用這個掛載 AWS S3, minio 這類有相同 API 的 object storage。

首先把 ACCESS_KEY_ID 跟 SECRET_ACCESS_KEY 放到 ~/.passwd-s3fs 或 /etc/passwd-s3fs 檔案裡。

<ACCESS_KEY_ID>:<SECRET_ACCESS_KEY>

掛載時就用

s3fs <bucket_name> /mnt -o passwd_file=/home/<user>/.passwd-s3fs,use_path_request_style,url=<minio_url>

使用上蠻簡單的。

參考資料

SUID/GUID/Sticky bit permission

以前知道 SUID, GUID,最近要考試,才知道有 sticky bit permission。

閱讀這篇:What is sticky bit permission, and how to use it – TREND OCEANS 以後,做了點整理,幫助自己了解。

SUID 是指執行這個程式的時候,是用 owner 身份執行;GUID 是指執行這個程式的時候,試用 owner group 的身份執行。這兩個設定有點危險,因為這會讓執行程式的使用者可以用 owner/owner group 的身份執行程式,進而做到一些可能危害系統的事情。

設定方法

chmod u+s program1
chmod g+s program1

要注意的是,SUID/GUID 只能設定在二進位的執行檔上,不能設定在腳本上。

對目錄設定 sticky permission 的話,表示只有 root 跟 owner 可以刪除該目錄。

設定方法

chmod o+t dir1
chmod 1755 dir1

參考資料

電影流水帳(2022/08/16~2022/08/31)

這次就不貼圖了啦。

Free Guy

這故事很有意思,當遊戲裡的 NPC 有了自我的意識,開始跟玩家一起練等打怪以後會怎麼樣呢?這就是這部電影要說的。

蓋伊是銀行櫃員,平常沒事就是跟警衛打屁聊天,某天看到一個美女,因而戴上了玩家的眼鏡,開展了新的世界。自此,為了美女蜜莉,他開始練功打怪。在這過程裡,他也捲入了蜜莉、基斯跟遊戲老闆之間的恩怨,最後為了自己的命運,也為了蜜莉,反抗老闆。老闆惱羞成怒,開始破壞實體主機,蓋伊發現了老闆抄襲基斯程式的證據,基斯則是為了遊戲裡的人物,跟老闆談判妥協,保留了最後一台伺服器。老闆可以另外去賣新遊戲,基斯則保留既有遊戲,不再跟老闆糾纏關於版權的事情。

後來,老闆遊戲賣的不好,但基斯這邊則是根基之前的遊戲伺服器,再次建構出不一樣的世界。蜜莉則是透過這樣的旅程,知道了蓋伊其實是基斯對她的愛意,最終兩人就在一起。

Lightyear

跟玩具總動員沒關係,玩具總動員裡為什麼 Andy 會喜歡巴斯光年呢?原因就是在那個時間點,上映了一部電影,也就是現在要上映的這部電影,巴斯光年。Andy 跑去看了,很喜歡,才有了這個玩具。

故事是一個地球遠征隊去到某個星球,展開探險,卻因為巴斯光年的失誤發生了事故,導致整個遠征隊無法回到原有的世界。裡面的科學家旋即利用了當地的資源發明了超空間燃料,可以穿越空間,巴斯光年上去測試,結果出去繞個一圈,感覺沒多久,實際上卻過了很長的時間。遠征隊沒有浪費時間,在星球上建立了基地,重新開始生活。巴斯光年回來以後,則是持續的上去測試新的超空間燃料,但始終失敗,時光飛逝,他的好友兼總司令都已經掛了。

到了最後一次,他成功了,回來卻已經人事全非,基地被一個強大的太空船攻擊,他跟幾個基地裡的人一同調查跟反抗。結果令人吃驚,原來那個強大的太空船就是未來的自己,扎克所率領的,他來是搶奪超空間燃料,想回去阻止自己。牽涉到時間,就會有時空悖論的可能性,所以巴斯光年開始自己打自己。所幸最後阻止了扎克,解決了危機。基地的指揮官也認可了巴斯光年,重新編制太空騎警,保護基地的安全。

SSH跳板

Red Hat Enterprise Linux 8 的手冊裡看到 SSH 跳板,記錄一下。

首先在 ${HOME}/.ssh/config 裡新增跳板機的資訊

Host jump-server1
  HostName jump1.example.com

接著在要連過去的主機資訊裡,填入

ProxyJump <跳板機名稱>

例如

Host remote-server
  HostName remote1.example.com
  ProxyJump jump-server1

之後使用 ssh remote-server 時,會先連到 jump1.example.com 這台主機 ,再連接到 remote1.example.com 這台主機。

之前不知道這方法時,都是先連到 jump1.example.com,然後再輸入 ssh remote1.example.com 這樣,有點笨。

現在使用 ProxyJump ,會方便很多,少打不少字。

其他參考資料:https://www.redhat.com/sysadmin/ssh-proxy-bastion-proxyjump