Server
Webpack (Bài trước)
(Bài tiếp) Rsync

Samba Server và SBM

Samba là một phần mềm nguồn mở (https://samba.org), nó cho phép chia sẻ file (tạo file server) với giao thức SMB (Server Message Block) giữa các nền tảng Linux, Windows, macOS. Như đã biết SMB là giao thức chia sẻ file qua mạng mặc định được sử dụng trong hệ điều hành Windows. Tài liệu đầy đủ về Samba xem tại Samba Document

Mặc định Samba Server sử dụng cổng 139445 (giao thức TCP), nhớ cổng này để mở firewall hoặc ánh xạ cổng nếu sử dụng với Docker ...

Sử dụng Samba Server trên CentOS 7

Cài đặt Samba Server

yum update -y
yum install samba -y

systemctl enable smb.service
systemctl enable nmb.service
systemctl restart smb.service
systemctl restart nmb.service

CentOS 7 có thể cần mở firewall cho Samba

firewall-cmd --permanent --zone=public --add-service=samba
firewall-cmd --reload

Ngoài sử dụng systemctl để quản lý dịch vụ sbm samba, bạn cũng có thể sử dụng một số lệnh, như (Những lệnh này có thể có ích khi bạn chạy Samba trên Docker):

smbcontrol smbd shutdown                # Tắt Samba
smbd                                    # chạy Samba
    

Chia sẻ một thư mục public

Sau khi cài đặt, có file cấu hình mặc định tại /etc/samba/smb.conf, ta sẽ lưu file cấu hình này lại và tạo file smb.conf mới cấu hình theo nhu cầu cụ thể như sau:

mv /etc/samba/smb.conf /etc/samba/smb.conf.bak     # Sao lưu
vi /etc/samba/smb.conf      

Nhập vào nội dung sau:

[global]
workgroup = WORKGROUP
server string = My Samba Server
netbios name = centos
security = user
map to guest = bad user
dns proxy = no

#=== BAT DAU THIET LAP CHIA SE FILE
[PublicShare]
path = /samba/publicshare
browsable = yes
writable = yes
guest ok = yes
read only = no

Lưu file này lại. Ở đây định nghĩa một khối chia sẻ file có tên là PublicShare, nghĩa là sau này các máy client kết nối đến bằng địa chỉ IP/PublicShare (Có thể thay địa chỉ IP bằng domain, tên máy mạng nội bộ). Khối này chia sẻ thư mục /samba/publicshare, nên nếu chưa có cần tạo và thiết lập:

mkdir -p /samba/publicshare/
chmod -R 0755 /samba/publicshare/
chown -R nobody:nobody /samba/publicshare/

Sau thiết lập trên, khởi động lại Samba

# CentOS 7
systemctl restart smb.service
systemctl restart nmb.service
# NẾU KHÔNG DÙNG ĐƯỢC systemctl
smbcontrol smbd shutdown
smbd

Kết nối từ Windows đến Samba Server

Giả sử Server trên có địa chỉ IP là 192.168.1.5, thì tạo chỉ việc Map ổ đĩa mạng trong Windows, như sau:

Trong File Explorer phải chuột chọn Map network drive ...

samba widows samba widows samba widows

Như vậy đã có thể truy cập thư mục chia sẻ từ máy chạy CentOS qua mạng. Tương tự nếu trên macOS, kết nối đến thì từ Finder nhấn Command + K và điền địa chỉ smb://192.168.1.5/PublicShare

samba widows

Hoặc từ Ubuntu, ở Files chọn Other locations rồi điền địa chỉ smb://192.168.1.5/PublicShare vào mục connect to Server, xong bấm Connect

samba widows samba widows

Thư mục chia sẻ được bảo mật

Nếu muốn tạo ra một thư mục chia sẻ qua Samba mà cần phải đăng nhập (cung cấp user / pass) thì làm tương như sau:

Đầu tiện tạo ra một group có tên là smbgroup và một user thuộc group này tên là testuser

useradd testuser                        # tạo testuser
groupadd smbgroup                       # Tạo group smbgroup
usermod -a -G smbgroup testuser         # Gán group cho user
smbpasswd -a testuser                   # Tạo password cho testuser trong Samba (Khi hỏi, Nhập 2 lần password để thiết lập - nhớ kỹ password này, nếu quyên chạy lại để reset)

Giả sử thư mục có thiết lập bảo mật là ở /samba/mydata, hãy tạo thư mục và các thiết lập bằng lệnh:

mkdir -p /home/mydata/
chown -R testuser:smbgroup /home/mydata/
chmod -R 0770 /home/mydata/
chcon -t samba_share_t /home/mydata/

Mở lại file cấu hình

vi /etc/samba/smb.conf

Thêm vào khối mới, đặt tên là Mydata như sau

[Mydata]
path = /home/mydata/
valid users = @smbgroup
guest ok = no
writable = yes
browsable = yes

Sau đó cần khởi động lại Samba (xem phần trên). Giờ khi ở các máy Client (Windows, macOS, Ubuntu) truy cập đến smb://192.168.1.5/Mydata nó sẽ hỏi User/Password, cần điền đúng mới truy cập được.

Cài đặt Client Samba và sử dụng

Samba ngoài cung cấp tạo Server chia sẻ file SBM như trên, nó cũng cung cấp gói phần mềm có thể cài ở các máy Client ví dụ ở một máy CentOS khác để tạo chức năng kết nối đến server Samba ở trên.

Để cài đặt, ở Client CentOS gõ lệnh:

yum update -y
yum -y install samba-client cifs-utils samba-common -y

Giờ ta sẽ mount ổ đĩa Server ở địa chỉ //192.168.1.5/Mydata vào máy Client

mkdir -p /mnt/mydata                # Tạo thư mục để Mount
groupadd --gid 2000 smbgroup        # Thêm một Group giống tên group trên Server
usermod -aG smbgroup root           # Gán group cho user (login) ví dụ root

Kết nối thử với testuser (user do server cung cấp)

smbclient -L //192.168.1.5/Mydata -U testusers

Nếu sau khi nhập Password thành công thì dùng lệnh sau để Mount ổ đĩa

mount -t cifs -o user=testuser,password=123456 //192.168.1.5/Mydata  /mnt/mydata

Như vậy từ giờ ở máy Client truy cập vào /mnt/mydata chính là đang truy cập ổ mạng //192.168.1.5/Mydata

Nếu Client chạy bằng Docker, để mount được khi chạy container cần cho tham số --cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH

Samba Server trên Debian

Đối với Debian cấu hình và sử dụng tương tự CentOS, sau đây là lệnh cài đặt, bạn có thể áp dụng với Container chạy Debian (từ Image debian:stretch)

apt-get update -y
apt-get install samba vim -y

Tương tự CentOS, bạn có thể

smbcontrol smbd shutdown                # Tắt Samba
smbd                                    # chạy Samba
    

Bạn cũng có thể chạy, để theo dõi lỗi nếu có smbd -FS -d 2 < /dev/null

Chú ý, nếu muốn thực hành trên Container có thể tạo nó

docker run -it --rm  -v $(pwd):/data/ -p 139:139 -p 445:445 debian:stretch

Samba Server trên Ubuntu

Bạn cũng có thể thực hành trên Ubuntu Container

docker run -it --rm  -v $(pwd):/data/ -p 139:139 -p 445:445 ubuntu

Gõ các lệnh để cài đặt:

apt-get update -y
apt-get install samba vim -y

Sử dụng và cấu hình tương tự trên CentOS, Debian

Samba Server trên Docker Container

Bạn có thể chạy Samba Server trên Docker container, tham khảo ví dụ sau:

Sambar Docker

Đăng ký nhận bài viết mới
Webpack (Bài trước)
(Bài tiếp) Rsync