Samba is an incredibly powerful tool that allows you to create seamless file and printer sharing to SMB/CIFS clients from a Linux server or desktop. With Samba, you can even connect a Linux machine to a Windows Domain. But before you can tackle the more challenging aspects of Samba, you first must have it up and running.
We’re not going to deal with Windows Domain controllers yet; instead, we’ll focus on the much simpler task of joining a Windows workgroup and sharing folders to all clients on that workgroup.
Featured Partners: File sharing Software
What you will need
You don’t need much to get Samba up and running:
- A Windows workgroup.
- A Linux machine.
- A bit of time.
I’ll demonstrate this on Ubuntu Desktop 23.04, but the process works the same on most Linux distributions. First, we’ll create a folder that will allow anonymous sharing across your workgroup and then create a password-protected share.
Note: You should alter the instructions according to your distribution of choice.
How to install Samba
- On your Linux machine, open a terminal window.
- Install the necessary software with the command:
sudo apt-get install -y samba
- Type your sudo password, and hit Enter.
- Allow the installation to complete.
- Use the command
sudo systemctl status smbd
to check if the Samba service is started and enabled, so it will start on boot (Figure A).
Figure A
- If Samba is not started, use the command
sudo systemctl start smbd
to start it. - If Samba is not enabled, use the command
sudo systemctl enable smbd
to enable it.
That’s it — Samba will install and start.
How to configure Samba
The main configuration file for Samba is /etc/samba/smb.conf. Many will advise you to back up that file and create a new file with specific contents. However, I suggest using this file, as it is better tuned for the release of Samba you’ve installed.
SEE: Discover TechRepublic Premium’s web server configuration and management policy.
1. Back up the default configuration file
To that end, make a copy of the default configuration file, so you can safely edit the original and always have a working copy to fall back on. To back up the configuration file:
- Issue the command:
sudo cp -pf /etc/samba/smb.conf /etc/samba/smb.conf.bak
- Now, open the /etc/samba/smb.conf file in your favorite text editor, and prepare to make some changes.
- Look for this line:
workgroup = WORKGROUP
- Change WORKGROUP to reflect your network needs.
The next section you need to edit is way down in the Share Definitions.
2. Create a directory in Linux you want to share
Before you configure anything with Samba, you will need to create a directory on your Linux server that you will want to share. For this example, we will use /srv/samba. To create this directory:
- Use the command:
sudo mkdir /srv/samba
- Now, make that directory world writable and world browsable via:
sudo chmod a+rwx /srv/samba
- Go to the bottom of the file, and add the following:
[Anonymous]
path = /srv/samba
browseable = yes
writable = yes
read only = no
guest ok = yes
- Save that file, and restart Samba with this command:
sudo systemctl restart smbd
You should be able to reach those shares from any machine on your network.
3. Test the share access
Since we set that share as anonymous, users won’t have to log in to access the files and folders within. To test this, you will need the IP address of your Linux server. You can get this via the ip a command:
- On any Windows machine on your network, browse to the shared file using File Explorer, with the syntax \\your-server-ip in the address bar and hitting the Enter key, as shown below (Figure B).
Figure B
- Click the Anonymous folder to access the share. Create a new file in there, and save it (Figure C).
Figure C
- You can then see the contents of that file from the Linux server in the
/smb/samba
directory (Figure D).
Figure D
Adding password-secured shares
We’ve just added an anonymous share that anyone could access. If you want to add a folder (we’ll use /samba/shares as an example) that is password protected, follow these steps:
- Open a terminal window on your Samba server.
- Create a new group with the command
sudo addgroup smbgrp
. - Create a new user with the command
sudo useradd shares -G smbgrp
. - Create a Samba password for the user with the command
sudo smbpasswd -a shares
. - Type and verify a password for the user.
- Create the folder with the command
sudo mkdir -p /srv/samba-secured
. - Change the permissions of the folder with the command
sudo chmod -R 0770 /srv/samba-secured
. - Change the ownership of the folder with the command
sudo chown root:smbgrp /srv/samba-secured
. - Now, open the /etc/samba/smb.conf file, and add the following under the Share Definitions or at the bottom of the file:
[SECURED]
path = /srv/samba-secured
valid users = @smbgrp
browseable = yes
writable = yes
read only = no
- Save the file, and restart Samba with the command
sudo service smbd restart
.
You now have a password-protected Samba share ready to use. Anyone that needs access to the share will log in with username shares and the password you set when you issued the command sudo smbpasswd -a shares
.
In Windows, you will be prompted to enter the credentials you created above (Figure E). Once you do, you will have access to the folder.
Figure E
One important note is that if you connected to the anonymous share above, Windows may not let you log in to the secured share. To remedy that, reboot the Windows computer, and try again.
Bend it to fit
One of the great things about Samba is it allows you to bend it to fit your needs. You can create as many shares as you want (password protected or not), share out printers and even join Windows Domains. This is just the beginning when it comes to using Samba. Follow our guides to learn how to:
- Connect to Linux Samba shares from Windows.
- Create a passwordless guest share in Samba.
- Set up Samba shares for groups.
- Deploy Samba on Linux as an Active Directory Domain Controller.
Keep in mind that Samba is one of many ways to share resources between Linux and Windows. If you find this to be overkill for your needs, you may want to consider the more traditional file-sharing approach that makes use of SSH and SFTP on the Linux side and FileZilla on the Windows side.