Mount an SMB Share in Linux

Linux SMB Support

  • Samba: Unix support for the SMB protocol was initially provided by Samba. Since Microsoft initially did not release public specifications for their proprietary protocol, the developers of Samba had to reverse engineer it. Future versions of Samba were able to use the public specifications of later SMB protocols. Samba includes support for SMB3 (3.1.1) and is actively updated. Samba provides extensive support for all features of the SMB protocol and acts as a stand-alone file and print server. For more background information, see the Samba Wikipedia entry.
  • LinuxCIFS utils: This in-kernel software acts as an SMB client and is the preferred method of mounting existing SMB shares on Linux. It was originally included as part of the Samba software, but is now available on its own. LinuxCIFS utils, available as the cifs_utils package in most Linux distributions, is used within this guide.
  • ksmbd: Developed as an in-kernel SMB server in cooperation with the Samba project, ksmbd is designed to be a more performant fileserver. It doesn’t implement all of Samba’s extensive features (beyond file sharing).

Before You Begin

  • Obtain the necessary information required to access an existing SMB share, including the IP address of the SMB server and the path of the share. If you do not have a share, you can create a local directory using the mkdir command and then create a Samba share for that location. Access to an existing SMB share on a Windows or Linux machine. Creating an SMB share is beyond the scope of this tutorial.
  • Have access to an Ubuntu or Debian Linux system where you intend to access your SMB share.

Installation

The LinuxCIFS utils package provides the tools needed to connect to a share and manage mounts on a Linux system. You use it to help create and manage a connection to a Windows, macOS, or Linux share.

  1. Update the list of available packages using the below command:
    sudo apt update && sudo apt upgrade
  2. Install the both the LinuxCIFS utils package (needed to mount SMB shares) and the psmisc package (needed to gain access to the fuser command, which shows you which users are using the various mounts on your server).
    sudo apt install cifs-utils psmisc
  3. Verify that LinuxCIFS is available using the following command:mount -t cifsNo error or output message is expected as there are no CIFS connections set up yet.
  4. Verify that you have access to the fuser command.fuserThis command shows a list of the various command line switches that can be used with the fuser utility.
    Usage: fuser [-fMuvw] [-a|-s] [-4|-6] [-c|-m|-n space] [-k [-i] [-s sig] | -SIGNAL] NAME...

Mount an SMB Share

All files in Linux are accessible on a single giant hierarchical directory tree, which starts at the root (/). The mount command (used in this tutorial) enables you to access other storage devices or file systems from that same tree. These other storage resources do not have to be physical disks and they do not have to be using the same file system.

The following sections detail how to mount an SMB share on Ubuntu, but the essential process is the same for other Linux distributions.

  1. Create an empty directory to be used as the mount point. This directory can be located wherever you wish, though it’s common to use the /mnt directory.

    mkdir /mnt/smb_share
  2. Enter the following command to mount the SMB share, replacing [server-ip] with the IP address of your SMB server, [share-path] with the file path to your SMB share on that server, and [mount-point] with the new directory you just created.

    mount -t cifs //[server-ip]/[share-path] /[mount-point]

    In the example below, the SMB server’s IP is 192.0.2.17, the share’s path is SharedFiles, and the mount point is 
    /mnt/smb_share.

    mount -t cifs //192.0.2.17/SharedFiles /mnt/smb_share
  3. When prompted, enter the password to connect to the remote share.
  4. If the connection is successful, you should see the remote share mounted on the mount point directory you created. To verify this, type the following command:

    mount -t cifs

    The command above lists all mounted SMB shares. Among this list, you should see the share you just mounted.
  5. You should now be able to access the files as if they were on a local drive. In the command below, replace [mount-point] with the directory you have created (such as /mnt/smb_share).

    cd [mount-point]

    From here, you can run the ls command to view your files and you can interact with the files as you would any other files on your system.

Create a Credentials File

You don’t want to have to type in your credentials every time you access a share. On the other hand, putting the credentials where everyone can see is not a good idea. The following steps help you create a credentials file to automate the process of logging in.

  1. Use your preferred text editor such as vi or nano to create a file to store the credentials. You can name the file anything you want, but using a period before the filename will hide it from view. For example, you can create a file named .credentials using the following command:

    nano ~/.credentials
  2. Add the necessary credentials to the file in the following format:

    File: .credentials
    1 username=target_user_name
    2 password=target_user_password
    3 domain=domain

    If the domain is not required (except on Windows systems), you can omit that entry. Replace the target_user_name and target_user_password with the actual credentials you need to use to access the SMB share. Save and close the file.
  3. Set ownership of the credentials file to the current user by running the following command:

    sudo chown <User Name>:<Credentials Filename>

    Replace <User Name> with your username and <Credentials Filename> with the name of your credentials file.
  4. Set the file permissions to 600 to ensure that only the owner has read and write access:

    sudo chmod 600 <Credentials Filename>
  5. To mount the share using the credentials file, run the following command:

    sudo mount -t cifs -o credentials=<Credentials Filename> //<IP Address of Server>/<Share on Server> /<Mount Point>

    Replace <IP Address of Server> with the IP address of the server hosting the share, <Share on Server> with the name of the share you want to mount, and <Mount Point> with the local mount point where you want to access the share. You aren’t asked for credentials this time because mount uses the credentials file instead.
  6. Verify that the share has been successfully mounted using the following command:mount -t cifsThis should show you the share information as output, confirming that the share has been successfully mounted using the credentials file.

Mount a Share Automatically At Boot

Remounting the SMB share every time you restart the server can be tedious. You can instead set your server up to automatically remount the share every time you restart it using the following steps. Before starting these steps, make sure that the share is currently unmounted.

  1. Open the /etc/fstab file in your preferred text editor. This file contains configurations that the server uses on reboot to reconnect to shares (among other things). There are columns for the file system, mount point, type, and options.
  2. Enter the information below in each of the columns:

    File: /etc/fstab
    1 <file system>: //<IP Address of Server>/<Share on Server>
    2 <mount point>: <Mount Point>
    3 <type>: cifs
    4 <options>: credentials=<Credentials Filename>

    From the file above, replace <IP Address of Server> with the IP address of the server hosting the share, <Share on Server> with the name of the share you want to mount, <Mount Point> with the local mount point where you want to access the share, <Credentials Filename> with the name of your credentials file.
  3. Save the file so the share is available next time you reboot the server.
  4. Verify that the share is mounted correctly using the <Mount Point> as an identifier because the mount is reading the /etc/fstab file.

Practical example of an fstab file:

# smb share permanent mounts for plex – by Nacho
# //<IPaddress>/<ShareName>   /<mountPoint>   cifs    user=<userName>,pass=<passwd> 0 0
//190.135.22.70/MOVIES   /mnt/drobo-movies   cifs    credentials=/home/ignacio/.credentials 0 0
//190.135.22.70/TV-SERIES   /mnt/drobo-tvseries   cifs    credentials=/home/ignacio/.credentals 0 0

Unmount a Share

You may need to unmount a share at some point. To unmount an SMB share that has been mounted using the mount command, you can use the umount command followed by the mount point of the share. The correct command is umount, not unmount.

So to unmount an SMB share at the mount point <Mount Point>, run the following command:

umount -t cifs /<Mount Point>

The share should not appear in the output of this command.

Conclusion

You now have an understanding of SMB (and CIFS), what an SMB share is, and what a mount point is. These pieces of information allow you to share remote data in a way that’s transparent to users. From the user’s perspective, the resource is local to the server that they’re accessing. This guide also shows you how to use the mount and umount commands in a basic way to create and delete shares, how to create and use a credentials file to automate the sharing process to some extent, and how to automatically remount the share after a reboot.

Leave a Reply

Your email address will not be published. Required fields are marked *