In this lesson, you will learn how to use systemd-homed to create portable user home directories that stay encrypted and move seamlessly between different Linux systems.
The Problem with Traditional Home Directories
Traditionally, your user information lives in /etc/passwd and your home directory is just a folder at /home/username. If you move to a new machine, you have to manually sync your files and ensure your User ID (UID) matches up, otherwise, you run into permission errors. Furthermore, your data is only as secure as the system-wide disk encryption.
The systemd-homed Solution
systemd-homed changes this by encapsulating the user account and their home directory into a single, encrypted file (often a .home file or a dedicated partition). Because the home directory is self-contained and encrypted, you can move it from one computer to another like a USB drive. When you plug it into a new machine running systemd-homed, the system recognizes the user, mounts the encrypted volume, and logs you in without needing a pre-existing local account entry in /etc/passwd.
How it Works
Instead of static files, systemd-homed manages users dynamically. To create a portable user, you use the homectl command. For example, to create a user named student with a portable home directory:
sudo homectl create student --storage=luks --member-of=users
This command sets up a LUKS-encrypted container. The user's settings, password, and files are all stored within that container. When you transfer this file to another machine, you simply "activate" it:
sudo homectl activate student
The system will prompt you for the user's password, decrypt the container on the fly, and mount it to /home/student. Once you log out, the directory is automatically unmounted and encrypted again, protecting your data even if the physical disk is removed or the computer is stolen. This removes the administrative burden of syncing IDs across servers and ensures your personal environment is truly portable.
Key Takeaway: systemd-homed transforms user accounts from static entries in system files into portable, self-contained, and encrypted bundles that travel with the user.