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:
- 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.
- 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:
- Nhấn tổ hợp phím
Windows + R, nhập\\192.168.1.100rồi nhấn Enter. - Hai thư mục xuất hiện: Public_Data và KeToan_Secret.
- Bấm vào KeToan_Secret, nhập tài khoản
lan_ktcù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.

