Akemi

SMB文件共享协议--在linux上通过SMB实现共享

2025/04/15

使用步骤:

  • 安装与部署
  • 准备共享目录
  • 写配置文件
  • 准备用户与smb用户数据库

部署与初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
hostnamectl set-hostname samba-server && bash
systemctl disable firewalld.service --now
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

yum -y install samba

# 准备共享目录
mkdir /data/smb -p

groupadd ws
chgrp ws /data/smb
chmod 2775 /data/smb

配置文件详解

分global区域与共享区域,共享区域配置优先级高于global

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[global]
# 基础设置
workgroup = WORKGROUP # 与 Windows 客户端的工作组名称一致(默认 WORKGROUP)
server string = File Server # 客户端看到的服务器描述(自定义名称,如“财务部文件服务器”)
netbios name = FILESERVER # 客户端通过此名称访问(如 \\FILESERVER,需唯一且不含空格)
# 网络与安全
security = user # 认证模式:user(需账号密码)、share(匿名访问,不安全)
passdb backend = tdbsam # 用户数据库类型(tdbsam 适合小型环境,文件存储在本地)
hosts allow = 192.168.1.0/24 # 全局IP白名单(允许 192.168.1.x 访问,逗号分隔多IP/网段)
# 日志管理
log file = /var/log/samba/log.%m # 按客户端IP分日志(%m=客户端名,%I=客户端IP)
max log size = 50 # 单个日志最大50MB,超出后自动轮转(单位:MB)
# 协议优化
client min protocol = SMB2 # 禁用老旧且不安全的 SMB1(Windows 7+ 支持 SMB2/SMB3)
map to guest = Bad User # 用户名错误时映射为访客(需共享单独启用 guest ok = Yes)

[public] # 共享名称(客户端通过 `\\服务器IP\public` 访问此共享)
comment = 公共共享目录 # 共享描述(仅用于备注,不影响实际功能)
path = /data/samba # 共享目录的物理路径(必须真实存在且权限正确)
browseable = Yes # 在网络邻居中显示此共享(设为 No 则隐藏,但可通过路径直接访问)
read only = No # 允许写入(等效于 `writable = Yes`,二者选一即可)
valid users = @samba_users # 仅允许 `samba_users` 组的成员访问(`@` 表示组名)
create mask = 0664 # 新建文件的默认权限(所有者读写,组和其他人只读)
directory mask = 0775 # 新建目录的默认权限(所有者读写执行,组和其他人读执行)
inherit acls = Yes # 继承父目录的 ACL 规则(需文件系统支持且父目录已设置默认 ACL)
force group = samba_users # 强制文件/目录的所属组为 `samba_users`(需用户属于该组)
guest ok = No # 禁止匿名访问(必须提供有效用户账号密码)
hosts allow = 192.168.1.0/24 # 仅允许 192.168.1.x 网段的客户端访问(支持 CIDR 格式)

配置文件修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[global]
workgroup = SAMBA
security = user

passdb backend = tdbsam

printing = cups
printcap name = cups
load printers = yes
cups options = raw

[wangsheng]
comment = its a test
path = /data/smb # 共享出来的目录
valid users = xhy, @ws # 允许xhy和ws组下的用户
browseable = No # 在网络上是否可见
read only = No # 可写
write list = @ws # ws组可写


# 检测配置文件
testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)

Server role: ROLE_STANDALONE

准备用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
useradd -g ws -s /sbin/nologin ws1
useradd -g ws -s /sbin/nologin ws2
useradd -s /sbin/nologin ws3
useradd -s /sbin/nologin xhy

# 添加为Samba用户并设置密码
smbpasswd -a ws1
smbpasswd -a ws2
smbpasswd -a ws3
smbpasswd -a xhy

pdbedit -L
ws1:1000:
ws3:1002:
ws2:1001:
xhy:1003:

systemctl enable smb --now

在Linux上进行挂载

使用用户ws1(属于ws组,具有读写权限)

手动挂载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
hostnamectl set-hostname smb-client1 && bash
yum -y install cifs-utils
# 准备目录
mkdir /samba-share

mount -t cifs -o username=ws1,password=ws1 //10.163.2.102/wangsheng /samba-share

df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 3.8G 0 3.8G 0% /dev/shm
tmpfs tmpfs 1.6G 8.6M 1.5G 1% /run
/dev/mapper/cs-root xfs 46G 3.3G 42G 8% /
/dev/sda1 xfs 960M 326M 635M 34% /boot
tmpfs tmpfs 769M 4.0K 769M 1% /run/user/0
//10.163.2.102/wangsheng cifs 46G 3.4G 42G 8% /samba-share

# 测试写权限
touch /samba-share/test111
ls /samba-share/ -l
total 0
-rwxr-xr-x. 1 root root 0 Apr 15 21:00 test111

持久化挂载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
echo \
'//10.163.2.102/wangsheng /samba-share cifs defaults,username=ws1,password=ws1 0 0' \
>> /etc/fstab

# 测试/etc/fstab挂载
umount /samba-share

df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 3.8G 0 3.8G 0% /dev/shm
tmpfs tmpfs 1.6G 8.6M 1.5G 1% /run
/dev/mapper/cs-root xfs 46G 3.3G 42G 8% /
/dev/sda1 xfs 960M 326M 635M 34% /boot
tmpfs tmpfs 769M 4.0K 769M 1% /run/user/0

mount -a

df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 3.8G 0 3.8G 0% /dev/shm
tmpfs tmpfs 1.6G 8.6M 1.5G 1% /run
/dev/mapper/cs-root xfs 46G 3.3G 42G 8% /
/dev/sda1 xfs 960M 326M 635M 34% /boot
tmpfs tmpfs 769M 4.0K 769M 1% /run/user/0
//10.163.2.102/wangsheng cifs 46G 3.4G 42G 8% /samba-share

测试使用无权限用户

xhy这个用户是只读不可写的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
hostnamectl set-hostname smb-client2 && bash
yum -y install cifs-utils
mkdir /samba-share
mount -t cifs -o username=xhy,password=xhy //10.163.2.102/wangsheng /samba-share
df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 3.8G 0 3.8G 0% /dev/shm
tmpfs tmpfs 1.6G 8.6M 1.5G 1% /run
/dev/mapper/cs-root xfs 46G 3.3G 42G 8% /
/dev/sda1 xfs 960M 326M 635M 34% /boot
tmpfs tmpfs 769M 4.0K 769M 1% /run/user/0
//10.163.2.102/wangsheng cifs 46G 3.4G 42G 8% /samba-share

# 测试可读
ls /samba-share/
test111
cp /samba-share/test111 ~

# 测试可写
touch /samba-share/test2222
touch: cannot touch '/samba-share/test2222': Permission denied

在windows上进行挂载

临时挂载

打开windows的运行

输入\10.163.2.102\wangsheng

弹出用户验证框,随后就可以访问到了,并且可以创建文件(可写)

永久挂载

计算机——映射网络驱动器

CATALOG
  1. 1. 部署与初始化
  2. 2. 配置文件详解
  3. 3. 配置文件修改
  4. 4. 准备用户
  5. 5. 在Linux上进行挂载
  6. 6. 在windows上进行挂载