巧用 ps 找 CPU 用量最高跟記憶體用量最高的程序

因為還蠻常用的,就紀錄起來,之後就直接複製了。

ps aux --sort -%cpu | head -n 10
ps aux --sort -%mem | head -n 10
ps -eo pid,ppid,cmd,comm,%mem,%cpu --sort=-%mem | head -10

這邊要注意的是,MacOS 的 ps 跟 Linux 的 ps 不一樣,沒有 –sort 這個參數,MacOS 是用 -r 跟 -m 來做排序。

ps aux -r | head -n 10
ps aux -m | head -n 10

參考資料

從 proc 找 IP

一般來說,在安裝完 Linux 都會有 ifconfig 或是 ip 指令可以查詢主機的 IP。在容器環境裡,會因為要節省容器映像的空間,就不裝這些指令了。那要怎麼查 IP 呢? 可以從 /proc 來查詢。

cat /proc/net/fib_trie
cat /proc/net/fib_trie | grep "|--"   | egrep -v "0.0.0.0| 127."

就這樣,蠻簡單的。

參考資料

timemachineeditor

事情是在去年發生的,那時是在家辦公,卻發現 MBP 慢的要命,網速也變慢,後來查了一下,才發現是 MBP 一直在那邊做時光機備份。

這下就麻煩了,改為手動,又怕忘記,用自動又變慢,這可讓我好生困擾。請 Google 大神幫忙以後,找到有人推薦 timemachineeditor 這個工具。timemachineeditor 這個工具可以設定在不使用電腦的時間去做備份,這樣就解決我的問題了。

我是用 homebrew 安裝的

brew install --cask timemachineeditor

設定畫面很簡單,一看就會用了,這裡就不多說。

電影流水帳(2022/12/01~2022/12/31)

Halle Berry & Pedro Pascal

這次拖了很久,主要是時間不夠,假日的時間有蠻多都拿來做公司的事情,已經有點失去平衡。

Enola Holmes 2

Enola 在上集之後,開了店,接收委託,但生意很差,就在決定要收攤不做的時候,有一位在火柴工廠工作的女孩 Bessie 前來委託,說他的女伴 Sarah 不見了,想請 Enola 尋找 Sarah。

Enola 就開始進行調查,調查到後來,這件調查居然跟哥哥 Sherlock 的調查也有關係,就攪到一起了。

整件事情大略是這樣子的,火柴工廠使用便宜但有毒的原料來製造火柴,藉此獲得暴利,同時也遮掩有女工因慢性中毒而死去的事情。Sarah 跟她的男友 William 得知了火柴工廠的祕密,想要揭發這個祕密。William 是這家工廠老闆的兒子,陷入一個糾結、複雜的狀況。後來 Sarah 就只能躲起來,這也就是 Bessie 以為她消失的原因。Sherlock 調查到這工廠的金流跟 Moriarty 有關係,也循線調查到這邊。最後就是揭發、解決了整件事情

整體來說,延續了上集的節奏跟風格,表現持平。這集有交代 Enola 的心情轉折,創業不順利,不敢面對自己喜歡 Tewkesbury 的事情,後半段也被捕,然後被媽媽以其媽媽的好友救出,真的是很多事情。看到這邊,我想應該還會有第三集吧,當作是一個結束。

我吃了那男孩一整年的早餐

之前是在某篇文章看到這故事,後來才知道有翻拍成電影,故事蠻有趣的。

有個男孩跟一個女孩告白失敗,後來就一直請女孩吃早餐。女孩不領情,本來想把早餐丟掉,她的好友覺得浪費,再加上當時缺餐費,就自告奮勇吃掉。這一吃,就吃了一整年,後來事情講開,兩人就認識了。之後才知道男孩其實早就知道早餐是被另外一個人吃掉,所以故意一直送早餐,想透過這機會能認識。

總之,緣份就是這樣,很莫名其妙的發生。

Moonfall

幾天前在 HBO 看了 Moonfall,這是一部特效片,感情鋪陳不夠,有些場景想帶這部份就顯得很薄弱。不過我覺得故事設定蠻有趣的,說月球是個巨型空心的結構,因為有狀況,導致裡面的核心無法提供動力讓月球維持在軌道上,就慢慢愈來愈靠近地球。那月球怎麼會是空心的?原因是遠古的外星人打造用來延續生命的。遠古的外星人在文明發展到極致以後,研發了機器人,但這些機器人卻變了,導致整個文明毀滅。為了宇宙的生命延續,文明的殘存者挖空了小行星,把電腦植入,讓這些小行星到其他星系去試著延續其他的高智慧生命,月球就是其中一個小行星。這些機器人在摧毀整個文明以後,緊追在後,在銀河系找到月球。

故事基本就是圍繞著月球這件事情,有一方的主張要把月球給炸了,另外一方則是覺得應該要掌握這一點點的可能性,去探究月球。反正後來就是上了月球,發現地球內部真的是個空心結構,也了解了來龍去脈,於是協助外星人的電腦,打趴了這些試圖摧毀月球的機器人,最後地球得救,月球也留下,世界和平。

kubeaudit

網址:https://github.com/Shopify/kubeaudit

可以用來稽核 kubernetes 叢集的工具,檢查的項目有

  • 確保容器以非 root 身份執行
  • 確保容器的根目錄是唯讀
  • 移除有危險的 capability
  • 不執行 privileged
  • 陸續增加中

安裝

直接從 github release 下載二進位檔案,然後放到 /usr/local/bin 就可以了。

使用

有三種模式

  • Manifest mode
  • Local mode
  • Cluster mode

Manifest mode

Manifest mode 就是掃檔案,意思是如果你有寫好的 yaml 檔案,kubeaudit 可以直接掃 yaml 檔案

kubeaudit all -f "/path/to/manifest.yml"

掃完會輸出掃描結果。

需要修正的話,可以用 autofix 來自動修正。

kubeaudit autofix -f "/path/to/manifest.yml"

怕改爛的話,可以輸出到另外一個檔案

kubeaudit autofix -f "/path/to/manifest.yml" -o "/path/to/fixed"

Cluster mode

Cluster mode 就是掃描當前的 Kubernetes 叢集,不要加上 -f 參數就可以

kubeaudit all

Local mode

Local mode 是在你管理多座 kubernetes 叢集時,可以指定 kubeconfig 跟 context,例如

kubeaudit all --kubeconfig "/path/to/config" --context my_cluster

設定

大部份掃描工具都會提供設定,讓開發者可以決定要掃描哪些項目,kubeaudit 也有,格式是 yaml 。

enabledAuditors:
  # Auditors are enabled by default if they are not explicitly set to "false"
  apparmor: false
  asat: false
  capabilities: true
  deprecatedapis: true
  hostns: true
  image: true
  limits: true
  mounts: true
  netpols: true
  nonroot: true
  privesc: true
  privileged: true
  rootfs: true
  seccomp: true
auditors:
  capabilities:
    # add capabilities needed to the add list, so kubeaudit won't report errors
    allowAddList: ['AUDIT_WRITE', 'CHOWN']
  deprecatedapis:
    # If no versions are specified and the'deprecatedapis' auditor is enabled, WARN
    # results will be genereted for the resources defined with a deprecated API.
    currentVersion: '1.22'
    targetedVersion: '1.25'
  image:
    # If no image is specified and the 'image' auditor is enabled, WARN results
    # will be generated for containers which use an image without a tag
    image: 'myimage:mytag'
  limits:
    # If no limits are specified and the 'limits' auditor is enabled, WARN results
    # will be generated for containers which have no cpu or memory limits specified
    cpu: '750m'
    memory: '500m'
  • enabledAuditors 是要啟用的稽核項目
  • auditors 下方則是每個稽核項目的設定

總結

透過使用 kubeaudit 這個工具,可以稽核 kubernetes 叢集,避免放上有危險的設定,是很實用的工具。

microk8s使用自建的mirror registry

文件在這邊:How to work with a private registry

設定方法很簡單,設定檔案位置在 /var/snap/microk8s/current/args/certs.d/ ,每個 registry server 都有一個對應的目錄,裏面會有 hosts.toml 。例如 docker.io ,目錄就是

/var/snap/microk8s/current/args/certs.d/docker.io ,hosts.toml 的內容是
server = "https://docker.io"

[host."https://registry-1.docker.io"]
  capabilities = ["pull", "resolve"]

要改為 mirror registry,就變為

server = "https://docker.io"

[host."http://your_registry_server/v2"]
  capabilities = ["pull", "resolve"]
  override_path = true

關鍵在於 [host.””] 裡的 server 位置還有 override_path = true

修改完成以後,重新啟動 microk8s 即可。

sudo snap restart microk8s

基本設定方法就是這樣。之前在看的時候因為眼花,一直想說為什麼會有 “‘ | sudo tee -a /var/snap/microk8s/current/args/certs.d/k8s.gcr.io/hosts.toml” 這一段,後來仔細看,才知道文件裡貼的是一個指令。

以後改為這樣,就可以不用去外部拉取,加快拉取 image 速度了。

ubuntu的apt與gpg

最近因為在 Ubuntu 更新的時候,老是出現 gpg pub key 錯誤,有問題的套件庫是 hashicorp 跟 yarn 的套件庫,今天終於下定決心處理。

第一個找到的是這篇:How to configure HashiCorp repository

處理方法是這樣的,先下載 gpg key,然後用 sudo gpg 匯入

wget --quiet --output-document - https://apt.releases.hashicorp.com/gpg | \
  sudo gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/hashicorp-archive-keyring.gpg --import

然後檢查 /usr/share/keyrings/hashicorp-archive-keyring.gpg

ls -l /usr/share/keyrings/hashicorp-archive-keyring.gpg

permission 結果應該要是 644 。

接著檢查 source list 檔案,裏面會有 signed-by 的字串

deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com jammy main

基本上這樣就解決了,yarn 的處理方式也一樣。

wget --quiet --output-document - https://dl.yarnpkg.com/debian/pubkey.gpg | sudo gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/yarnkey.gpg --import

只是這邊做完,還是有問題,後來才靈機一動想到要檢查 /usr/share/keyrings/yarnkey.gpg 的 permission,發現是 600,用 chmod 改為 644 以後,apt update 就沒問題了。

[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 提供的這個工具,讓容器平台能更安全。