Skip to main content

Mount an SMB Share in Linux

https://www.linode.com/docs/guides/linux-mount-smb-share/

Determining how to share files and directories between computers is a common problem — one that has many different solutions. Some of these solutions include file transfer protocols (like SFTP), cloud storage services, and distributed file system protocols (like NFS and SMB). Figuring out what solution is right for your use case can be confusing, especially if you do not know the correct terminology, techniques, or the tools that are available. Sharing files can be made even more complicated if you intend to do so over the internet or use multiple operating systems (like Linux, Windows, and macOS).

This guide covers the Server Message Block (SMB) protocol. Specifically, it discusses using the SMB protocol to mount a Windows SMB share (a shared directory) to a Linux system. By following this guide, you will be able to access all of your files within a Windows folder (such as C:\My_Files) on your Linux system at whichever directory you choose as a mount point (such as /mnt/my_files). This method of file sharing is appropriate when you need to access entire Windows directories remotely as if they were local resources. In most cases, SMB is a native (or easily installed) file sharing solution for users that need access to the same directory and is commonly shared through a corporate intranet or the same private network.

 

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

Verify that LinuxCIFS is available using the following command:

mount -t cifs

  • No error or output message is expected as there are no CIFS connections set up yet.

  • Verify that you have access to the fuser command.

    fuser

This 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. To learn more about the mount command, review the following guides:

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

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

  • When prompted, enter the password to connect to the remote share.

  • 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.

  • 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

Add the necessary credentials to the file in the following format:


File: .credentials


  • username=target_user_name
    password=target_user_password
    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.

  • Set ownership of the credentials file to the current user by running the following command:

    sudo chown <User Name[:Group Name]> <Credentials Filename>

  • Replace <User Name> with your username and <Credentials Filename> with the name of your credentials file.

  • Set the file permissions to 600 to ensure that only the owner has read and write access:

    sudo chmod 600 <Credentials Filename>

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.

  • Verify that the share has been successfully mounted using the following command:

    mount -t cifs

  1. This 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>
    <mount point>: <Mount Point>
    <type>: cifs
    <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,

  2. Save the file so the share is available next time you reboot the server.

  3. Verify that the share is mounted correctly using the <Mount Point> as an identifier because the mount is reading the /etc/fstab file.

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.