There probably is a clever way that you could do it, but clever ways are easy to overstep, misconfigure and can be unreliable long-term.
Selfhosted
A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.
Rules:
-
Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.
-
No spam posting.
-
Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.
-
Don't duplicate the full text of your blog or github here. Just post the link for folks to click.
-
Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).
-
No trolling.
-
No low-effort posts. This is subjective and will largely be determined by the community member reports.
Resources:
- selfh.st Newsletter and index of selfhosted software and apps
- awesome-selfhosted software
- awesome-sysadmin resources
- Self-Hosted Podcast from Jupiter Broadcasting
Any issues on the community? Report it using the report flag.
Questions? DM the mods!
Acronyms, initialisms, abbreviations, contractions, and other phrases which expand to something larger, that I've seen in this thread:
| Fewer Letters | More Letters |
|---|---|
| IP | Internet Protocol |
| NAS | Network-Attached Storage |
| NFS | Network File System, a Unix-based file-sharing protocol known for performance and efficiency |
3 acronyms in this thread; the most compressed thread commented on today has 6 acronyms.
[Thread #1013 for this comm, first seen 21st Jan 2026, 05:05] [FAQ] [Full list] [Contact] [Source code]
holy shit this bot is a godsend for all those who don't know what half these acronyms are
Generally, accessing files both as a share and through an app is not well supported. If Immich doesn't support setting ownership, you might be able to patch it to add the feature.
Otherwise, I'd probably stick to the user-group model you have currently, and do the chown/chmod. Immich should be able to fully manage files as long as it has the group permissions necessary (g+rw).
You can configure samba to handle the permissions, but immich will need to connect to the user's share using their password (no ideal)
In smb.conf for each user's share
[user_media]
path = /path/to/user/media
valid users = username, immich
force user = username # This makes all files. appear as owned by the user
force group = media
create mask = 0660
directory mask = 0770
Alternatively you can use setguid with your media group:
chmod g+s /path/to/media/dirs
chown -R :media /path/to/media/dirs
chmod 2770 /path/to/media/dirs. (2 = SetGID, 770 = rwx for user and group)
- Any new file created by Immich will automatically belong to the media group
- The SetGID bit ensures files inherit the parent directory's group
- All users (including Immich) can read/write files as long as they're in the media group
- Individual users still "own" their files (UID stays as the original user when they upload via Samba)
Thanks, those are some tricks I didn't know about.
Preface
I got excited and didn't properly read your post before I wrote out a huge reply. I thought your problem was the per-user mapping to different locations on your NAS or to different shares, but its specifically file ownership.
whoops.
Leaving this here anyways, in case someone finds it helpful.
I kinda address file ownership at the end, but I don't think its really what you were looking for because it depends on every user having their own share.
Prerequisites
- you need to be using Storage Templates.
- you're willing to change the storage labels for all existing users
- if not, then change the storage labels for all users to something temporary and run the migration job before you begin. You'll change it back later.
- you're willing to switch to NFS instead of samba, where each user gets their own share.
- might not actually be necessary, but its what I use, so YMMV
Configuration
Volumes
In docker, you'll need to set up an external NFS volume for every user. I use portainer to manage my docker stacks, and its pretty easy to set up NFS volumes. I'm not sure how to do it with raw docker, but I dont think its complicated.
Compose
in your docker compose files, include something like this
services:
immich-server:
# ...
volumes:
- ${UPLOAD_LOCATION}:/data
- /etc/localtime:/etc/localtime:ro
- type: volume
source: user1-share
target: /data/library/user1-intended-storage-label
volume:
subpath: path/to/photos/in/user1/share
- type: volume
source: user2-share
target: /data/library/user2-intended-storage-label
volume:
subpath: path/to/photos/in/user2/share
# and so on for every user
# ...
volumes:
model-cache:
user1-share:
external: true
user2-share:
external: true
# and so on for every user
There are 3 things about this setup:
- it does not scale automatically. this is fine as long as you don't intend to be adding/removing users often.
- it is only saving the photos and videos. all thumbnails and transcoded videos, etc, get saved to
${UPLOAD_LOCATION}. For me this is fine, I dont want to pollute my NAS with a bunch of transient data, but if you want that info then for every user, in addition to thetarget: /data/library/user1target you'll also need atarget: /data/thumbs/user1,target: /data/encoded-video/user1, etc. - If there is already data at the
target, when you mount this volume it will mask that data. This is why it is important that no users exist with that storage label prior to this change, else that data will get hidden.
You may also want to add similar volumes for external libraries (I gave every user an external "archive" library for their old photos) like this:
- type: volume
source: user1-share
target: /unique/path/to/this/users/archive
volume:
subpath: path/to/photo/archive/on/share
and then you'll need to go and add that target as an external library in the admin setup.
and once immich allows sharing external libraries (or turning external libraries into sharable albums) I'll also include a volume for a shared archive.
Migrate
redeploy, change your user storage labels to match the targets, and run the migration job (or create the users with matching storage labels).
File ownership
I honestly don't think its important, as long as your user has full access to the files, its fine. But if you insist then you have a separate share for every user and set up the NFS server for that share to squash all to that share's user. Its a little less secure, but you'll only be allowing requests from that single IP, and there will only be a request from a single user from that server anyways.
Synology unfortunately doesn't support this, they only allow squashing to admin or guest (or disable squashing).
Squashing per-user is a blanket measure intended to default "public" users into a default access permission.
It is usable according to your layout, but this is effectively logical control preventing users from affecting files that aren't their own.
And if that is the goal, you might as well set this up as library access through immich.
Library access won't allow upload, this will.
My knowledge here isn't super deep, but it seems like you can do mapping per-share-per-ip, which means you can say "all file access coming from the immich host to this share will act as this user" which I think is fine if that share belongs to that user, and you don't have anything else coming from that host to that share which you want to act as a different user. Which are very big caveats.
Library access won't allow upload, this will.
This isn't right. https://docs.immich.app/administration/user-management/
I understand following op's pattern of wanting to set controls on underlying storage together with a share, but simply using immich's built-in storage labels is much easier.
Plus, each user can be assigned an NFS share to their individual files separate from immich's access requirements for storage. There is no need to make this a worse hodge-podge than op has already made it.
Sorry I misread when you said "library" for some reason I thought you meant "external library"
The problem that I'm trying to solve and I think OP is also trying to solve, is that they want the files to be on their NAS because it is high capacity, redundant, and backed up, but many users have access to the NAS, so they cannot rely on immich alone to provide access permissions, they need access permissions on the files themselves.
I solved this by having a separate share for every user, and then mounting that user's share on their library (storage label).
It sounds like OP wants a single share, so having correct file ownership is important to restrict file access to the correct users who are viewing the filesystem outside of immich.
Not sure what you mean by your last paragraph, how do you assign a share to individual files (assume you mean directories) outside of immich's need for storage?
Ah, gotchu. Carry on.
Thanks, yeah maybe not quite what I was asking for, but it does give me some stuff I didn't know about that I could consider.
I can only think of two ways if the top of my head:
- Immich runs as root and sets ownership (sounds unsafe)
- Immich is the owner of all the files, but each user has a specific group (bobs-photos) of which Immich and the user are members. Then use the setgid bit to set group ownership and make it g+rwx.
Both sound pretty brittle to me, though, and I haven't tested this specifically.
Set the Immich instance to run as the UID that owns the media files?
If I had one user that would work, but I have multiple.
You could run an individual Immich instance per user. Not sure if it's feasible or smart
Then I can't share images and albums through Immich :/