Installing Jellyfin on TrueNAS
Data and Permissions
Preparing Your Storage
A high-performance Jellyfin server starts with a smart storage layout. The goal is to separate the application's working data from your media files. Jellyfin constantly reads and writes small files like artwork, metadata, and user watch history. Placing this data on a fast drive, like an SSD, dramatically speeds up the user interface and makes browsing your library feel instant.
Your media files, on the other hand, are large and read sequentially during playback. They are perfectly happy on slower, high-capacity hard drives. This separation keeps the system organized and efficient.
On TrueNAS SCALE, the standard practice is to create a dedicated dataset for all your applications. Let's call it apps. This dataset should live on a pool comprised of SSDs if possible. Within your main media dataset (e.g., tank/media), you will have sub-folders for movies, tvshows, etc. The apps dataset should exist alongside this, not inside it (e.g., ssd-pool/apps). This structure isolates application data from your valuable media library.
Users and Least Privilege
Running applications as the root user is a major security risk. If a vulnerability were discovered in Jellyfin, an attacker could gain control over your entire TrueNAS system. To prevent this, we'll follow the by creating a dedicated, unprivileged user for our applications.
TrueNAS SCALE simplifies this by providing a built-in user named apps specifically for this purpose. This user has the User ID 568. While you could create your own jellyfin user, it's best practice to use the standard apps user, as it ensures compatibility with how TrueNAS manages applications. You don't need to create this user; it already exists. Our next task is to grant this specific user permission to read your media files.
Granting Access with ACLs
Now we need to connect the apps user to your media. We do this using an (ACL), which offers fine-grained control over file permissions. This is the most common point of failure when setting up Jellyfin, often resulting in an empty library because the server can't see the files.
Navigate to your main media dataset (e.g., tank/media), not the individual movies or tvshows folders. You'll want to edit its ACL. Here's the process:
- Select the Dataset: Go to the Storage > Datasets section and find your parent media dataset.
- Edit ACL: Click the three dots and choose 'Edit Permissions'.
- Add an Item: Click 'Add Item'. For 'Who', select 'User'. In the 'User' field that appears, type
apps. - Set Permissions: For 'Permissions', choose 'Read'. This allows Jellyfin to scan files and read metadata, but not modify or delete anything. 'Full Control' is an option if you want Jellyfin to manage
.nfofiles or delete media from its interface, but 'Read' is safer and sufficient for most. - Apply Recursively: This is the most critical step. Check the box for 'Apply permissions recursively'. This ensures the permissions are pushed down to every single file and folder within your media dataset. If you skip this, Jellyfin will only see the top-level folder, not the media inside.
Confirm your changes and save the ACL. TrueNAS will now apply these permissions to your entire library, which may take a few minutes if you have a large collection.
| Permission Level | Allows Jellyfin To... | Recommended For |
|---|---|---|
| Read | Scan files, read metadata, and stream content. | Standard, secure setup. Default choice. |
| Full Control | Do all of the above, plus delete media and write .nfo files. | Power users who want to manage their library from Jellyfin. |
By following these steps, you've created a secure and efficient foundation for Jellyfin. The application's data is isolated on fast storage, it runs as an unprivileged user, and it has exactly the permissions it needs to access your media—nothing more.
For optimal user interface performance in Jellyfin, where should the application's working data (metadata, artwork, etc.) be stored?
According to the principle of least privilege, which user account is recommended for running Jellyfin on TrueNAS SCALE?
