MountWindowsSharesPermanently

Revision 28 as of 2008-01-07 14:23:08

Clear message

This will help you mounting smbfs shares permanently. These can be shares on a Windows computer or on a Linux/UNIX server running Samba.

Is it true that smbfs is depricated? According to [http://joey.ubuntu-rocks.org/blog/2007/04/25/resolution-to-mounting-samba-shares-dont-use-smbfs/ a blog post by Joey Stanford] we need to use CIFS instead of smbfs!

It [https://bugzilla.samba.org/show_bug.cgi?id=1920#c0 appears to be true]. I just fought through [http://ubuntuforums.org/showthread.php?p=2911178 several strange problems] after following this guide, only to have everything solved by using CIFS instead.

I can confirm the above as well. I have changed "smbfs" to "cifs" where appropriate in this guide.

Samba File System installation

sudo apt-get install smbfs

Mounting unprotected (guest) network folders

Assumed that:

  • Network connections have been configured properly.
  • The Windows computer name is servername, this can be either an IP address or an assigned name.

  • The name of the share is sharename.

  • You want to mount the share in a folder mountname.

First, let's create the mount folder. You will need a separate folder for each mount.

sudo mkdir /media/mountname

Then edit your /etc/fstab file (you need root privileges) to add this line:

//servername/sharename  /media/mountname  cifs  guest,uid=1000,iocharset=utf8,codepage=unicode,unicode  0  0

Where

  • guest indicates you don't need a password to access the share,

  • uid=1000 makes the Linux-user with specified uid or username owner of the mounted share, thereby allowing that user to rename files,

  • the combination iocharset=utf8,codepage=unicode,unicode allows access to files with names in non-English languages. This doesn't work with shares of devices like the Buffalo Tera Station, or Windows machines that export their shares using ISO8895-15. With these the codepage argument has to be codepage=cp850, otherwise characters like the German 'Umlaute' are displayed as garbage.

After you added the entry to /etc/fstab type:

sudo mount -a

This will (re)mount all entries in /etc/fstab

Mount password protected network folders

Assume the previous, plus:

  • Share username on Windows computer is myusername.

  • Share password on Windows computer is mypassword.

You could add the following to /etc/fstab:

//servername/sharename  /media/mountname  cifs  username=myusername,password=mypassword  0  0

However, the /etc/fstab is readable by everyone so it obviously wouldn't be a good idea to have your Windows password in it. The way to get around this is by using what is known as a credentials file. This is a file that contains just the username and password.

sudo gedit ~/.smbcredentials

Add the following lines:

username=myusername
password=mypassword

and save it.

Modify the permissions on the file so only you have permission to read and write to it. The only thing in the file is your Windows username and password.

sudo chmod 600 ~/.smbcredentials

Now add the following line in fstab for Read and write permission for everyone:

//servername/sharename  /media/mountname  cifs  credentials=~/.smbcredentials,dmask=777,fmask=777  0  0

or for only read permission:

//servername/sharename  /media/mountname  cifs  credentials=~/.smbcredentials  0  0

'instead of cifs one can also use smbfs.'

On some systems, smbfs automount does not work correctly (is this true for cifs as well?). As a workaround, you can add the "noauto" parameter to your smbfs fstab entry and then have the share mounted at login

/etc/fstab:

//servername/sharename  /media/mountname  cifs  noauto,credentials=~/.smbpasswd  0  0

then edit your /etc/rc.local to mount the smbfs when you log in (make sure the permissions on your /etc/rc.local will allow users to execute it:

mount /media/mountname
exit 0

Special permissions

If you need special permission (like chmod etc.) you need to add uid or gid flag. You can set either UID or username

//servername/sharename  /media/mountname  cifs   uid=uros,credentials=~/.smbcredentials,dmask=777,fmask=777   0       0

In that case /media/sharename will be owned by user uros.

Mounting a Share with Read/Write rights with a regular User (Without Prompt)

Open a Terminal and type:

id 

This should output something similar to:

uid=1000(craize) gid=1000(craize) groups=...

So for my user (craize) the User ID is 1000 and the Group ID is 1000 too.

Add the following to /etc/fstab:

//servername/sharename  /media/mountname  cifs  defaults,uid=1000,gid=1000,credentials=~/.smbpasswd,umask=777  0  0

Mount password protected network folders without credentials file using libpam_mount

Assumed that:

  • Your username and password are the same on the Ubuntu machine and on the network drive.

  • Network connections have been configured properly.
  • The Windows computer name is servername, this can be either an IP address or an assigned name.

  • The name of the share is sharename.

  • You want to mount the share in a folder mountname inside a user's home folder.

First, let's create the mount folder. You will need a separate folder for each mount.

$ sudo mkdir /home/username/mountname

Then, install the required package.

$ sudo apt-get install libpam-mount

Then edit the file /etc/security/pam_mount.conf using gedit or your preferred text editor (in Kubuntu, the default is Kate)

$ sudo gedit /etc/security/pam_mount.conf

Find the session:

# Volumes that will be mounted when user triggers the pam_mount module

And add this line at the end of this session (bellow the provided examples):

volume username cifs servername sharename /home/&/mountname uid=&,iocharset=utf8,fmask=0770,dmask=0770 - -

Where

  • username is the user that, when logged, pam_mount will mount the volume. It is possible to use * to all users or @groupname to all users that have groupname as their primary group

  • cifs is the filesystem. It can be any of the filesystems listed on the session # Commands to mount/unmount volumes, such as cifs (preferred) or "smbfs" (deprecated).

  • servername can be the ip address or the assigned name (don't use // before them).

  • sharename is the name of the share on the network folder. If the name of the share is your username (like a home folder) you can use the & character.

  • /home/&/mountname means /home/username/mountname. The & character means the username in this file.

  • uid=& makes the Linux-user with specified uid or username owner of the mounted share, thereby allowing that user to rename files. You can specify a username instead of using the & character

  • fmask=0770,dmask=0770 will set rwx permissions on files and directories for the user and the group specified with uid and gid.

Back up the pam gdm file:

$ sudo cp /etc/pam.d/gdm /etc/pam.d/gdm_backup

Then configure PAM to mount the external drive every time you login using gdm (change to kdm or xdm if you use Kubuntu or Xubuntu).

$ echo "@include common-pammount" | sudo tee -a /etc/pam.d/gdm

Next time you reboot and login, the volume should be mounted without the need to enter your login password twice or to write it down on a file.

Troubleshooting

Unprotected network folder won't automount

I've had a situation where an unprotected network folder wouldn't automount during bootup, but after manually entering "sudo mount -a" was mounted correctly. I solved this by replacing the "guest" option by "username=guest,password=". If anyone has an explanation for this, please leave a comment.

//servername/sharename  /media/mountname  smbfs  username=guest,password=,uid=1000,iocharset=utf8,codepage=unicode,unicode  0  0


CategoryDocumentation