Giới thiệu về giao thức SMB và SAMBA
SMB (Server Message Block) là một giao thức chia sẻ tài nguyên mạng được IBM phát triển ban đầu cho các hệ điều hành DOS. Sau này, Microsoft đã cải tiến và phát hành phiên bản CIFS (Common Internet File System). SAMBA ra đời vào năm 1991 bởi Andrew Tridgell, đóng vai trò là một bộ phần mềm mã nguồn mở cho phép các hệ thống Unix-like (như Linux) giao tiếp và chia sẻ tài nguyên tương thích hoàn toàn với hệ thống Windows.
Các tính năng chính của SAMBA
- Chia sẻ tệp tin và máy in giữa các nền tảng khác nhau.
- Xác thực người dùng tập trung cho các truy cập mạng.
- Hỗ trợ phân giải tên thông qua NetBIOS.
- Tích hợp với Windows Domain hoặc Active Directory (AD).
Kiến trúc hệ thống và các thành phần phần mềm
Dịch vụ SAMBA hoạt động dựa trên hai tiến trình chính:
- smbd: Quản lý việc chia sẻ file và máy in, hoạt động trên cổng TCP 139 và 445.
- nmbd: Phụ trách phân giải tên NetBIOS, hoạt động trên cổng UDP 137 và 138.
Các gói phần mềm cần thiết bao gồm:
samba: Gói dịch vụ chính cung cấp các tiến trình smb.samba-client: Công cụ phía máy khách để truy cập tài nguyên SMB.cifs-utils: Các tiện ích để mount hệ thống tệp tin mạng.
Cấu hình tệp tin smb.conf
Tệp cấu hình chính nằm tại /etc/samba/smb.conf. Tệp này sử dụng định dạng .ini với các phân đoạn (sections) được đặt trong dấu ngoặc vuông.
Các biến Macro thường dùng
%u: Tên người dùng hiện tại.%m: Tên NetBIOS của máy khách.%I: Địa chỉ IP của máy khách.%H: Đường dẫn thư mục cá nhân (home directory) của người dùng.
Tham số cấu hình toàn cục [global]
[global]
workgroup = WORKGROUP
server string = Linux Samba Server
log file = /var/log/samba/log.%m
max log size = 100
security = user
passdb backend = tdbsam
hosts allow = 192.168.1. 127.
Hướng dẫn triển khai thực tế
Bước 1: Cài đặt dịch vụ
Trên các hệ thống dựa trên Debian/Ubuntu:
sudo apt update && sudo apt install samba -y
Trên các hệ thống dựa trên RHEL/CentOS/Fedora:
sudo dnf install samba -y
Bước 2: Quản lý người dùng SAMBA
Người dùng SAMBA phải là người dùng tồn tại trên hệ thống Linux, nhưng mật khẩu truy cập SMB được quản lý riêng.
# Tạo người dùng hệ thống không có quyền login shell
sudo useradd -M -s /sbin/nologin storage_user
# Thiết lập mật khẩu SAMBA cho người dùng
sudo smbpasswd -a storage_user
# Xem danh sách người dùng đã tạo
sudo pdbedit -L
Bước 3: Cấu hình thư mục chia sẻ
Giả sử chúng ta cần tạo một thư mục chia sẻ có tên ProjectData:
sudo mkdir -p /srv/samba/project
sudo chmod 777 /srv/samba/project
Thêm đoạn mã sau vào cuối tệp /etc/samba/smb.conf:
[ProjectData]
comment = Professional Shared Space
path = /srv/samba/project
valid users = storage_user
public = no
writable = yes
browseable = yes
Sau khi chỉnh sửa, hãy kiểm tra lỗi cú pháp và khởi động lại dịch vụ:
testparm
sudo systemctl restart smbd nmbd
sudo systemctl enable smbd nmbd
Kết nối từ máy khách (Client)
Truy cập từ Linux
Để gắn (mount) thư mục chia sẻ vào một thư mục cục bộ:
mount -t cifs -o username=storage_user,password=your_pass //192.168.1.100/ProjectData /mnt/samba_share
Để cấu hình mount tự động qua /etc/fstab an toàn hơn, hãy sử dụng tệp credentials:
# /etc/smb_creds
username=storage_user
password=your_pass
# Cấu hình trong /etc/fstab
//192.168.1.100/ProjectData /mnt/samba_share cifs credentials=/etc/smb_creds,iocharset=utf8 0 0
Truy cập từ Windows
Mở File Explorer và nhập vào thanh địa chỉ:
\\192.168.1.100\ProjectData
Cấu hình nâng cao: Phân tách tài nguyên theo người dùng
Trong một số trường hợp, bạn muốn cùng một tên chia sẻ nhưng trỏ đến các thư mục khác nhau tùy vào người dùng đăng nhập. Điều này có thể thực hiện bằng cách sử dụng tham số config file trong phần [global].
[global]
config file = /etc/samba/conf.d/%U.conf
Ví dụ: Khi người dùng admin_dev đăng nhập, SAMBA sẽ nạp thêm tệp cấu hình tại /etc/samba/conf.d/admin_dev.conf. Trong tệp này, bạn có thể định nghĩa lại đường dẫn path hoặc quyền hạn cụ thể cho riêng người dùng đó mà không ảnh hưởng đến cấu hình chung của hệ thống.