Vấn đề thực tế: Khi hệ thống chia sẻ file “đình công” lúc nửa đêm
2 giờ sáng, điện thoại mình rung liên hồi. Đầu dây bên kia là giọng khẩn thiết của quản lý vận hành: Toàn bộ 50 nhân viên văn phòng không thể truy cập vào ổ đĩa dùng chung để lấy báo cáo thuế. Server cũ chạy CentOS 7 vừa sập nguồn do lỗi mainboard. Nhiệm vụ lúc này là phải dựng ngay một file server mới trên CentOS Stream 9 và chuyển hơn 500GB dữ liệu sang trước giờ làm việc sáng mai.
Nếu bạn từng rơi vào cảnh này, bạn sẽ hiểu áp lực khi cài xong Samba mà Windows vẫn trơ ra với lỗi “Windows cannot access \\server”. Trong đợt CentOS 8 EOL vừa qua, mình đã trực tiếp migrate hơn 10 hệ thống sang CentOS Stream 9. Kinh nghiệm xương máu cho thấy cấu hình Samba không hề khó. Cái khó nằm ở việc làm sao để nó “nói chuyện” được với SELinux và Firewall trên nhân Kernel 5.14 mới của RHEL 9.
Tại sao kết nối Samba của bạn thường xuyên thất bại?
Thực tế, có 3 rào cản chính khiến anh em quản trị mạng thường xuyên “vò đầu bứt tai” khi triển khai trên CentOS 9:
- Firewalld: Các port 137, 138, 139 và 445 mặc định bị đóng chặt.
- SELinux: Đây là lớp bảo mật gắt gao nhất. Nó chặn đứng Samba nếu thư mục chia sẻ không được dán đúng nhãn (context).
- Lỗi phân quyền kép: User có quyền trên giao thức SMB nhưng lại bị Linux chặn quyền đọc/ghi vật lý.
Cách xử lý: Đừng chọn giải pháp tạm thời
Nhiều người thường chọn cách setenforce 0 để tắt SELinux. Đây là sai lầm chết người. Làm vậy chẳng khác nào mở toang cửa nhà cho ransomware tấn công mạng nội bộ. Thay vào đó, hãy cấu hình chuẩn chỉ để hệ thống vừa chạy nhanh, vừa bảo mật tuyệt đối.
Các bước cài đặt Samba trên CentOS Stream 9
Bước 1: Cài đặt gói phần mềm và công cụ quản trị
Trước tiên, hãy cập nhật repository và cài đặt Samba. Mình khuyên bạn nên cài thêm policycoreutils-python-utils để quản lý SELinux dễ dàng hơn.
sudo dnf update -y
sudo dnf install samba samba-common samba-client policycoreutils-python-utils -y
Bước 2: Tạo thư mục và phân quyền Linux
Mình sẽ tạo một vùng lưu trữ cho phòng kế toán tại /samba/ke-toan. Tuyệt đối không chia sẻ trực tiếp thư mục /home vì lý do an toàn dữ liệu.
sudo mkdir -p /samba/ke-toan
sudo groupadd ketoangroup
sudo chown -R :ketoangroup /samba/ke-toan
sudo chmod -R 770 /samba/ke-toan
Bước 3: Quản lý User Samba
Mật khẩu của Samba độc lập với mật khẩu hệ thống. Ở đây, mình tạo user nhanvien01 và khóa quyền đăng nhập trực tiếp vào server để tăng tính bảo mật.
sudo useradd -M -s /sbin/nologin nhanvien01
sudo usermod -aG ketoangroup nhanvien01
sudo smbpasswd -a nhanvien01
Bước 4: Tối ưu file cấu hình smb.conf
Đừng quên backup file gốc trước khi chỉnh sửa. File cấu hình chuẩn giúp Windows nhận diện server nhanh hơn.
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
sudo vi /etc/samba/smb.conf
Dưới đây là cấu hình mình đã tinh chỉnh để đạt hiệu suất tốt nhất:
[global]
workgroup = WORKGROUP
server string = Samba Server Version %v
netbios name = FILE-SERVER-01
security = user
map to guest = bad user
# Ép buộc sử dụng SMB2 trở lên để bảo mật
server min protocol = SMB2
[KeToan]
comment = Thu muc Ke Toan
path = /samba/ke-toan
valid users = @ketoangroup
writable = yes
browsable = yes
create mask = 0660
directory mask = 0770
Bước 5: Vượt qua rào cản SELinux và Firewall
Đây là bước then chốt. Nếu thiếu nó, Windows sẽ báo lỗi “Permission Denied” ngay lập tức.
Với SELinux: Bạn cần dán nhãn samba_share_t cho thư mục để Samba có quyền truy xuất hợp lệ.
sudo semanage fcontext -a -t samba_share_t "/samba/ke-toan(/.*)?"
sudo restorecon -Rv /samba/ke-toan
Với Firewalld: Mở luồng cho các dịch vụ Samba đi qua tường lửa.
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload
Bước 6: Kích hoạt dịch vụ
Cuối cùng, hãy khởi động và thiết lập Samba tự chạy mỗi khi reboot server.
sudo systemctl enable --now smb nmb
Kiểm tra và nghiệm thu
Trên máy Windows, bạn nhấn Windows + R, gõ \\<IP_SERVER>. Nếu folder KeToan xuất hiện và cho phép copy file vào, bạn đã thành công.
Một mẹo nhỏ: Hãy luôn dùng lệnh testparm sau khi sửa file cấu hình. Nó sẽ giúp bạn phát hiện các lỗi cú pháp ngớ ngẩn trước khi restart dịch vụ. Quản trị CentOS Stream 9 không khó nếu bạn hiểu rõ cách SELinux vận hành. Chúc các bạn triển khai hệ thống ổn định!

