---
obj: application
website: https://www.samba.org
aliases: ["SMB"]
---
# Samba
Samba is an open-source software suite that provides seamless interoperability between [Linux](../../linux/Linux.md)/Unix servers and [Windows](../../windows/Windows.md)-based clients. It allows file and print services to be shared across a mixed network of [Windows](../../windows/Windows.md), [Linux](../../linux/Linux.md), and [macOS](../../macos/macOS.md) systems.

## Configuration
You configure samba with the file `/etc/samba/smb.conf`

### Structure:
The `smb.conf` file is structured into sections, each containing key-value pairs that define specific configurations. The sections are enclosed in square brackets (`[]`). The most commonly used section is `[global]`, which contains global settings applying to the entire Samba server. Other sections define individual shares or specific configurations.

### Common Sections:
1. **\[global]:**
    - Contains global configurations applicable to the entire Samba server.
2. **\[sharename]:**
    - Custom sections for defining specific shares.

### Global Options
```ini
[global]
# Workgroup
workgroup = WORKGROUP
# User needs to logon before connection
security = user
# Server description
server string = descriptive string
# Set minimum protocol to SMB3
server min protocol = SMB3_00
# Encrypt passwords in connection
encrypt passwords = yes
# ReadWrite Raw
read raw = Yes
write raw = Yes
```


### Share Options
```ini
[MyShare]
# Set share to readonly
read only = no
# Filesystem path
path = /my/share
# Users allowed to access this share
valid users = user
# Enable the share to be seen when connecting
browseable = yes
# Enable writing to the share
writeable = yes
# File and Directory permissions for creation.
create mode = 0750
directory mode = 0750
```

#### Recycle Bin
To enable a recycle bin on your share, add this to the config:
```ini
# Enable recycle bin
vfs object = recycle
# Set recycle bin location
recycle:repository = /my/share/.Trash
# Directory permissions
recycle:directory_mode = 0750
# Keep the directory structure when something is deleted
recycle:keeptree = Yes
recycle:touch = Yes
# Set max file size
recycle:maxsize = 100000000
# Enable versioning
recycle:versions = no
# Exclude files from versioning
recycle:noversions = *.ini | *.dat
# Exclude from recycle bin
recycle:exclude = *.TMP | *.tmp | ~$*.doc
recycle:exclude_dir = tmp | temp | cache
```

#### Snapshots
If you want to expose snapshots (for example from [ZFS](../../linux/filesystems/ZFS.md)), add this config:
```ini
# Enable snapshots
vfs object = shadow_copy2
# Directory which holds the snapshots (relative to share)
shadow:snapdir = .zfs/snapshot
# Snapshot format (date and time)
shadow:format = SNAP_%Y.%m.%d-%H.%M.%S
# Snapshot sorting
shadow:sort = desc
```


## User Authentication
### 1. **User Mapping:**
- Samba maps local system users to SMB users. Use the `smbpasswd` command to set passwords for SMB users.

