Vấn đề thực tế: File trên Ubuntu không ai đọc được từ Windows
Hồi mới làm sysadmin, mình được giao task setup Ubuntu server làm file server cho cả team. Văn phòng 15 người, đa số dùng Windows, vài người macOS, và mỗi mình xài Ubuntu. Bài toán: làm sao để mọi người truy cập thư mục share từ Windows mà không cần cài thêm phần mềm?
Mình thử SFTP trước — hoạt động, nhưng phải cài WinSCP hoặc FileZilla. NFS thì ổn, nhưng Windows chỉ hỗ trợ native trên bản Enterprise. Cuối cùng Samba là câu trả lời: mount drive thẳng vào File Explorer như ổ cứng bình thường, không cần cài thêm gì.
Samba hoạt động thế nào, và tại sao không phải NFS hay SFTP?
Samba là bản implement mã nguồn mở của giao thức SMB/CIFS — thứ Windows dùng để chia sẻ file và printer trong LAN. Cái ổ mạng bạn thấy xuất hiện trong “This PC”? Phần lớn là SMB chạy ngầm phía sau.
So sánh nhanh ba phương án:
- NFS: Tốt cho Linux-to-Linux, Windows cần Enterprise edition hoặc phần mềm thứ ba
- SFTP/FTP: Cần client app, không mount được như ổ đĩa thông thường
- Samba (SMB): Windows và macOS hỗ trợ native, mount trực tiếp vào File Explorer/Finder
Chuyển từ CentOS sang Ubuntu mình mất khoảng 1 tuần để quen với apt thay vì yum. Nhưng Samba thì dễ cấu hình hơn hẳn: file config đặt đúng chỗ, package manager gọn, và quan trọng nhất — không có SELinux chặn ngang bất ngờ như bên CentOS.
Hai cách setup Samba
Cách 1: GUI trên Ubuntu Desktop
Nautilus có tính năng “Share Folder” tích hợp sẵn. Click chuột phải vào thư mục → Properties → Share. Nhanh, nhưng ít control và không chạy được trên server headless.
Cách 2: Cấu hình thủ công qua smb.conf
Full control, dùng được cả dev lẫn production. Cách này mình sẽ hướng dẫn chi tiết dưới đây.
Cài đặt và cấu hình Samba từng bước
Bước 1: Cài đặt Samba
sudo apt update
sudo apt install samba samba-common -y
# Kiểm tra version
smbd --version
# Kết quả: Version 4.15.13-Ubuntu
Bước 2: Tạo thư mục chia sẻ
# Public share (ai cũng truy cập được)
sudo mkdir -p /srv/samba/shared
sudo chmod 0777 /srv/samba/shared
sudo chown nobody:nogroup /srv/samba/shared
# Private share (chỉ user có tài khoản)
sudo mkdir -p /srv/samba/private
sudo chmod 0755 /srv/samba/private
Bước 3: Backup và cấu hình smb.conf
File cấu hình chính nằm tại /etc/samba/smb.conf. Backup trước khi chỉnh — thao tác này mình không bao giờ bỏ qua:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
sudo nano /etc/samba/smb.conf
Thêm vào cuối file:
# ===== Public Share (không cần đăng nhập) =====
[shared]
comment = Public Shared Folder
path = /srv/samba/shared
browsable = yes
writable = yes
guest ok = yes
read only = no
create mask = 0777
directory mask = 0777
# ===== Private Share (cần đăng nhập) =====
[private]
comment = Private Folder
path = /srv/samba/private
browsable = yes
writable = yes
guest ok = no
valid users = @samba
read only = no
create mask = 0644
directory mask = 0755
Bước 4: Tạo Samba user
Đây là chỗ hay gây nhầm nhất: Samba giữ database user riêng, độc lập hoàn toàn với /etc/passwd. Phải tạo Linux user trước, rồi mới add vào Samba — thiếu bước nào cũng lỗi ngay:
# Tạo Linux user (nếu chưa có)
sudo adduser sambauser
# Tạo group và thêm user vào
sudo groupadd samba
sudo usermod -aG samba sambauser
# Add vào Samba database và set password
sudo smbpasswd -a sambauser
# Hệ thống hỏi mật khẩu — khác với mật khẩu Linux
# Enable user
sudo smbpasswd -e sambauser
Bước 5: Kiểm tra cấu hình và khởi động dịch vụ
# Kiểm tra syntax config trước khi restart
testparm
# Restart Samba
sudo systemctl restart smbd nmbd
# Bật auto-start khi boot
sudo systemctl enable smbd nmbd
# Kiểm tra trạng thái
sudo systemctl status smbd
Bước 6: Mở firewall UFW
sudo ufw allow samba
sudo ufw reload
sudo ufw status
Lệnh allow samba tự mở port 137, 138 (UDP) và 139, 445 (TCP) — không cần khai thủ công từng port.
Bước 7: Kết nối từ các hệ điều hành khác
Từ Windows — mở File Explorer, gõ vào thanh địa chỉ:
\\192.168.1.100\shared
# Thay IP bằng địa chỉ Ubuntu server của bạn
Muốn mount thành ổ đĩa cố định: right-click “This PC” → Map network drive → nhập đường dẫn UNC ở trên.
Từ macOS — Finder → Go → Connect to Server (⌘K):
smb://192.168.1.100/shared
Từ Linux khác:
sudo apt install smbclient cifs-utils
# List tất cả shares trên server
smbclient -L //192.168.1.100 -N
# Mount public share
sudo mount -t cifs //192.168.1.100/shared /mnt/samba -o guest
# Mount private share với user
sudo mount -t cifs //192.168.1.100/private /mnt/private \
-o username=sambauser,password=yourpassword
Cấu hình thêm cho môi trường thực tế
Theo dõi kết nối
# Xem log realtime
sudo tail -f /var/log/samba/log.smbd
# Xem các kết nối đang active
sudo smbstatus
Thêm logging vào section [global]
[global]
workgroup = WORKGROUP
log level = 1
log file = /var/log/samba/log.%m
max log size = 50
Debug lỗi thường gặp
Không kết nối được dù firewall đã mở? Kiểm tra workgroup ngay — Windows mặc định dùng “WORKGROUP”, Samba cũng vậy, nhưng sai chỗ này là đủ để mất kết nối:
grep -i workgroup /etc/samba/smb.conf
Còn lỗi “Permission denied” khi ghi file — 9 lần 10 là do permission thư mục Linux, không phải Samba config:
ls -la /srv/samba/
# Kiểm tra ownership và permission của từng thư mục
Khác với CentOS: Ubuntu không có SELinux mặc định. Gặp permission issue thì chỉ cần kiểm tra Linux file permission — không cần động tới semanage hay chcon.
Kết
Toàn bộ quá trình setup mất khoảng 15–20 phút. Trình tự: cài package → tạo thư mục → cấu hình smb.conf → tạo Samba user → mở firewall → test kết nối. Chỗ dễ nhầm nhất là Samba user database tách biệt với Linux user, và permission thư mục phải đúng trước khi config Samba có hiệu lực.
Cấu hình trên đủ cho file server nội bộ nhỏ dưới 20 người. Khi cần mở rộng — phân quyền theo group phức tạp hơn, tích hợp Active Directory, hay quản lý hàng chục user — thì lúc đó mới cần đào sâu vào Samba ACL và winbind.

