[Linux]加入多個使用者到指定群組

要把使用者加入群組裡,可以用 usermod -aG group1 user1

那要一次把多個使用者加入群組的話,有什麼指令可以使用呢?這時候可以使用 gpasswd

gpasswd -M user1,user2,user3 group1

這樣子就可以了。

參考資料來自這裡:https://unix.stackexchange.com/questions/248426/

這串討論裡還有提到使用 for loop + usermod 的解決方法,但都不如上面那行來的簡潔、有力。

以後就知道可以用 gpasswd 了。

電影流水帳(2022/10/01~2022/11/30)

A defaced subway advertisement for the movie “The Hitman’s Bodyguard” (2017) spotted in the Cortlandt Street subway station in Lower Manhattan.
The Hitman’s Bodyguard

The Hitman’s Bodyguard

娛樂性很高的片,有動作、有槍戰、有嘴賤的鬥嘴,也有搞笑,蠻歡樂的。

Michael 是個保鏢,但因為某次陰錯陽差,要保護的對象被幹掉了,他從鼎鼎大名的 3A 等級,落到很差的等級,只能接一些零星的案子過活。Vladislav 是某獨裁國家的總統,利用他的權力跟金錢,引起國際動亂,被國際法庭起訴。而 Darius 是個殺手,受雇殺了很多人,被捕入獄,CIA 需要他出庭作證 Vladislav 的罪行。

Vladislav 怎麼可能會放過能出庭指證他的人?於是他找了殺手,幹掉每個 CIA 找來出庭的証人,這次當然也不放過 Darius 。CIA 派了大批人馬保護 Darius,但 Vladislav 找來的殺手太厲害,CIA 的人都被幹掉,裏面認識 Michael 的 Amelia ,是 Michael 的前女友,他知道 Michael 很可靠,就把 Darius 托付給 Michael,要 Michael 保護 Darius ,送他安全出庭。Michael 跟 Amelia 談好條件,就接下這任務了。

一個是保鏢,一個是殺手,行事上本就南轅北轍、風格迥異,一路上打打鬧鬧,幹掉 Vladislav 派來的所有人。到了後來安全送 Darius 到目的地的時候,Darius 才告訴 Michael,當時害他落入差評的事件,就是他剛好看到要暗殺的對象,順手幹掉的。Michael 超不爽,就跟 Darius 鬧翻了。後來,Michael 靜下心來聽進 Darius 勸告,回頭到法庭上去幫忙 Darius 避免被 Vladislav 的人暗殺,兩人最終握手言和,平安落幕。

讓子彈飛

買官的故事,在第四台看了好幾次的片段,這次總算用 Netflix 看完。

馬邦德買了個官,在上任途中,被張麻子伏擊,為了保命,馬邦德謊稱馬邦德死了,自己是師爺,說張麻子可以頂替這位子上任。張麻子始終也沒說自己是張麻子,馬邦德也不知道這位是張麻子,于是乎,張麻子就這樣上任了。

到了縣城,張麻子發現張麻子只是個恍子,真正的權力是在黃四郎這個富翁身上。黃四郎、張麻子、馬邦德就在這樣的情況下,相互探底、勾心鬥角,想要探出彼此的底細。經過幾次衝突跟協調以後,黃四郎跟張麻子達成協議,黃四郎出錢讓縣長張麻子去打土匪張麻子,一行人浩浩蕩蕩出發,在半路上,縣長張麻子被假的土匪張麻子給伏擊了,打了一場以後,縣長張麻子逮住假土匪,問供以後,得知黃四郎真的就是背後的那隻手。縣長張麻子超不爽了,就回去縣城發錢、發彈藥,想要發起反抗。透過替身黃四郎,才真正的鼓動起縣城的人一同反抗,攻入黃四郎豪宅。最後黃四郎家財散盡,落入窘況,張麻子等人也散伙,不再當土匪。

Molly’s Game

半敘事、類似紀錄片的手法來拍 Molly 的故事,我還滿喜歡這樣的電影,第四台帶到時,會被帶進劇情裡。

Molly 從小時候起,父親就栽培她做一個滑雪選手,Molly 對父親的嚴苛不滿,去大學念法律以後就不再回家。她邊唸書邊打工,透過打工的事務所,她了解了地下賭盤的生態,從而發現這很好賺。後來打工的事務所解僱她,她就自己出來作地下賭盤。生意愈做愈大,看了很多名人、富翁的揮霍跟起落,在經歷過許多之後,她被起訴、扣押,她出了書,找律師 Charlie 幫忙。Charlie 本來是不想幫忙的,但因為女兒還有書裡講的事情實在是很吸引他,就決定幫了忙。Charlie 跟 Molly 幾次訪談與取得 Molly 第一手資料以後,了解了整個事情的經過,明白 Molly 是有在用心保護每個賭客的。最終 Molly 跟 Charlie 在法庭上取得了優勢,不被起訴。Molly 後來跟父親和解,不做賭盤了,回頭滑雪。

銀魂

看這部真人電影之前,建議先看過漫畫或動畫比較好,後面有些部份若沒看漫畫或動畫,真的比較沒辦法投入。人物的還原度我覺得蠻高的,蠻多地方很搞笑,但現在我卻想不起來故事在講什麼。

故事記得是在講妖刀紅櫻的事情,打造紅櫻的村田鐵矢的妹妹村田鐵子委託萬事屋阿銀去調查妖刀的事情,正巧街上也頻傳有人被殺掉的事件,阿銀就展開調查。後來發現妖刀跟之前昔日同窗還有鬼兵隊有關係,為了阻止他們,就打了起來,後面就不太記得了。

trivy-operator

Trivy 是 AquaSecurity 開發的工具,它可以掃描漏洞與有問題的設定檔,而且這工具有開源出來,真的是很佛心。

Trivy 有提供 CLI ,可以搭配 CI 作映像檔掃描,它也有提供 Operator ,可以安裝到 Kubernetes/OpenShift 裡,在佈署容器以後,他會自動的掃描,並產出漏洞報告。

安裝

安裝相當簡單,這邊使用 helm 來安裝,主要是因為這樣好管理。安裝步驟是參考這份文件:Helm – Trivy Operator

加入 helm repository

helm repo add aqua https://aquasecurity.github.io/helm-charts/
helm repo update

安裝

helm install trivy-operator aqua/trivy-operator \
  --namespace trivy-system \
  --create-namespace \
  --set="trivy.ignoreUnfixed=true" \
  --version 0.10.1

檢查

helm list -n trivy-system
kubectl get deployment -n trivy-system

應該會看到以下的輸出

$ helm list -n trivy-system
NAME                 NAMESPACE           REVISION    UPDATED                                 STATUS      CHART                       APP VERSION
trivy-operator   trivy-system    1           2021-01-27 20:09:53.158961 +0100 CET    deployed    trivy-operator-0.10.1   0.10.1

$ kubectl get deployment -n trivy-system
NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
trivy-operator   1/1     1            1           11m

使用

安裝完成以後,Trivy 會自動開始對所有 deployment/daemonset/pod 等的 image 去做掃描。

可以用以下指令去看掃描報告的列表,報告有兩種,一種是安全漏洞的 (vulnerabilityreports) ,一種是稽核的 (configauditreports)

kubectl get vulnerabilityreports -A -o wide
kubectl get configauditreports -A -o wide

後續佈署上去的,也會自動掃描。

要看報告內容,可以用 get/describe 來察看

kubectl get vulnerabilityreport replicaset-nginx-5fbc65fff-nginx -o yaml
kubectl describe configauditreport replicaset-nginx-5fbc65fff

報告預設是 24 小時後刪除,然後重新掃描,如果要調整,可以修改 trivy-operator 這個 deployment 裡的 OPERATOR_SCANNER_REPORT_TTL 環境變數。

後續

後續延伸的議題是 trivy 的掃描依據是什麼呢?若在封閉的環境下,能否使用?若可以使用,又該如何更新呢?

結論

感謝 AquaSecurity 提供的這個工具,讓容器平台能更安全。

kubectl scale

看完這篇 Using Kubectl Scale 所整理的。

基本使用方式

kubectl scale --replicas=3 deployment/nginx-hello

有條件的 scale,可以指定只有在已經有 n 個 pod 的情況下,才去 scale,例如

kubectl scale --current-replicas=3 --replicas=5 deployment/demo-deployment

這就是說,只有在目前已經有 3 個 pod 的情況下,才做 scale。這可以避免在資源已經不足的情況下還去做 scale,讓整個 k8s 叢集更加不穩定。

對多個資源做 scale

kubectl scale --replicas=5 deployment/app deployment/database

對 default 這個 namespace 裡所有可以 scale 的資源去做 scale

kubectl scale --all --replicas=5 --namespace=default deployment

也可以用 selector 去篩選,例如針對所有 app-name=demo-app 的 deployment 去做 scale

kubectl scale --replicas=5 --selector=app-name=demo-app deployment

要做 scale 還有其他方法:

  1. 更動 yaml 裡的 spec.replicas
  2. 使用 HPA (Horizontal Pod Autoscaling)

最佳實踐

  • 避免經常性的做 scale
  • scale 到 0 的時候,表示應用程式會停止服務
  • 確定選到正確的資源做 scale
  • 使用 --current-replicas 來避免意外。

yq

jq 這個工具可以用查詢語法去查詢 json 檔案裡的指定內容,很方便。基本上 yaml 可以直接轉換為 json ,因此若先把 yaml 轉換為 json,再用 jq 查詢也是可以的。

只是多了一道轉換,是稍嫌麻煩一點,那麼 yaml 檔案是不是也有類似的工具呢?

答案是有的,我找到兩個實作,一個是使用 python 實作,一個是使用 go 實作。

查詢語法跟 jq 很相似,這部份可以參考 jq https://stedolan.github.io/jq/

microk8s升級

使用過 OpenShift 跟 Kubernetes ,對於升級這件事情,就會比較小心。關於升級這件事情,可以參考 Kubernetes 升級 FAQ

microk8s 這部份蠻簡單的,官方的文件很清楚:Upgrading MicroK8s

單個節點

用 snap 更新就可以

sudo snap refresh microk8s --channel=1.21/stable

多個節點

Kubernetes 本身允許某些節點的版本較低 (service skew),這邊就一個節點、一個節點處理。

文件沒有提到順序,我的想法是先升級 master 節點,再升級 worker 節點,步驟都一樣。

先把 pod 都趕出來

microk8s kubectl drain <node> --ignore-daemonsets

用以下指令確認除了 daemonset 以外的 pod 都已經被終止。

microk8s kubectl get po -A -o wide

然後更新

sudo snap refresh microk8s --channel=1.21/stable

再用以下指令去確認 node 都升級完成

microk8s.kubectl get node

最後再將 node 設置為可以調度

microk8s kubectl uncordon <node>

這邊有篇實例可以參考:https://microk8s.io/docs/upgrade-cluster

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 這類的組合指令。貼上以後,下方就出現說明了,以後就不用一個一個查了。

電影流水帳(2022/09/16~2022/09/30)

Karen Gillan
Karen Gillan
  • The Gray Man (IMDB, Wikipedia),台譯:灰影人。
  • Thor: Love and Thunder (IMDB, Wikipedia),台譯:雷神索爾4-愛與雷霆

The Gray Man

CIA 找被定罪的殺人犯加入 sierra 計劃,遊走於灰色地帶,幫 CIA 處理一些不能在台面上公開說的事情,所以一開始主角 Court 就被遊說加入了這個計劃。

時間過很快,匆匆數年過去,主角 Court 已經是局裡一個頂尖的人物。這次他跟 Dani 一同出任務,這次任務 Court 並不完全是依照計劃殺掉目標,目標仍然死了,但 Court 從目標的口中取得了驚人的訊息。這驚人的訊息就是目標也加入了 CIA 的 sierra 計劃,為什麼會變成目標的原因是因為他知道了 CIA 的一些事情。Court 很驚訝,他從目標給他的隨身碟開始調查,從這隨身碟他得知了 CIA 內部有高層已經在做一些非法的勾當。Court 開始進行追查,但高層得知 Court 可能已經知道,也派出了遊走在灰色地帶的洛伊德追殺 Court。接下來的故事就是精彩刺激的動作橋段跟解謎,最後 Court 殺了洛伊德之後,跟 CIA 達成協議,救出了恩人的女兒。

Thor: Love and Thunder

後面幾部漫威的作品感覺有點力道不夠,又或者是我已經麻木,這集我覺得沒有第三集來的好看。

雷神索爾跟著星際特攻隊一起闖蕩,成功瘦身,然後他感覺到有某個世界有發出求救,就趕了過去。結果看到了碎裂的槌子跟另外一個雷神,那個雷神居然是珍,他驚訝了。打退敵人以後,了解了事情的原委,第一個是格爾因為喪女之痛跟得到死靈劍,所以開始殺神;第二個是珍取得碎裂的槌子後,得到了雷神的力量。索爾跟著珍回到地球,沒多久,格爾也趕到,但他打不贏眾人,就擄走阿斯嘉的孩子們。雷神索爾一行人去找眾神求救,豈料這些神見死不救,索爾他們只好改變計劃,改取得宙斯的閃電矛之後,自己去救人。

眾人找到格爾以後,才發現格爾要的是風暴毀滅者,他想打開通道去到永恆那邊,去消滅所有諸神。經過一番打鬥,索爾跟珍協力打斷了格爾的死靈劍,救出了阿斯嘉的孩子,但格爾仍打開了通往永恆之門,跟著去的雷神則是讓格爾明白,自己想要的是讓女兒復活。後來格爾讓女兒復活,請索爾好好照顧。珍則是因為癌症死去,到了英靈殿。

git-delta

git-delta 是帶有語法高亮的比對工具。

你知道的,git 預設是使用 diff,diff 沒有語法高亮,而且在比對的顯示需要一點時間習慣。

git-delta :delta

安裝

安裝蠻簡單的,提供各種作業系統的安裝方法:Installation – delta

以 Debian/Ubuntu 來說,從下載網頁下載 debian package以後,用 dpkg -i 安裝就可以。

wget https://github.com/dandavison/delta/releases/download/0.15.1/git-delta_0.15.1_amd64.deb
sudo dpkg -i git-delta_0.15.1_amd64.deb

設定

編輯 ~/.gitconfig ,加上以下設定

[core]
    pager = delta

[interactive]
    diffFilter = delta --color-only --features=interactive

[delta]
    features = decorations

[delta "interactive"]
    keep-plus-minus-markers = false

[delta "decorations"]
    commit-decoration-style = blue ol
    commit-style = raw
    file-style = omit
    hunk-header-decoration-style = blue box
    hunk-header-file-style = red
    hunk-header-line-number-style = "#067a00"
    hunk-header-style = file line-number syntax

使用

設定加好以後,在使用以下 git 指令時,就會看到比對了

  • git diff
  • git show
  • git log -p
  • git stash show -p
  • git reflog -p
  • git add -p

也可以直接拿來替代 diff 使用

delta a.txt b.txt

其他還有很多設定可以調整,可以依照自己的需求來調整:Usage – delta

結語

這種可以提升開發速度的工具,要列到建立開發環境的步驟裡,這樣在開發上可以提升效率。