[systemd-devel] Mounting cifs per-user

Lennart Poettering lennart at poettering.net
Tue Feb 4 11:59:02 PST 2014

On Sat, 01.02.14 23:47, Dan Tihelka (dtihelka at gmail.com) wrote:

> Hello all,
> I have rather generic idea/question which probably not solvable yet.
> I, as an ordinary user, would like to mount cifs share (but it can generally 
> be extended to any other "dynamic" media) on-demand to a given path 
> (preferably /run/mount/UID/mycifs/).
> Currently, mount -t cifs ... must be called as root, although I can specify 
> uid=,gid= to set the ownership of the mountpoint. Therefore, the 
> mount+automount units must belong to the system instance, not to the user 
> instance of systemd. Is it correct?

If cifs mounts require privs then yes, this must be done by the system
systemd instance, not the user one.

> I am able to create a moutnt mnt-storage_user.mount
> 	[Unit]
> 	Wants=network.target
> 	After=network.target
> 	[Mount]
> 	What=//addr/user
> 	Where=/mnt/storage_user
> 	Type=cifs
> and mnt-shared.automount:
> 	[Install]
> 	WantedBy=multi-user.target
> configs.

The place for remot mounts is remote-fs.target, not multi-user.target.

> Now, I would like to make the mount unit generic, something like:
> 	[Mount]
> 	What=//addr/%u
> 	Where=/run/mount/%U/storage_%u

%u/%U are resolved to the user specified in User=. However, you cannot
use it to do NSS lookups in the system instance of systemd, which means
%u only works if you specify User= with a user name, while %U will only
work if you specifiy User= numerically. (Well, with one addition, the
translation of 0 to root and back will always work, as special case).

I figure the best approach for such a generic thing would be to use the
normal autofs daemon, which can do establish generic mounts for this,
per user.


Lennart Poettering, Red Hat

More information about the systemd-devel mailing list