Cài đặt và cấu hình Samba Server trên Linux: Chia sẻ file và phân quyền chuẩn cho mạng Windows

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Vấn đề thực tế: Rào cản chia sẻ file giữa Linux và Windows trong văn phòng

Trong các công ty quy mô từ 20 đến 100 nhân sự, hầu hết máy trạm văn phòng đều chạy Windows 10 hoặc 11. Trái lại, máy chủ lưu trữ (File Server, NAS) lại thường chạy Linux như Ubuntu, Debian hay Rocky Linux. Lý do rất dễ hiểu: tiết kiệm hàng chục triệu đồng tiền bản quyền Windows Server mỗi năm. Thêm vào đó, máy chủ Linux hoạt động bền bỉ, hiếm khi cần khởi động lại.

Rắc rối xuất hiện ngay khi bạn bắt tay chia sẻ tài liệu nội bộ. Nếu để nhân viên gửi file qua Zalo, Telegram hay cắm USB, dữ liệu rất dễ thất thoát và lây nhiễm mã độc. Nhưng khi dựng file server Linux cho máy Windows truy cập, sysadmin liên tục nhận ticket phàn nàn. Máy tính không thấy server. Windows báo lỗi “Windows cannot access… Permission Denied”. Thậm chí có lúc ai cũng mở và xóa được bảng lương nội bộ.

Nguyên nhân rất rõ ràng. Windows sử dụng giao thức SMB (Server Message Block) để chia sẻ tài nguyên mạng. Còn Linux lại quản lý quyền truy cập tệp theo tiêu chuẩn POSIX. Để hai nền tảng này làm việc ăn khớp, giải pháp tiêu chuẩn và tin cậy nhất suốt nhiều thập kỷ qua chính là Samba.

Hiểu đúng cơ chế: Hai lớp phân quyền độc lập của Samba

Samba triển khai lại giao thức SMB/CIFS trên Linux. Nhờ đó, máy chủ Linux đóng vai trò như một File Server Windows thực thụ. Người dùng Windows có thể duyệt thư mục, đọc ghi tài liệu và map ổ đĩa mạng (Map Network Drive) bằng phím tắt quen thuộc mà không cần cài thêm công cụ trung gian.

Hai lớp khóa bảo mật: smb.conf và Linux Filesystem

Nhiều bạn mới cấu hình Samba thường nghĩ chỉ cần khai báo quyền trong file smb.conf là đủ. Đây là sai lầm phổ biến nhất khiến người dùng gặp lỗi Permission Denied.

Thực tế, Samba vận hành dựa trên hai tầng kiểm soát hoàn toàn độc lập:

  • Tầng 1 – Cấu hình Samba (smb.conf): Quyết định ai nhìn thấy thư mục share, ai được ghi (read only = no, write list) và ai chỉ được xem.
  • Tầng 2 – Quyền file Linux (chmod / chown): Quyết định user Linux chạy tiến trình có thực quyền trên thư mục vật lý ở ổ cứng hay không.

Quy tắc bất biến: Samba không bao giờ vượt qua được quyền của Linux. Giả sử trong smb.conf bạn cho phép ghi (read only = no), nhưng thư mục Linux lại mang quyền 755 thuộc về root. Người dùng Windows kéo file vào chắc chắn sẽ bị chặn ngay lập tức.

Mối quan hệ giữa Linux User và Samba User

Mỗi tài khoản Samba phải gắn liền với một tài khoản Linux có sẵn. Sau khi tạo user trên Linux, bạn mới đồng bộ tài khoản đó vào cơ sở dữ liệu riêng của Samba bằng lệnh smbpasswd. Hai tài khoản này dùng chung tên đăng nhập, nhưng mật khẩu truy cập thư mục mạng hoàn toàn có thể tách biệt với mật khẩu Linux.

Thực hành: Cài đặt và cấu hình Samba Server trên Ubuntu

Chúng ta sẽ cấu hình Samba trên máy chủ Ubuntu Server (IP: 192.168.1.100) giải quyết hai bài toán kinh điển của doanh nghiệp:

  1. Thư mục Public: Toàn bộ nhân viên được đọc thông báo và biểu mẫu chung, chỉ tài khoản admin mới có quyền ghi/sửa.
  2. Thư mục Kế toán (KeToan): Chỉ nhân sự thuộc phòng kế toán mới được phép truy cập và toàn quyền thao tác số liệu.

Bước 1: Cài đặt Samba

Cập nhật danh sách gói và cài đặt Samba cùng công cụ client kiểm tra:

sudo apt update
sudo apt install samba smbclient -y

Xác nhận dịch vụ đã khởi chạy thành công:

sudo systemctl status smbd

Bước 2: Tạo nhóm người dùng và phân quyền thư mục Linux

Tạo nhóm ketoan_dept, tạo người dùng lan_kt (kế toán viên) và tuan_nv (nhân viên kinh doanh). Chúng ta khóa shell đăng nhập trực tiếp (-s /usr/sbin/nologin) để tăng tính an toàn:

# Tạo group cho phòng ban
sudo groupadd ketoan_dept

# Tạo user hệ thống không cần cấp quyền login terminal
sudo useradd -M -s /usr/sbin/nologin -g ketoan_dept lan_kt
sudo useradd -M -s /usr/sbin/nologin tuan_nv

Tiến hành tạo cây thư mục lưu trữ tại /samba và gán quyền chặt chẽ:

sudo mkdir -p /samba/public
sudo mkdir -p /samba/ketoan

# Thư mục Public: Ai cũng đọc được (755), chỉ root được ghi
sudo chown -R root:nogroup /samba/public
sudo chmod -R 755 /samba/public

# Thư mục Kế toán: Chỉ user thuộc nhóm ketoan_dept mới vào được (770)
sudo chown -R root:ketoan_dept /samba/ketoan
sudo chmod -R 770 /samba/ketoan

# Bật cờ SGID: File mới tạo tự động thừa kế nhóm ketoan_dept
sudo chmod g+s /samba/ketoan

Lệnh chmod g+s cực kỳ quan trọng. Nhờ cờ SetGID này, bất kỳ tài liệu nào do chị Lan tạo ra sau này đều tự động mang group ketoan_dept. Nhờ đó, các kế toán viên khác trong phòng đều mở và sửa được bình thường.

Bước 3: Tạo mật khẩu Samba cho người dùng

Khai báo và kích hoạt mật khẩu mạng cho từng tài khoản:

# Đặt mật khẩu Samba cho Lan (phòng Kế toán)
sudo smbpasswd -a lan_kt
sudo smbpasswd -e lan_kt

# Đặt mật khẩu Samba cho Tuấn (nhân viên)
sudo smbpasswd -a tuan_nv
sudo smbpasswd -e tuan_nv

Bước 4: Cấu hình file smb.conf chuẩn production

Trước khi chỉnh sửa, hãy sao lưu file cấu hình gốc:

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

Mở file /etc/samba/smb.conf và thêm nội dung sau vào cuối:

# --- Cấu hình toàn cục (Global) ---
[global]
   workgroup = WORKGROUP
   server string = Ubuntu File Server
   security = user
   map to guest = bad user
   dns proxy = no

   # Chặn giao thức SMBv1 cũ kỹ và kém an toàn
   server min protocol = SMB2_10
   client min protocol = SMB2_10

# --- Thư mục dùng chung (Public) ---
[Public_Data]
   path = /samba/public
   browseable = yes
   read only = yes
   guest ok = yes
   create mask = 0644
   directory mask = 0755

# --- Thư mục Kế toán (Bảo mật) ---
[KeToan_Secret]
   path = /samba/ketoan
   browseable = yes
   read only = no
   valid users = @ketoan_dept
   force group = ketoan_dept
   create mask = 0660
   directory mask = 0770

Khai báo server min protocol = SMB2_10 giúp loại bỏ hoàn toàn SMBv1. Thiết lập này vừa chặn đứng nguy cơ lây lan ransomware (như WannaCry), vừa duy trì tốc độ truyền file ổn định trên hạ tầng mạng gigabit.

Bước 5: Kiểm tra cú pháp và kích hoạt dịch vụ

Dùng lệnh testparm để soát lỗi chính tả trước khi áp dụng:

testparm

Khi màn hình hiển thị “Loaded services file OK”, bạn yên tâm nạp lại dịch vụ:

sudo systemctl restart smbd
sudo systemctl enable smbd

Bước 6: Cấu hình tường lửa UFW

Để bảo mật, chỉ mở cổng SMB (cổng 445 cho SMB trực tiếp và cổng 139 cho NetBIOS) cho dải mạng nội bộ văn phòng (ví dụ 192.168.1.0/24):

sudo ufw allow from 192.168.1.0/24 to any port 445 proto tcp
sudo ufw allow from 192.168.1.0/24 to any port 139 proto tcp
sudo ufw reload

Bước 7: Truy cập từ Windows và xử lý cache thông tin đăng nhập

Trên máy trạm Windows thuộc mạng LAN:

  1. Nhấn tổ hợp phím Windows + R, nhập \\192.168.1.100 rồi nhấn Enter.
  2. Hai thư mục xuất hiện: Public_Data và KeToan_Secret.
  3. Bấm vào KeToan_Secret, nhập tài khoản lan_kt cùng mật khẩu đã tạo ở Bước 3.

Bẫy kỹ thuật thường gặp: Windows lưu bộ nhớ đệm phiên kết nối (Credential Caching). Nếu bạn đã lỡ đăng nhập bằng user tuan_nv, khi bấm sang thư mục kế toán, Windows sẽ báo lỗi truy cập ngay chứ không hiện form hỏi mật khẩu mới.

Muốn xóa sạch phiên đăng nhập cũ để thử lại, hãy mở CMD (Command Prompt) trên Windows và chạy lệnh:

net use * /delete /y

Lời kết

Chia sẻ file giữa Linux và Windows không hề phức tạp khi bạn nắm vững nguyên lý phân quyền kép: quyền thư mục Linux (chmod/chown) và quyền chia sẻ Samba (smb.conf). Khi hai lớp bảo vệ này đồng bộ, file server sẽ chạy mượt mà, phân quyền rõ ràng và loại bỏ triệt để các phiền toái thường ngày của đội ngũ IT.

Share: