Cách cấu hình máy chủ tệp Samba trên Linux để chia sẻ tệp đa nền tảng

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

Bối cảnh & Lý do: Kết nối các hệ thống đa dạng để chia sẻ tệp

Trong nhiều môi trường CNTT, bạn sẽ thấy sự pha trộn giữa các hệ thống Windows, macOS và Linux. Việc làm cho chúng chia sẻ tệp mượt mà có thể khó khăn. Mỗi hệ điều hành thường ưu tiên các giao thức chia sẻ tệp riêng của mình. Ví dụ, Windows dựa vào Server Message Block (SMB), trong khi Linux thường sử dụng Network File System (NFS). Khi các hệ thống này cần tương tác, một vấn đề chung nảy sinh: làm thế nào để bạn bật chia sẻ tệp đa nền tảng mà không cần dùng đến các giải pháp thay thế khó xử?

Thử thách này bắt nguồn từ các giao thức chia sẻ tệp gốc không tương thích. Máy khách Windows mong đợi các chia sẻ SMB/CIFS, nhưng một máy chủ Linux tiêu chuẩn không cung cấp khả năng đó theo mặc định. Đây chính xác là nơi Samba phát huy tác dụng.

Samba là một triển khai lại miễn phí, mã nguồn mở của giao thức mạng SMB/CIFS. Nó cho phép các máy chủ Linux hoạt động như máy chủ tệp và máy chủ in cho các máy khách Windows, và ngược lại. Về bản chất, nó chuyển đổi hệ thống tệp Linux sang một định dạng mà các máy khách Windows và macOS có thể dễ dàng hiểu và truy cập.

Thiết lập máy chủ Samba cung cấp một cách hiệu quả để tạo một trung tâm lưu trữ tập trung. Trung tâm này có thể truy cập được từ bất kỳ hệ điều hành nào trên mạng của bạn. Nó đáng tin cậy, được hỗ trợ rộng rãi và cung cấp tính linh hoạt quan trọng cho các môi trường CNTT hỗn hợp.

Cài đặt: Chuẩn bị hệ thống của bạn cho Samba

Đầu tiên, bạn cần cài đặt các gói Samba trên máy chủ Linux của mình. Quy trình cài đặt chính xác sẽ phụ thuộc vào bản phân phối Linux của bạn.

Đối với các hệ thống dựa trên Debian/Ubuntu:


sudo apt update
sudo apt install samba

Đối với các hệ thống dựa trên Red Hat/CentOS/Fedora:


sudo dnf install samba samba-client

Sau khi cài đặt, dịch vụ Samba sẽ đang chạy. Bạn có thể kiểm tra trạng thái của nó:


sudo systemctl status smbd

Nếu nó không hoạt động, hãy khởi động và bật nó để chạy khi khởi động:


sudo systemctl start smbd
sudo systemctl enable smbd

Cấu hình: Xác định các thư mục chia sẻ và quyền truy cập của bạn

Tệp cấu hình chính của Samba là /etc/samba/smb.conf. Luôn sao lưu cấu hình gốc trước khi thực hiện bất kỳ thay đổi nào.


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

Thiết lập một thư mục chia sẻ

Bắt đầu bằng cách tạo thư mục bạn muốn chia sẻ. Chẳng hạn, hãy tạo một thư mục có tên /samba/shared:


sudo mkdir -p /samba/shared
sudo chown -R nobody:nogroup /samba/shared
sudo chmod -R 0770 /samba/shared

Ở đây, chúng tôi đã gán quyền sở hữu cho nobody:nogroup và đặt quyền là 0770. Cấu hình này cung cấp quyền đọc, ghi và thực thi cho chủ sở hữu (nobody) và nhóm của nó (nogroup), đồng thời hạn chế tất cả quyền truy cập đối với những người dùng khác. Cách tiếp cận này hoạt động tốt cho các chia sẻ ẩn danh hoặc công khai cơ bản. Tuy nhiên, đối với các thiết lập an toàn hơn, bạn nên gán người dùng hoặc nhóm cụ thể thay vì nobody:nogroup.

Chỉnh sửa tệp cấu hình Samba (smb.conf)

Tiếp theo, mở /etc/samba/smb.conf bằng trình soạn thảo văn bản ưa thích của bạn (như nano hoặc vim):


sudo nano /etc/samba/smb.conf

Cuộn đến cuối tệp và thêm một phần mới cho thư mục chia sẻ của bạn. Dưới đây là một ví dụ cho một thư mục chia sẻ công khai, có thể ghi:


[PublicShare]
   comment = Thư mục chia sẻ Samba công khai của tôi
   path = /samba/shared
   browseable = yes
   writable = yes
   guest ok = yes
   read only = no
   create mask = 0770
   directory mask = 0770
  • [PublicShare]: Đây là tên thư mục chia sẻ của bạn sẽ hiển thị trên mạng.
  • comment: Một ghi chú mô tả cho thư mục chia sẻ.
  • path: Đường dẫn tuyệt đối đến thư mục đang được chia sẻ.
  • browseable = yes: Cho phép máy khách nhìn thấy thư mục chia sẻ này khi duyệt mạng.
  • writable = yes: Cho phép máy khách ghi vào thư mục chia sẻ này.
  • guest ok = yes: Cho phép truy cập của khách (không xác thực).
  • read only = no: Đặt rõ ràng thư mục chia sẻ không phải là chỉ đọc.
  • create maskdirectory mask: Xác định quyền cho các tệp và thư mục mới được tạo.

Cấu hình thư mục chia sẻ được bảo vệ bằng mật khẩu

Nếu bạn cần một thư mục chia sẻ an toàn hơn, bạn sẽ muốn yêu cầu xác thực người dùng. Bắt đầu bằng cách tạo một người dùng hệ thống đặc biệt để truy cập Samba nếu người dùng đó chưa tồn tại. Người dùng này không cần đăng nhập shell.


sudo adduser sambauser --no-create-home --shell /bin/false

Sau đó, thêm người dùng này vào cơ sở dữ liệu mật khẩu của Samba:


sudo smbpasswd -a sambauser

Bạn sẽ được nhắc đặt mật khẩu Samba cho sambauser. Mật khẩu này tách biệt với mật khẩu hệ thống của họ.

Bây giờ, sửa đổi quyền /samba/shared để phản ánh người dùng này:


sudo chown -R sambauser:nogroup /samba/shared
sudo chmod -R 0770 /samba/shared

Trong smb.conf, thêm một phần mới cho thư mục chia sẻ được bảo vệ này:


[ProtectedShare]
   comment = Thư mục chia sẻ Samba được bảo vệ của tôi
   path = /samba/shared
   browseable = yes
   writable = yes
   valid users = sambauser
   read only = no
   create mask = 0770
   directory mask = 0770
  • valid users = sambauser: Mục này hạn chế quyền truy cập, chỉ cho phép sambauser kết nối với thư mục chia sẻ này.

Thông tin cá nhân: Sau khi quản lý hơn một tá phiên bản Linux VPS trong hơn ba năm, tôi đã học được tầm quan trọng cốt yếu của việc thử nghiệm kỹ lưỡng trước khi triển khai vào sản xuất. Bài học này đặc biệt liên quan đến các thư mục chia sẻ tệp, nơi các quyền không chính xác có thể dễ dàng dẫn đến rò rỉ dữ liệu hoặc các vấn đề truy cập gây khó chịu. Ngay cả một lỗi cú pháp nhỏ trong smb.conf cũng có thể ngăn thư mục chia sẻ của bạn hoạt động. Do đó, hãy luôn xác thực cấu hình của bạn bằng cách sử dụng testparm trước khi khởi động lại các dịch vụ.

Xác thực cấu hình và khởi động lại Samba

Sau khi sửa đổi smb.conf, hãy luôn kiểm tra lỗi cú pháp:


testparm

Lệnh này tải cấu hình Samba và kiểm tra tính đúng đắn bên trong của nó. Nếu nó không báo cáo lỗi, hãy khởi động lại dịch vụ Samba để áp dụng các thay đổi của bạn:


sudo systemctl restart smbd nmbd

Xác minh & Giám sát: Xác nhận quyền truy cập và bảo mật

Sau khi Samba được cấu hình, bước quan trọng tiếp theo là xác minh rằng các máy khách có thể kết nối và tương tác thành công với các thư mục chia sẻ của bạn.

Truy cập thư mục chia sẻ từ máy khách Windows

Mở File Explorer và trong thanh địa chỉ, nhập \\YOUR_LINUX_SERVER_IP\PublicShare (thay thế bằng địa chỉ IP hoặc tên máy chủ thực của máy chủ của bạn). Nếu bạn đã cấu hình thư mục chia sẻ được bảo vệ, bạn sẽ sử dụng \\YOUR_LINUX_SERVER_IP\ProtectedShare và được nhắc nhập thông tin đăng nhập sambauser.

Truy cập thư mục chia sẻ từ máy khách Linux

Để kiểm tra kết nối từ máy khách Linux, bạn có thể sử dụng tiện ích smbclient:


smbclient -L //YOUR_LINUX_SERVER_IP -U sambauser

Lệnh này liệt kê các thư mục chia sẻ có sẵn. Để kết nối với một thư mục chia sẻ cụ thể:


smbclient //YOUR_LINUX_SERVER_IP/ProtectedShare -U sambauser

Bạn cũng có thể gắn thư mục chia sẻ vĩnh viễn. Đầu tiên, cài đặt cifs-utils:


sudo apt install cifs-utils # Dành cho Debian/Ubuntu
sudo dnf install cifs-utils # Dành cho Fedora/RHEL

Tạo một điểm gắn kết:


sudo mkdir /mnt/sambashare

Sau đó, gắn thư mục chia sẻ:


sudo mount -t cifs //YOUR_LINUX_SERVER_IP/ProtectedShare /mnt/sambashare -o username=sambauser,password=YOUR_SAMBA_PASSWORD

Để gắn kết tự động khi khởi động, hãy thêm một mục vào /etc/fstab. Nên lưu trữ thông tin đăng nhập trong một tệp riêng để bảo mật:

Tạo một tệp thông tin đăng nhập (ví dụ: /home/youruser/.smbcredentials):


username=sambauser
password=YOUR_SAMBA_PASSWORD

Đặt quyền bảo mật cho tệp thông tin đăng nhập:


sudo chmod 600 /home/youruser/.smbcredentials

Thêm dòng sau vào /etc/fstab:


//YOUR_LINUX_SERVER_IP/ProtectedShare /mnt/sambashare cifs credentials=/home/youruser/.smbcredentials,uid=youruser,gid=yourgroup,forceuid,forcegid 0 0

Thay thế youruseryourgroup bằng tên người dùng và nhóm Linux cục bộ của bạn.

Cấu hình tường lửa

Điều quan trọng là phải cấu hình tường lửa của bạn để cho phép lưu lượng Samba. Samba chủ yếu giao tiếp qua các cổng 139 (NetBIOS Session Service) và 445 (SMB over TCP).

Đối với UFW (Ubuntu/Debian):


sudo ufw allow samba
sudo ufw enable

Đối với firewalld (Fedora/RHEL/CentOS):


sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload

Giám sát nhật ký Samba

Nhật ký Samba thường được tìm thấy trong /var/log/samba/. Kiểm tra các nhật ký này nếu bạn gặp sự cố trong quá trình xác minh. Ví dụ, log.smbd thường chứa thông tin chi tiết về các kết nối và lỗi.


tail -f /var/log/samba/log.smbd

Lệnh này sẽ hiển thị các mục nhật ký theo thời gian thực, điều này cực kỳ hữu ích để khắc phục sự cố kết nối hoặc quyền.

Bằng cách làm theo các bước chi tiết này, bạn có thể thiết lập thành công một máy chủ tệp Samba đáng tin cậy trên hệ thống Linux của mình. Điều này sẽ tạo điều kiện thuận lợi cho việc chia sẻ tệp mượt mà trên các hệ điều hành và mạng đa dạng. Luôn nhớ tinh chỉnh các quyền và cấu hình chia sẻ để phù hợp với các chính sách và nhu cầu bảo mật cụ thể của tổ chức bạn.

Share: