快轉到主要內容

如何用systemd-homed管理Linux使用者的家目錄

· 民國115年丙午年
·
切換繁體/簡體
分類 Linux系統 Linux使用技巧
標籤 Systemd LUKS
目錄

Systemd-homed是Systemd v245加入的一個功能,提供一種不依賴Linux主機的機制,來管理使用者帳號與家目錄的資料。正是所謂的重新定義Home管理流程。

解說systemd-home的優勢,並討論如何在Ubuntu使用這個功能。

1. systemd-homed優勢
#

傳統上Linux系統行之有年的方式,是透過useradd指令新增使用者,usermod調整群組,再搭配/etc/passwd管理密碼。

systemd-homed將這個過程大幅簡化。

systemd-homed與傳統Linux管理使用者的機制如下圖所示:

傳統的Linux家目錄,通常是建立使用者之後一併建立的。它建立後就會存在於檔案系統。換言之,如果把硬碟抽出來,是可以直接讀取使用者家目錄的檔案的。

systemd-homed將使用者家目錄變成映像檔管理,開機登入後才會動態掛載,登出後取消掛載,增加安全性。

systemd-homed還能將使用者的家目錄用LUKS / fscrypt / cifs / btrfs加密保護,外人即使拿到硬碟也難以讀取。

透過homectl指令,可以新增或刪除使用者,編輯使用者的基本資料,設定容量限制等等操作。

會跟systemd-homed一起用的,還有systemd-userdbd。這個服務負責紀錄使用者資料和群組資訊。systemd-userdbd裡面會以JSON欄位紀錄使用者的Email、姓名、年齡等資訊。部份欄位是一般使用者可以自己填寫的內容,其他欄位則是需要系統管理員權限才能修改。

順帶一提,如果你不想依賴sudo來提昇使用者權限,那麼可以使用systemd-run0當作替代工具。

Systemd-homed可以讓遷移多個使用者的家目錄變得更簡單。過去,如果我們要遷移家目錄到其他硬碟,都得手動用rsync複製到新的目的地,然後編輯/etc/fstab掛載,還要注意GID和UID的問題。要是把它都丟給systemd-homed管的話,就不用煩惱這些問題了。

2. 實際在Ubuntu使用systemd-homed
#

Systemd-homed這個工具存在很久了,但綜觀各大Linux發行版,到2026年只有SteamOS 3.0預設啟用systemd-homed管理使用者帳號的樣子。

使用者可以手動遷移家目錄給Systemd-homed管理。並且systemd-homed可以與現有的useradd所新增的家目錄使用者共存。

縱然systemd-homed的homectl --image-path指令擁有任意指定使用者家目錄掛載位置的能力,但是將現有的/home轉為systemd-homed的這個過程有點複雜,還可能因為操作失誤導致無法登入。因此,若要在現有的系統使用systemd-homed,還是新增一個使用者為好。


  1. 例如我是用Ubuntu 24.04,使用以下指令安裝systemd-homed與相關組件:
sudo apt install systemd-homed systemd-userdb

sudo systemctl enable --now systemd-homed

sudo systemctl enable --now systemd-userdb
  1. 使用以下指令新增一個使用者user1,指定家目錄映像檔位置(LUKS加密需以.home結尾),新增使用者群組到wheel允許使用sudo,指定使用bash shell,使用LUKS加密,設定磁碟空間20GB:
sudo homectl create user1 \
--image-path=/home/user1.home \
--member-of=wheel,video,audio \
--shell=/bin/bash \
--storage=luks \
--disk-size=20G
  1. 依照畫面指示設定該使用者的密碼。LUKS會使用該密碼加密。使用者資料會以數位簽章的方式保存在家目錄的~/.identity。公鑰與私鑰則保存在/var/lib/systemd/home/

  2. 透過ls -al /home/user1/指令可以得知,在尚未登入該使用者前,/home/user1/的內容是空的,此時的狀態是inactive。需要使用su user1切換使用者,systemd-homed才會掛載家目錄內容,此時可以用lsblk確認掛載點。該名使用者的狀態變成active。在Linux系統進入suspend的時候,使用者家目錄會自動維持加密狀態。

  3. 顯示管理器如GDM應該會自動讀到透過systemd-homed所新增的使用者。至於SDDM的話得手動編輯/etc/sddm.conf.d/uid.conf提高UID上限才會顯示。

  4. 之後該名使用者資料可以使用homectluserdbctl操作。

  5. 例如:sudo homectl inspect user1檢視使用者資料與帳號登入紀錄。

# 範例輸出
   User name: user1
       State: active
 Disposition: regular
 Last Change: Thu 2026-04-02 17:55:25 CST
 Last Passw.: Thu 2026-04-02 17:35:03 CST
    Login OK: yes
 Password OK: yes
         UID: 60486
         GID: 60486 (user1)
 Aux. Groups: audio
              video
              wheel
   Directory: / (fallback)
   Blob Dir.: /var/cache/systemd/home/user1
     Storage: luks (strong encryption)
  Image Path: /home/user1.home
   Removable: no
       Shell: /usr/bin/systemd-home-fallback-shell (fallback)
LUKS Discard: online=no offline=yes
   LUKS UUID: afc2bbbe-0022-425a-8977-99afcc8cd287
   Part UUID: f5d33cc1-a707-4bca-95ee-2e2f7c0dde8d
     FS UUID: 78c1acb9-ac0a-4166-9654-b1af159e5975
 File System: btrfs
 LUKS Cipher: aes
 Cipher Mode: xts-plain64
  Volume Key: 256bit
 Mount Flags: nosuid nodev exec
   Disk Size: 568M
  Disk Floor: 256M
Disk Ceiling: 258.7G
  Good Auth.: 4
   Last Good: Thu 2026-04-02 19:02:58 CST
   Bad Auth.: 3
    Last Bad: Thu 2026-04-02 19:02:56 CST
    Next Try: anytime
 Auth. Limit: 30 attempts per 1min
 Passwd Pol.: no
   Rebalance: off
   Passwords: 1
  Local Sig.: yes
     Service: io.systemd.Home
 Self Modify: realName
              emailAddress
              iconName
              location
              shell
              umask
              environment
              timeZone
              preferredLanguage
              additionalLanguages
              preferredSessionLauncher
              preferredSessionType
              pkcs11TokenUri
              fido2HmacCredential
              recoveryKeyType
              lastChangeUSec
              lastPasswordChangeUSec
      (Blobs) avatar
              login-background
 (Privileged) passwordHint
              hashedPassword
              pkcs11EncryptedKey
              fido2HmacSalt
              recoveryKey
              sshAuthorizedKeys
  1. 透過sudo homectl update user1 --disk-size=60G修改使用者的屬性,像這裡是修改所分配的磁碟空間。

  2. 如果使用其他具有sudo權限的使用者登入,可以使用sudo homectl deactivate user1暫時取消該名使用者目錄的掛載。

3. 備份與還原systemd-homed資料
#

  1. 因為使用者家目錄的資料是以一個Btrfs映像檔儲存,並使用金鑰加密,所以只要備份這兩個檔案就可以了。

  2. 以本文的例子來說,首先複製/home/user1.home到他處。

  3. 再複製/var/lib/systemd/home/下的檔案。

  4. 在另外一台電腦,存入以上檔案到對應的位置,然後重新啟動systemd-homed服務:

sudo systemctl restart systemd-homed

註:若其他電腦已經有使用systemd-homed建立使用者,那麼必須針對個別使用者,手動匯出.json檔案再匯入:

# 電腦A
sudo homectl inspect user1 --export-format=minimal -j >> user1.json

# 電腦B
sudo homectl create --identity=./user1.json user1

參考
#

相關文章


此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

(留言板載入中)這是Giscus留言板,需要Github帳號才能留言。支援Markdown語法,若要上傳圖片請善用外部圖床。您的留言會在Github Discussions向所有人公開。

Click here to edit your comments.

(留言板載入中)這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用外部圖床網站。