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 來讓設定生效。

電影流水帳(2022/09/01~2022/09/15)

152555_TH029744
Mckenna Grace
  • Ghostbusters: Afterlife (IMDB, Wikipedia),台譯:魔鬼剋星未來世。
  • Space Cowboys (IMDB, Wikipedia),台譯:太空大哥大。

Ghostbusters: Afterlife

故事的起點我覺得起的不錯,之前有看到這片的訪談,主要的演員原本都不願意出來演,一方面是有位演員已經身故,一方面也是沒有好的故事題材,後來就是因為這個新的故事讓大家都願意出來,終於促成這個故事。

故事發生在一個偏僻的小鎮,Callie 的父親就是之前 Ghost buster 的成員 Spengler ,Spengler 走了,再加上 Callie 的經濟狀況不佳,只好帶著兩個孩子回去父親住的小鎮,接收父親的遺產。Spengler 本身就家徒四壁,只留下那個房子。Callie 一家人來到這小鎮以後,女兒 Phoebe 頻頻遇到怪事,他沒有跟媽媽說,反倒自己去摸索。Phoebe 是個非常關鍵的角色,透過她的調查,把周遭的人、事、物都串了起來。

Spengler 之前離開 Ghost buster ,主要是 Ghost buster 慢慢沒落,失去了名氣,再者是在這小鎮發現了 Gozer ,他在此設置機關來鎮壓,並設法捕捉。他死去的那天,就是他試著捕捉,但失敗。在 Callie 一家人來到這小鎮以後,Gozer 的法力也愈來愈強大,機關慢慢失去效力。經過幾次事件,Gozer 找到了兩個使徒,一個是 Callie,一個是 Phoebe 的老師 Gary,透過他們的幫助,Gozer 逃離了 Spengler 設下的機關。Phoebe 透過祖父留下的資料,知道了 Gozer 的事情,他不想讓祖父的努力白費,就聯絡了之前 Ghost buster 的成員,並且自己跟哥哥、哥哥的朋友,一同設下機關來對抗 Gozer。但他們對捉鬼機關不熟悉,眼看 Gozer 很快就要打贏。這時候之前 Ghost buster 的隊員跟祖父的鬼魂出現,一同對抗 Gozer ,最終封住 Ghozer。

Space Cowboys

時間一開始是 1958 年,一個原本要上太空的小組因為經費的緣故,被裁撤了,小組成員 Frank 跟 Hawk 因為這事情鬧翻,相互指責,總之,後來就解散了。

經過幾十年後,NASA 有了狀況, NASA 之前幫俄國發射一顆衛星,並且做維護,可是這顆衛星大限已到,而且沒辦法遙控處理,上面的系統正巧就是 Frank 設計的。NASA 的主事者 Bob 就是裁撤 Frank 一組人的人,因為之前裁撤的事情,Bob 跟 Frank 鬧的不愉快。但是,事情發生了也沒辦法,只好找 Frank 回來幫忙。Frank 想圓之前的夢想,就跟 Bob 談了條件,只要讓 Frank 上太空,就願意幫忙。Bob 沒辦法,只能答應。

Frank 去找了 Hawk 等人回來,開始接受身體檢查跟體能訓練,在一邊體能訓練的同時,也教授第二組人該如何維修,這是 Bob 要求的。經過一番波折以後,兩組人一同順利上了太空開始維修。Frank 跟 Hawk 卻發現這顆衛星有很大的問題。俄國人在這顆衛星上擺了彈頭,這下問題大了,一方面是誠信問題,當初找 NASA 幫忙發射,你卻擺了彈頭,另一方面是如果墜毀炸到人,這死傷恐怕很慘重。第二組人是年輕人,只想完成任務,卻出了狀況,Frank 幾個人只能幫忙擦屁股,避免讓彈頭掉到地球。所以 Hawk 犧牲自己,利用動力設備,把這彈頭往太陽推,其他人則利用剩下的設備設法平安降落。最後,剩下的人順利返回地球。

故事蠻有意思的,在處理情感的部份,有些不是很完整,所以顯得有點突兀。

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 跑去看了,很喜歡,才有了這個玩具。

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

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