Cài đặt và cấu hình Samba trên Ubuntu: Chia sẻ file giữa Linux và Windows

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

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.

Share: