Auto-mounting network shares per user
I have a server that has a number of CIFS shares that need to be accessed on a per-user basis. For example, I have a Music share which I have full access to, but my wife has read-only access.
When either myself or my wife log into our Ubuntu 11.04 laptop I would like these shares to be automatically mounted per user. Now I understand that if I mount as -t cifs
without specifying a user then it will use the USER
environment variable. However, I also need to specify a password, so how can I do that when each user has a different password?
I think my questions are:
- Is there a way for me to have a per-user /etc/fstab?
- If not, is there a way to specify that a mount is only applicable to a certain user?
- Also, the share password is always the same as the local password. Is there a way to specify that this password should just pass through from the client to server rather than having to specify it in a credentials file somewhere?
Or maybe I'm missing something and there's a completely different solution. Can anyone help?
There are probably several solutions possible; here's is how I would do it. (Disclaimer: untested!)
The mount.cifs
command can read the username and password from the USER
and
PASSWD
environmental variables, but it can also read them from a
"credentials" file, that you specify on the command line with the -o
cred=/path/to/credentials/file
option.
The credentials-file approach is IMHO simpler to implement.
-
Create a text file
$HOME/.Music.cred
to store the credentials; the file should have this format:user=your-username-on-cifs-server password=the-password domain=leave-this-blank-unless-really-using-windows-domains
-
Protect the
$HOME/.Music.cred
file; run this command in a terminal:chmod go-rw $HOME/.Music.cred
-
Now you should be able to mount the CIFS share
//server/music
on directoryMyMusicFolder
using this command:sudo mount -t cifs -o cred=$HOME/.Music.cred //server/music $HOME/MyMusicFolder
You can enable each user to run this through passwordless sudo by adding a line to
/etc/sudoers
: (one line per user)# replace every occurence of `user` with the actual account name user ALL= NOPASSWD: /bin/mount -t cifs -o cred=/home/user/.Music.cred //server/music /home/user/MyMusicFolder
-
If the command from step 3. worked correctly, you can make it automatic in several ways:
- save it into a shell script into your home directory and make that script an auto-started application (you have to do this for every user that needs to mount CIFS shares);
- save it into a shell script
/etc/X11/Xsession.d/30mount-cifs-shares
so that it will work for any user.
Alternatively, you can replace steps 3. and 4. above with the use of pam-mount:
install package libpam-mount
-
configure
/etc/security/pam_mount.conf.xml
with:<debug enable="1" /> <volume server="server" path="music" mountpoint="~/MyMusicFolder" options="cred=/home/%(USER)/.Music.cred" />
References:
- the mount.cifs man page
- the pam_mount.conf man page