Stratis 加密入門
Stratis 在其 官方網站 上被描述為「易於使用的 Linux 本地存儲管理」。請看這個 短視頻,快速演示基礎知識。該視頻是在 Red Hat Enterprise Linux 8 系統上錄製的。視頻中顯示的概念也適用於 Fedora 中的 Stratis。
Stratis 2.1 版本引入了對加密的支持。繼續閱讀以了解如何在 Stratis 中開始加密。
先決條件
加密需要 Stratis 2.1 或更高版本。這篇文章中的例子使用的是 Fedora 33 的預發布版本。Stratis 2.1 將用在 Fedora 33 的最終版本中。
你還需要至少一個可用的塊設備來創建一個加密池。下面的例子是在 KVM 虛擬機上完成的,虛擬磁碟驅動器為 5GB(/dev/vdb
)。
在內核密鑰環中創建一個密鑰
Linux 內核 密鑰環 用於存儲加密密鑰。關於內核密鑰環的更多信息,請參考 keyrings
手冊頁(man keyrings
)。
使用 stratis key set
命令在內核鑰匙圈中設置密鑰。你必須指定從哪裡讀取密鑰。要從標準輸入中讀取密鑰,使用 -capture-key
選項。要從文件中讀取密鑰,使用 -keyfile-path <file>
選項。最後一個參數是一個密鑰描述。它將稍後你創建加密的 Stratis 池時使用。
例如,要創建一個描述為 pool1key
的密鑰,並從標準輸入中讀取密鑰,可以輸入:
# stratis key set --capture-key pool1key
Enter desired key data followed by the return key:
該命令提示我們輸入密鑰數據/密碼,然後密鑰就創建在內核密鑰環中了。
要驗證密鑰是否已被創建,運行 stratis key list
:
# stratis key list
Key Description
pool1key
這將驗證是否創建了 pool1key
。請注意,這些密鑰不是持久的。如果主機重啟,在訪問加密的 Stratis 池之前,需要再次提供密鑰(此過程將在後面介紹)。
如果你有多個加密池,它們可以有一個單獨的密鑰,也可以共享同一個密鑰。
也可以使用以下 keyctl
命令查看密鑰:
# keyctl get_persistent @s
318044983
# keyctl show
Session Keyring
701701270 --alswrv 0 0 keyring: _ses
649111286 --alswrv 0 65534 _ keyring: _uid.0
318044983 ---lswrv 0 65534 _ keyring: _persistent.0
1051260141 --alswrv 0 0 _ user: stratis-1-key-pool1key
創建加密的 Stratis 池
現在已經為 Stratis 創建了一個密鑰,下一步是創建加密的 Stratis 池。加密池只能在創建池時進行。目前不可能對現有的池進行加密。
使用 stratis pool create
命令創建一個池。添加 -key-desc
和你在上一步提供的密鑰描述(pool1key
)。這將向 Stratis 發出信號,池應該使用提供的密鑰進行加密。下面的例子是在 /dev/vdb
上創建 Stratis 池,並將其命名為 pool1
。確保在你的系統中指定一個空的/可用的設備。
# stratis pool create --key-desc pool1key pool1 /dev/vdb
你可以使用 stratis pool list
命令驗證該池是否已經創建:
# stratis pool list
Name Total Physical Properties
pool1 4.98 GiB / 37.63 MiB / 4.95 GiB ~Ca, Cr
在上面顯示的示例輸出中,~Ca
表示禁用了緩存(~
否定了該屬性)。Cr
表示啟用了加密。請注意,緩存和加密是相互排斥的。這兩個功能不能同時啟用。
接下來,創建一個文件系統。下面的例子演示了創建一個名為 filesystem1
的文件系統,將其掛載在 /filesystem1
掛載點上,並在新文件系統中創建一個測試文件:
# stratis filesystem create pool1 filesystem1
# mkdir /filesystem1
# mount /stratis/pool1/filesystem1 /filesystem1
# cd /filesystem1
# echo "this is a test file" > testfile
重啟後訪問加密池
當重新啟動時,你會發現 Stratis 不再顯示你的加密池或它的塊設備:
# stratis pool list
Name Total Physical Properties
# stratis blockdev list
Pool Name Device Node Physical Size Tier
要訪問加密池,首先要用之前使用的相同的密鑰描述和密鑰數據/口令重新創建密鑰:
# stratis key set --capture-key pool1key
Enter desired key data followed by the return key:
接下來,運行 stratis pool unlock
命令,並驗證現在可以看到池和它的塊設備:
# stratis pool unlock
# stratis pool list
Name Total Physical Properties
pool1 4.98 GiB / 583.65 MiB / 4.41 GiB ~Ca, Cr
# stratis blockdev list
Pool Name Device Node Physical Size Tier
pool1 /dev/dm-2 4.98 GiB Data
接下來,掛載文件系統並驗證是否可以訪問之前創建的測試文件:
# mount /stratis/pool1/filesystem1 /filesystem1/
# cat /filesystem1/testfile
this is a test file
使用 systemd 單元文件在啟動時自動解鎖 Stratis 池
可以在啟動時自動解鎖 Stratis 池,無需手動干預。但是,必須有一個包含密鑰的文件。在某些環境下,將密鑰存儲在文件中可能會有安全問題。
下圖所示的 systemd 單元文件提供了一個簡單的方法來在啟動時解鎖 Stratis 池並掛載文件系統。歡迎提供更好的/替代方法的反饋。你可以在文章末尾的評論區提供建議。
首先用下面的命令創建你的密鑰文件。確保用之前輸入的相同的密鑰數據/密碼來代替passphrase
。
# echo -n passphrase > /root/pool1key
確保該文件只能由 root 讀取:
# chmod 400 /root/pool1key
# chown root:root /root/pool1key
在 /etc/systemd/system/stratis-filesystem1.service
創建包含以下內容的 systemd 單元文件:
[Unit]
Description = stratis mount pool1 filesystem1 file system
After = stratisd.service
[Service]
ExecStartPre=sleep 2
ExecStartPre=stratis key set --keyfile-path /root/pool1key pool1key
ExecStartPre=stratis pool unlock
ExecStartPre=sleep 3
ExecStart=mount /stratis/pool1/filesystem1 /filesystem1
RemainAfterExit=yes
[Install]
WantedBy = multi-user.target
接下來,啟用服務,使其在啟動時運行:
# systemctl enable stratis-filesystem1.service
現在重新啟動並驗證 Stratis 池是否已自動解鎖,其文件系統是否已掛載。
結語
在今天的環境中,加密是很多人和組織的必修課。本篇文章演示了如何在 Stratis 2.1 中啟用加密功能。
via: https://fedoramagazine.org/getting-started-with-stratis-encryption/
作者:briansmith 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive