Samba là dịch vụ của hệ điều hành Linux, chạy trên nền giao thức SMB (Server Message Block) cho phép chia sẻ file và máy in với các máy chạy Windows. SMB là giao thức được các hệ điều hành của Microsoft sử dụng để chia sẻ dữ liệu qua mạng. Linux Samba cũng dựa vào giao thức SMB để viết ra một số tiến trình điển hình như smbd, nmbd, để “nói chuyện “ với các hệ điều hành của Microsoft để người dùng có thể làm việc với máy Linux qua Network Neighborhood.

1. Giới thiệu về Samba

Samba là một ứng ụng chạy trên Unix và nó mô phỏng một hệ thống Windows. Samba cho phép một hệ thống Unix gia nhập vào “Network neighborhood” và người dùng Windows có thể truy cập tài nguyên trên Unix.

Samba thực hiện được nhờ vào sự mô phỏng giao thức CIFS hay” Common Internet File System” và giao thức truyền tin SMB hay “Server Message Block”

Nói gọn lại samba là một phần mệ miễn phí chủ yếu sử dụng để chia sẻ file giữa các nền tảng khác nhau như Windows và Linux bằng cách sử dụng giao thức SMB/CIFS.

Samba bao gồm 2 chương trính chính và một số công cụ hỗ trợ. Hai chương trình chính là.

  • smbd : dịch vụ tệp và máy in, xác thực phân quyền truy cập tài nguyên.
  • nmdb : Phân giải tên và thông báo cá dịch vụ ra bên ngoài

Một sô công cụ hỗ trợ samba là.

  • smbclient: có chức năng tương tự NFS, kết nối từ hệ thống unix tới smb share của một hệ thống windows để truyền tệp, gửi tệp.
  • nmblookup: Phân giải tên NetBIOS. để tìm địa chỉ IP tương ứng và các thông tin của máy chạy Windows
  • swat : cho phép cấu hình samba qua giao diện web.

2. Mô hình

3. Hướng dẫn cấu hình Samba trên máy Centos

Chuẩn bị

  • 1 máy centos 7, 1 máy win
  • sử đụng chung dải mạng NAT

Cấu hình Samba Sever

  1. Tiến hành cài đặt các gói Samba:
yum install samba samba-client samba-common
  1. Cho phép Samba dùng tường lửa
firewall-cmd --permanent --zone=public --add-service=samba firewall-cmd --reload 

Hoặc mở port cho Samba kết nối :

firewall-cmd --permanent --add-port=137/tcp
firewall-cmd --permanent --add-port=138/tcp
firewall-cmd --permanent --add-port=139/tcp
firewall-cmd --permanent --add-port=445/tcp
firewall-cmd --permanent --add-port=901/tcp
firewall-cmd --reload

Cấu hình máy Win

  • Chuột phải vào

This PC hoặc My ComputerPropertiesAdvanced system settingsComputer Name.

Đổi workgroup của máy Win là WORKGROUP

  • Tắt hết tường lửa trên máy win

Lựa chọn 1: Truy cập chế độ công khai

Cấu hình trên Centos

1. Chạy lệnh sau để lưu 1 bản config.

cp /etc/samba/smb.conf /etc/samba/smb.conf.orig

2. Tạo một thư mục cần share và phân quyền cho thư mục

mkdir -p /srv/samba/anonymous
chmod -R 0775 /srv/samba/anonymous
chown -R nobody:nobody /srv/samba/anonymous

3. Cho phép truy cập từ SELinux

Tắt SELinux.

vim /etc/sysconfig/selinux 

Đặt giá trị SELINUX = disabled.

Reset máy để thay đổi có hiệu lực.

Cách khác :

Điểm lưu ý thêm là trong CentOS hệ thống bảo mật sử dụng bởi nhiều lớp, thư mục tuan hay public gì đó do ta tạo ra cũng cần phải báo cho SELinux biết rằng nó không phải là thư mục hệ thống được bảo vệ mà là thư mục quản lý bởi samba, điều này được thực hiện bằng lệnh

chcon –t samba_share_t  /<path-filename>

Ở demo này tôi làm như sau

chcon -t samba_share_t /srv/samba/anonymous

4. Chỉnh sửa file config

vim /etc/samba/smb.conf

Nội dung file config

[global]
	workgroup = WORKGROUP
	netbios name = centos
	security = user
[Anonymous]
	comment = Anonymous File Server Share
	path = /srv/samba/anonymous
	browsable =yes
	writable = yes
	guest ok = yes
	read only = no
	force user = nobody

5. Kiểm tra samba setting bằng câu lệnh sau

testparm

Nó sẽ in ra nội dung tương tự như sau

Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Processing section "[Anonymous]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
	netbios name = centos
	printcap name = cups
	security = USER
	idmap config * : backend = tdb
	cups options = raw
[homes]
	comment = Home Directories
	browseable = No
	inherit acls = Yes
	read only = No
	valid users = %S %D%w%S
[printers]
	comment = All Printers
	path = /var/tmp
	browseable = No
	printable = Yes
	create mask = 0600
[print$]
	comment = Printer Drivers
	path = /var/lib/samba/drivers
	create mask = 0664
	directory mask = 0775
	write list = root
[Anonymous]
 	comment = Anonymous File Server Share
	path = /srv/samba/anonymous
	force user = nobody
	guest ok = Yes
	read only = No

6. Bật và khởi động Samba Services để nó chạy tự động sau mỗi lần khởi động máy

systemctl enable smb.service
systemctl enable nmb.service
systemctl start smb.service
systemctl start nmb.service

Test thử trên máy win

  • Bấm tổ hợp phím Win + R
  • Nhập địa chỉ IP của Sever
\\192.168.43.168

Và chúng ta sẽ tìm thấy máy Centos như trong ảnh. Truy cập và thử tạo file

Lựa chọn 2: Truy cập chế độ bảo mật

Cấu hình trên Centos

Đầu tiên tạo người dùng và group muốn để bảo mật, sau đó đặt mật khẩu truy cập cho từng người dùng

groupadd smbgrp
usermod tecmint -aG smbgrp
smbpasswd -a tecmint

Sau đó tạo và phân quyền thư mục cho file

mkdir -p /srv/samba/secure
chmod -R 0770 /srv/samba/secure
chown -R root:smbgrp /srv/samba/secure
chcon -t samba_share_t /srv/samba/secure

Sau đó chỉnh sửa file config

vim /etc/samba/smb.conf

Nội dung file config

[Secure]
	comment = Secure File Server Share
	path =  /srv/samba/secure
	valid users = @smbgrp
	guest ok = no
	writable = yes
	browsable = yes

Kiểm tra

testparm

Khởi động lại dịch vụ

systemctl restart smb.service
systemctl restart nmb.service

Kiểm tra xem kết nối trên Win đã hoạt động

  • Bấm tổ hợp phím Win + R
  • Nhập địa chỉ IP của Sever
\\192.168.43.168

Và chúng ta đã bảo mât được thư mục Secure.

Nguồn tham khảo:

https://github.com/thanh474/thuc-tap/blob/master/tim-hieu-va-lab-samba/samba.md

https://uet.vnu.edu.vn/~thanhld/lects/netos/Tuan%2015%20-%20SMB.html

https://sites.google.com/site/anhtt01/bai-viet/centos/samba-server