Mình bắt đầu dùng Samba từ hồi quản lý một văn phòng nhỏ — 15 máy Windows, 2 Ubuntu Server làm file server. Lúc đó nghĩ đơn giản lắm, chỉ cần chia sẻ thư mục thôi. Nhưng sau 6 tháng chạy production, mới thấy có khá nhiều thứ cần chú ý để Samba vừa ổn định vừa bảo mật.
Bối cảnh và tại sao cần Samba?
Về bản chất, Samba triển khai giao thức SMB/CIFS trên Linux — cái giao thức Windows dùng để chia sẻ file qua mạng. Nhờ vậy, Ubuntu server giao tiếp được với máy Windows, phía client không cần cài thêm bất kỳ phần mềm gì.
Trường hợp cụ thể mình gặp: team developer dùng Windows muốn access trực tiếp thư mục code trên server Ubuntu — không cần SSH, không cần copy file qua lại. Samba giải quyết bài toán này gọn gàng.
Một số use case phổ biến:
- File server nội bộ cho văn phòng dùng Windows
- Chia sẻ thư mục giữa VM Linux và host Windows (VMware, VirtualBox)
- NAS self-hosted thay thế Synology/QNAP
- Backup destination từ các máy Windows qua network
Cài đặt Samba trên Ubuntu
Mình test và đang chạy trên Ubuntu 22.04 LTS. Cài đặt khá nhanh, không có dependency phức tạp:
sudo apt update
sudo apt install samba samba-common-bin -y
Kiểm tra version và trạng thái service:
smbd --version
sudo systemctl status smbd
Nếu service chưa chạy, start và enable để tự khởi động cùng hệ thống:
sudo systemctl start smbd nmbd
sudo systemctl enable smbd nmbd
nmbd là NetBIOS Name Service — giúp máy Windows tìm được server theo hostname thay vì phải nhớ IP. Bỏ qua cái này thì kết nối bằng IP vẫn được, nhưng server sẽ không hiện trong Network Neighborhood.
Cấu hình chi tiết Samba
File cấu hình chính nằm ở /etc/samba/smb.conf. Trước khi chỉnh, backup lại — thói quen mình học được sau lần đầu làm hỏng config rồi mất cả buổi chiều restore:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
Cấu hình section [global]
Section [global] chứa các thiết lập áp dụng cho toàn bộ server — workgroup, security mode, log, và một số tweak performance. Mở file lên chỉnh:
sudo nano /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
server string = Ubuntu File Server
security = user
map to guest = bad user
dns proxy = no
# Log settings
log file = /var/log/samba/log.%m
max log size = 1000
logging = file
# Performance tuning
socket options = TCP_NODELAY IPTOS_LOWDELAY
read raw = yes
write raw = yes
max xmit = 65535
Một điểm hay bị bỏ sót: workgroup = WORKGROUP phải khớp với workgroup trên máy Windows. Kiểm tra nhanh trên Windows: chuột phải This PC → Properties → Advanced system settings → Computer Name.
Tạo shared folder
Ví dụ thực tế: mình tạo 2 share — một share public cho cả team đọc/ghi, một share private chỉ cho admin:
# Tạo thư mục
sudo mkdir -p /srv/samba/public
sudo mkdir -p /srv/samba/private
# Permission cho public folder
sudo chown -R nobody:nogroup /srv/samba/public
sudo chmod -R 0775 /srv/samba/public
# Permission cho private folder
sudo chown -R root:root /srv/samba/private
sudo chmod -R 0770 /srv/samba/private
Thêm vào cuối file smb.conf:
[Public]
comment = Public Share - Team Access
path = /srv/samba/public
browsable = yes
writable = yes
guest ok = yes
read only = no
create mask = 0664
directory mask = 0775
[Private]
comment = Private - Admin Only
path = /srv/samba/private
browsable = yes
writable = yes
guest ok = no
valid users = sambaadmin
create mask = 0660
directory mask = 0770
Tạo Samba user
Samba dùng database user riêng — không dùng trực tiếp /etc/passwd. User phải tồn tại trong hệ thống Linux trước, sau đó mới thêm vào Samba:
# Tạo system user (không cần login shell)
sudo useradd -M -s /usr/sbin/nologin sambaadmin
# Thêm vào Samba database và set password
sudo smbpasswd -a sambaadmin
# Enable user
sudo smbpasswd -e sambaadmin
Lưu ý nhỏ: CentOS/RHEL thường dùng /sbin/nologin, còn Ubuntu dùng /usr/sbin/nologin. Trên Ubuntu hiện đại cả hai đều hoạt động vì /sbin là symlink sang /usr/sbin — nhưng cứ dùng /usr/sbin/nologin cho nhất quán.
Cấu hình firewall
Mở port cho Samba chỉ một lệnh:
sudo ufw allow samba
sudo ufw status
ufw allow samba tự động mở port 137, 138 (UDP) và 139, 445 (TCP). Trong môi trường production, nên giới hạn chỉ cho subnet nội bộ — an toàn hơn nhiều:
sudo ufw allow from 192.168.1.0/24 to any app samba
Kiểm tra và Monitoring
Validate config trước khi restart
Luôn check syntax trước khi restart service — config sai là smbd không start được, toàn bộ share down ngay:
testparm
Thấy dòng Loaded services file OK là yên tâm restart:
sudo systemctl restart smbd nmbd
Test kết nối từ local
# List tất cả shares
smbclient -L localhost -U sambaadmin
# Kết nối vào Private share
smbclient //localhost/Private -U sambaadmin
# Kết nối anonymous vào Public share
smbclient //localhost/Public -N
Monitoring connections đang active
smbstatus là lệnh mình dùng nhiều nhất khi troubleshoot — show được ai đang kết nối, đang lock file nào, từ IP nào. Rất tiện khi có người báo không mở được file: 9 lần 10 là do người khác đang lock file đó.
# Xem sessions và open files
smbstatus
# Chi tiết hơn
smbstatus --verbose
# Watch log realtime
sudo tail -f /var/log/samba/log.smbd
Một số lỗi thường gặp
NT_STATUS_LOGON_FAILURE: User tồn tại trong Linux nhưng chưa được add vào Samba database. Chạy lại sudo smbpasswd -a username.
NT_STATUS_ACCESS_DENIED: Permission trên thư mục không đúng. Kiểm tra lại chown và chmod khớp với valid users trong smb.conf.
Không thấy server trên Network Neighborhood: nmbd chưa chạy hoặc đã crash. Chạy sudo systemctl status nmbd và restart nếu cần.
Kết nối từ máy Windows
Mở File Explorer, gõ vào thanh địa chỉ:
\\192.168.1.100\Public
Thay 192.168.1.100 bằng IP của Ubuntu server. Map thành drive letter tiện hơn nhiều — nhất là với user không quen UNC path:
# Chạy trên Windows (Command Prompt hoặc PowerShell)
net use Z: \\192.168.1.100\Public /persistent:yes
# Với authentication
net use Z: \\192.168.1.100\Private /user:sambaadmin /persistent:yes
Sau 6 tháng chạy với khoảng 20 user Windows kết nối đồng thời, Samba trên Ubuntu 22.04 khá ổn định. Memory footprint thấp hơn mình kỳ vọng — smbd + nmbd chỉ ngốn khoảng 50–80MB RAM. Điểm trừ duy nhất: đôi khi nmbd cần restart thủ công khi network interface thay đổi, nhưng vài tháng mới gặp một lần.
