hoatranlab.io.vn Zalo: 0917516878 Hotline: 0917516878 [email protected]
HoaTranLab Logo HoaTranLab
Linux Bible 11th Edition • Chapter 19

Configuring a Windows File Sharing (Samba) Server

Tìm hiểu cách cài đặt và cấu hình Samba để chia sẻ file và máy in giữa Linux và Windows, cấu hình smb.conf, quản lý users và bảo mật với SELinux và firewall.

Mục tiêu chương

Nắm vững cách cấu hình Samba để chia sẻ file giữa Linux và Windows

Cài đặt Samba

Cài gói samba và samba-common, khởi động smb và nmb service, kiểm tra với smbclient để xác nhận Samba đang chạy.

Cấu hình smb.conf

Hiểu cấu trúc smb.conf: section [global], [homes], [printers] và cách tạo custom share. Cấu hình workgroup, security, passdb backend.

Tạo Shared Folder

Tạo thư mục chia sẻ, set permissions Linux và SELinux context (samba_share_t), thêm vào smb.conf với valid users và read only settings.

Quản lý Samba Users

Dùng smbpasswd để thêm và đổi mật khẩu Samba (có thể khác password Linux), quản lý database passwords với tdbsam backend.

smbclient & Mount CIFS

Dùng smbclient để kết nối và test shares, mount Samba share từ Linux với mount -t cifs, cấu hình /etc/fstab cho auto-mount.

SELinux & Firewall Samba

Mở port TCP 445/139 và UDP 137/138 trong firewall, cấu hình SELinux Booleans (samba_enable_home_dirs) và file contexts (samba_share_t).

Lý thuyết

Cài đặt và khởi động Samba

Samba cần hai daemon: smbd (file/print sharing, port TCP 445 và 139) và nmbd (NetBIOS name resolution, port UDP 137/138). Sau khi cài, dùng smbclient để test.

Terminal — Cài đặt Samba

$ sudo dnf install samba samba-common samba-client

Installed: samba-4.22.3-1.fc42.x86_64

# Start smb và nmb services

$ sudo systemctl enable --now smb nmb

$ sudo systemctl status smb

● smb.service - Samba SMB Daemon

Active: active (running)

Main PID: 7947 (smbd)

Status: "smbd: ready to serve connections..."

# Kiểm tra kết nối ban đầu (anonymous)

$ smbclient -L localhost

Password for [SAMBA\user]: [Enter]

Anonymous login successful

Sharename Type Comment

IPC$ IPC IPC Service (Samba 4.22.3)

Cấu hình smb.conf

File cấu hình chính: /etc/samba/smb.conf. Gồm các sections: [global] (cài đặt chung), [homes] (home directories), [printers] (máy in), và các custom shares.

/etc/samba/smb.conf

[global]

workgroup = SAMBA

security = user

passdb backend = tdbsam

printing = cups

printcap name = cups

load printers = yes

cups options = raw

netbios name = FEDORA42

log file = /var/log/samba/log.%m

max log size = 50

[homes]

comment = Home Directories

valid users = %S, %D%w%S

browseable = No

read only = No

inherit acls = Yes

[printers]

comment = All Printers

path = /var/tmp

browseable = no

printable = yes

create mask = 0600

[salesdata]

comment = Sales data for current year

path = /var/salesdata

read only = no

valid users = chris

Quản lý Users và kiểm tra với smbclient

Samba dùng database riêng cho passwords (tdbsam). Lệnh smbpasswd quản lý Samba passwords (có thể khác password Linux). Dùng smbclient để test từ command line.

Terminal — smbpasswd & smbclient

# Thêm Samba password cho user chris

$ sudo smbpasswd -a chris

New SMB password: *********

Retype new SMB password: *********

Added user chris.

# Kiểm tra shares có sẵn (với user chris)

$ smbclient -L localhost -U chris

Password for [SAMBA\chris]: ****

Sharename Type Comment

salesdata Disk Sales data for current year

print$ Disk Printer Drivers

chris Disk Home Directories

# Kết nối và dùng share

$ smbclient -U chris //localhost/salesdata

Password: ****

smb: \> ls

test N 0 Mon Jul 27 05:20:17 2025

smb: \> put /etc/hosts hosts

putting file hosts (43.5 kb/s)

smb: \> quit

# Mount Samba share từ Linux (CIFS)

$ sudo mount -t cifs //192.168.1.100/salesdata /mnt/sales \

-o username=chris,password=secret

$ ls /mnt/sales

hosts test

Firewall và SELinux cho Samba

Samba cần port TCP 445 (chính), TCP 139 (legacy), UDP 137-138 (NetBIOS). SELinux cần context samba_share_t trên thư mục chia sẻ và Booleans phù hợp.

Terminal — Firewall & SELinux

# Mở firewall cho Samba

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

success

$ sudo firewall-cmd --reload

# Tạo thư mục share với permissions đúng

$ sudo mkdir /var/salesdata

$ sudo chmod 775 /var/salesdata

$ sudo chown chris:chris /var/salesdata

# Set SELinux context cho Samba share

$ sudo semanage fcontext -a -t samba_share_t /var/salesdata

$ sudo restorecon -v /var/salesdata

Relabeled /var/salesdata to samba_share_t

# SELinux Booleans quan trọng

# Cho phép home directory qua Samba

$ sudo setsebool -P samba_enable_home_dirs on

# Cho phép share any file read-only

$ sudo setsebool -P samba_export_all_ro on

# Cho phép share any file read/write

$ sudo setsebool -P samba_export_all_rw on

# Liệt kê tất cả Samba Booleans

$ semanage boolean -l | egrep "smb|samba"

Lab Thực Hành

Kịch bản: Cài Samba, tạo shared folder /var/projects, cấp quyền cho user devteam, test từ smbclient và mount CIFS

1

Cài đặt Samba

Terminal

$ sudo dnf install -y samba samba-common samba-client

$ sudo systemctl enable --now smb nmb

$ sudo systemctl status smb | grep Active

Active: active (running)

2

Tạo user và Samba password

Terminal

$ sudo useradd devteam

$ sudo passwd devteam

$ sudo smbpasswd -a devteam

New SMB password: ***** Added user devteam.

3

Tạo thư mục chia sẻ

Terminal

$ sudo mkdir /var/projects

$ sudo chown devteam:devteam /var/projects

$ sudo chmod 770 /var/projects

$ sudo semanage fcontext -a -t samba_share_t "/var/projects(/.*)?"

$ sudo restorecon -Rv /var/projects

Relabeled /var/projects to samba_share_t

4

Thêm share vào smb.conf

/etc/samba/smb.conf — thêm vào cuối

[projects]

comment = Development Projects

path = /var/projects

valid users = devteam

read only = no

browseable = yes

$ sudo systemctl restart smb

5

Mở firewall và bật SELinux Boolean

Terminal

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

$ sudo firewall-cmd --reload

$ sudo setsebool -P samba_enable_home_dirs on

$ sudo setsebool -P samba_export_all_rw on

6

Test và mount CIFS

Terminal

$ smbclient -L localhost -U devteam

projects Disk Development Projects

$ sudo mkdir /mnt/projects

$ sudo mount -t cifs //localhost/projects /mnt/projects -o username=devteam

$ ls /mnt/projects

# Thêm vào /etc/fstab cho auto-mount:

//server/projects /mnt/projects cifs credentials=/etc/samba/creds,_netdev 0 0

Câu hỏi ôn tập

1

Samba gồm hai daemon chính là gì? Mỗi daemon có nhiệm vụ gì?

smbd: cung cấp file sharing và print sharing qua SMB protocol (port TCP 445 và 139). nmbd: cung cấp NetBIOS name resolution, map tên máy tính sang địa chỉ IP (port UDP 137 và 138). smbd là service bắt buộc, nmbd cần thiết khi không có Windows domain controller.

2

smb.conf có cấu trúc gồm những sections nào và chức năng mỗi section?

[global]: cài đặt toàn server (workgroup, security, passdb backend, printing)
[homes]: cấu hình home directories của Samba users
[printers]: chia sẻ máy in qua CUPS
[print$]: thư mục chứa printer drivers
Custom sections như [salesdata]: các shared folders tùy chỉnh

3

Lệnh nào dùng để thêm/đổi Samba password? Samba password có khác Linux password không?

sudo smbpasswd -a username — thêm user vào Samba database. sudo smbpasswd username — đổi password. , Samba password được lưu riêng trong TDB database (tdbsam backend) và hoàn toàn độc lập với Linux system password trong /etc/shadow.

4

SELinux context nào cần được set trên thư mục chia sẻ qua Samba?

Context samba_share_t cần được set. Lệnh: semanage fcontext -a -t samba_share_t "/var/myshare(/.*)?" rồi restorecon -Rv /var/myshare. Để cho phép home directories qua Samba: setsebool -P samba_enable_home_dirs on.

5

Lệnh mount nào để mount Samba share từ Linux? Và cú pháp /etc/fstab?

Mount thủ công: mount -t cifs //server/share /mnt/point -o username=user,password=pass
/etc/fstab: //server/share /mnt/point cifs credentials=/etc/samba/creds,_netdev 0 0
File credentials: username=user, password=pass (chmod 600)

6

smbclient -L localhost cho output gì? Dùng để làm gì?

smbclient -L localhost liệt kê tất cả shares available từ Samba server, bao gồm Disk shares (thư mục), Printer shares (máy in), và IPC shares. Dùng để test Samba đang chạy và xem shares có được chia sẻ đúng không. Dùng -U username để xem với quyền user cụ thể.

7

Các ports nào cần mở trong firewall cho Samba hoạt động?

- TCP port 445: SMB chính (bắt buộc)
- TCP port 139: NetBIOS session (legacy SMB1 compatibility)
- UDP port 137: NetBIOS name service (cho nmbd)
- UDP port 138: NetBIOS datagram service (cho nmbd)
Lệnh nhanh: firewall-cmd --permanent --add-service=samba

8

Directive "valid users" trong smb.conf có tác dụng gì?

valid users chỉ định danh sách Samba users/groups được phép truy cập share đó. Ví dụ: valid users = chris, @admins — chỉ cho phép user chris và members của group admins. %S là variable đặc biệt thay thế bằng service name (dùng trong [homes] section).