Cài đặt và cấu hình Samba trên Ubuntu: Chia sẻ file với máy Windows

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

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 chownchmod 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.

Share: