Category Archives: IT: Security

在已執行的 Docker 容器服務中獲得 Shell

獲得 Shell 後可以對容器內容做一些修改及監控,或是進一步了解作者在 Image 中包了哪些東西,Docker 容器服務若已經啟動,在不影響服務正常運行的情況下想要獲得 Shell 的話,最方便的應該就是容器開發模式中使用 nsenter 的方式。網路上眾多安裝 nsenter 方式以這個命令最簡便,不需額外套件與編譯直接安裝:

安裝方法

docker run -v /usr/local/bin:/target jpetazzo/nsenter

其 Github 的項目地址在:https://github.com/jpetazzo/nsenter 有興趣的朋友可以多多關注這個項目。

使用方式

先取得容器的 PID

PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)

根據 PID 獲得 Shell

$ sudo nsenter --target $PID --mount --uts --ipc --net --pid

簡化為 Shell Script <enter-cnt.sh>:

#!/bin/bash
echo "Looking PID for $1: "
PID=$(docker inspect --format {{.State.Pid}} $1)
echo $PID
sudo nsenter --target $PID --mount --uts --ipc --net --pid
ss_2016-02-28_21-08-56

網路上也有網友提供一個較複雜的 Shell 腳本 (轉自 http://www.hjue.me/post/docker-nsenter) 需要的朋友也可以參考:

#!/bin/sh
if [ -e $(dirname "$0")/nsenter ]; then
# with boot2docker, nsenter is not in the PATH but it is in the same folder
NSENTER=$(dirname "$0")/nsenter
else
NSENTER=nsenter
fi
if [ -z "$1" ]; then
echo "Usage: `basename "$0"` CONTAINER [COMMAND [ARG]...]"
echo ""
echo "Enters the Docker CONTAINER and executes the specified COMMAND."
echo "If COMMAND is not specified, runs an interactive shell in CONTAINER."
else
PID=$(docker inspect --format "{{.State.Pid}}" "$1")
if [ -z "$PID" ]; then
exit 1
fi
shift
OPTS="--target $PID --mount --uts --ipc --net --pid --"
if [ -z "$1" ]; then
# No command given.
# Use su to clear all host environment variables except for TERM,
# initialize the environment variables HOME, SHELL, USER, LOGNAME, PATH,
# and start a login shell.
"$NSENTER" $OPTS su - root
else
# Use env to clear all host environment variables.
"$NSENTER" $OPTS env --ignore-environment -- "$@"
fi
fi

我的密碼管理

 

雖然密碼管理是個老題目了,不過還是來碎碎念幾句我是怎麼管理密碼的。

一堆的拖庫事件,所有人都擔心自己的密碼被盜用了,每每碰到這樣的事情就必須要登入各大網站改一輪密碼,原因就是因為大部份的人用少數幾個密碼走天下。翻翻以前的密碼管理相關文章也是這麼建議的:把密碼分幾個級別,不同級別用不同的密碼,沒有跟金錢相關的一組,跟金錢相關的就用另一組,這在以前的網路環境來說也許是對的,但現在需要做些改變。

雖然我本身強推使用 OpenID 來作驗證,不過太多的網站都有私有的註冊系統,因此密碼管理目前還是必須的。建議較小的網站可以在設計時考慮使用 OpenID 避免自行管理密碼,這樣可以在安全上少承擔一些風險,因為它可以有免註冊或只讓新進用戶填寫較少資訊就可以使用的好處,也許能因此帶來更多願意體驗的新用戶。

看看我們對密碼的要求:

  • 強密碼,不是字典可以輕易猜出來的。
  • 每個網站都用不同的密碼,避免被撞庫的問題。
  • 方便輸入及查閱。

我個人的管理方式是使用 Keepass (Windows), Mac 上有 KeePassX, 而 Android 上則有 KeePassDroid,然後配置 Dropbox 來管理同步的問題,這還讓密碼多了一個雲端備份的好處 (也許在某些同學眼中是缺點)。原則上它使用一個 Master Password, 當然如果你需要安全性更高還可以設定 USB Key 才能開啓,不過這就不方便同步到手機免開電腦使用了。

在註冊新網站的時候使用 Keepass 的 Generate Password 的功能產生一組隨機的密碼,然後可以設定一個 Expire Date, 這樣在設定的期限到達後,這個程式會提醒你變更密碼。登入網站的時候打開它,直接把密碼複製貼上 (這也是一種安全的輸入密碼方式),碰到沒有辦法貼上的密碼,則可以讓密碼可視,然後再手動輸入。

在沒有電腦的情況下,密碼檔案可以同步到手機,因此直接在手機上開啓 KeePassDroid 使用原來的 Master Key, 一樣可以查看密碼及使用密碼管理。並且 Dropbox 的多向同步還可以把新增或者是變更過的密碼同步到其他設備中,方便你的下次使用。

自己都記不住的密碼有好處,當然也有缺點,方便就意味著不安全,但這些安全工具就是盡量做到既安全又方便,所以怎麼用就看自己怎麼權衡了。

 

2017/2/23 補充

VOX 製作的三分鐘簡短動畫,告訴你為什麼用密碼管理軟體比用腦袋記密碼更好。

 

Copyright © 2017. Powered by WordPress & Romangie Theme.