Samba is a powerful open-source software suite that enables seamless file and printer sharing between Linux/Unix systems and Windows clients. It allows Linux systems to appear as Windows file servers, making it a vital tool in mixed-OS environments such as corporate networks or home setups.

This guide walks you through installing and configuring Samba on a Linux system, enabling you to share directories and manage access permissions with ease.

What is Samba?

Samba implements the SMB (Server Message Block) and CIFS (Common Internet File System) protocols used by Windows for file and printer sharing. It allows:

  • Linux systems to share files with Windows machines

  • Linux systems to access Windows shared folders

  • Centralized access to shared resources in heterogeneous networks

Step 1: Install Samba

The installation process may vary slightly depending on your Linux distribution.

For Debian/Ubuntu:

sudo apt update
sudo apt install samba

For CentOS/RHEL (7/8+):

sudo yum install samba samba-client samba-common

For Fedora:

sudo dnf install samba

To verify installation:

smbd --version

Step 2: Create a Shared Directory

Create the directory you want to share with network users.

sudo mkdir -p /srv/samba/shared
sudo chown -R nobody:nogroup /srv/samba/shared
sudo chmod -R 0775 /srv/samba/shared

These permissions allow read/write access to guest users (can be adjusted for authenticated users).

Step 3: Configure the Samba Server

Open the Samba configuration file:

sudo nano /etc/samba/smb.conf

At the bottom of the file, add the following block:

[Shared]
path = /srv/samba/shared
browsable = yes
read only = no
guest ok = yes

This defines a shared folder named “Shared” that’s accessible without a password (guest access). For more security, disable guest ok and configure user-level access.

After editing, save and close the file.

Step 4: Set a Samba User

If you prefer user authentication over guest access, create a Samba user:

sudo useradd sambauser
sudo passwd sambauser
sudo smbpasswd -a sambauser

Then adjust the share block in smb.conf:

[Shared]
path = /srv/samba/shared
valid users = sambauser
read only = no

Step 5: Restart Samba Services

Apply the new configuration by restarting the Samba services:

sudo systemctl restart smbd
sudo systemctl enable smbd

To check the status:

sudo systemctl status smbd

Step 6: Adjust the Firewall

If you use a firewall, allow Samba traffic:

For UFW (Ubuntu):

sudo ufw allow 'Samba'

For firewalld (CentOS, Fedora):

sudo firewall-cmd --permanent --zone=public --add-service=samba
sudo firewall-cmd --reload

Step 7: Access the Shared Folder

From Windows:

  • Open File Explorer

  • Enter the IP address of your Linux system in the address bar, e.g.:

    \\192.168.1.100\Shared
  • Authenticate if needed

From another Linux system:

Use the smbclient utility:

smbclient //192.168.1.100/Shared -U sambauser

Or mount the share:

sudo mount -t cifs //192.168.1.100/Shared /mnt/samba -o username=sambauser

Conclusion

Samba is a powerful tool that bridges the gap between Linux and Windows file sharing. Whether you’re setting up a home media server or managing resources in a business network, Samba offers the flexibility and compatibility needed to ensure smooth interoperability. Proper configuration, user access control, and firewall rules will help ensure secure and efficient file sharing.

If you need help with advanced setups like printer sharing, Samba as a domain controller, or Active Directory integration, feel free to request a follow-up guide.