关于Samba所有你想知道的都记录在这里了
零、先说明具体环境
Windows 10专业版 1909,18363.778
VMware Workstation Pro 15.5.0
VMware 安装 CentOS 7.7,最小化安装,ip为: 192.168.1.32, hostname: pxecentos7
copy 这里下载 CentOS 7.7 安装包ISO文件 ,942MB
注意Vmware的虚拟机网络,要选择 【桥接模式】,这样其它机子才能访问到虚拟机。
一、CentOS安装配置Samba服务
1
yum -y install samba samba-client
copy
修改配置文件
1
vi /etc/samba/smb.conf
copy
全部内容为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[ global]
workgroup = WORKGROUP
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
map to guest = Bad User
passdb backend = tdbsam
security = USER
guest account = nobody
public = Yes
dns proxy = No
nt acl support = No
kernel oplocks = no
# hosts allow = 192.168.1.0/255.255.255.0
[ data]
comment = CentOS Samba Data
path = /data
read only = No
browseable = yes
public = yes
printable = no
guest ok = yes
copy
【注意】上面配置了一个有完整读写权限,并且不需要密码的共享目录 /data ,你应该知道这里的风险。
验证配置文件并启动服务:
1
2
3
testparm
systemctl start smb
systemctl start nmb
copy
二、安装使用过程中碰到的问题
第1个坑:
如果只启动了 smb,没有启动 nmb,那么Windows可以通过ip地址直接访问Samba,类似这样子 \\192.168.1.32\data 能够成功;但是不能使用主机名字(域名)访问,类似 \\pxecentos7\data 这样访问失败。
组成Samba运行的有两个服务,一个是smb,另一个是nmb;
smb 是 Samba 的核心启动服务,主要负责建立 Linux Samba服务器与Samba客户机之间的对话,验证用户身份并提供对文件和打印系统的访问,只有smb 服务启动,才能实现文件的共享,smb 监听139和445 TCP端口;
nmb 服务是负责解析用的,类似与DNS实现的功能,可以把Linux系统共享的工作组名称与其IP对应起来,如果nmb服务没有启动,就只能通过IP来访问共享文件,nmb 监听137和138 UDP端口。
可以检查一下CentOS端口使用情况,来确认一下。
1
2
yum -y install net-tools
netstat -tulpn | grep [ sn] mb
copy
应该要有监听 137,138,139,445 总共四个端口。
第2个坑:
Windows上 Win+R 直接 \\192.168.1.32\data 地址访问Samba正常,但是 文件资源管理器 的 【网络】(网上邻居)里面没有显示。
Win10,此电脑,右键,属性,查看计算机的当前工作组。 检查/etc/samba/smb.conf配置文件里面的 workgroup = ,这两项内容必须相同。
如果不相同,修改好 smb.conf 配置后,重启 smb, nmb 两个服务。(或者修改Win10的工作组后重启Windows)
这样改一致后,在Win10的【网络】(网上邻居)里面还是没有显示。原因是:
因安全原因,Win10的1709版本之后默认关闭了 SMB1.0/CIFS文件共享支持,导致linux系统使用Samba软件开启的共享在Win10的【网络】中不能被发现。网上大多数的解决办法是启用Win10的SMB1.0/CIFS文件共享支持,但这个方法只对支持SMB1协议的共享端有效,如共享端强制使用SMB1之上协议,在【网络】中还是发现不了共享主机。
这都 2020 年啦,你确定还要使用 1983 年的 SMB1.0协议吗?三十多年了 ,不管是从安全,还是从传输速度考虑都不应该用它。
正确的解决方法是使用Web Services Dynamic Discovery服务,现在可以使用github上的wsdd这个python3程序。无需设置Win10即可发现共享主机。
1
2
3
4
5
yum -y install unzip wget python3
wget https://github.com/christgau/wsdd/archive/master.zip
unzip master.zip
cp wsdd-master/src/wsdd.py /usr/bin/wsdd
cp wsdd-master/etc/systemd/wsdd.service /lib/systemd/system
copy
设置完成后,启动 systemctl start wsdd
查看状态 systemctl status wsdd
如果启动成功后在Win10的【网络】(网上邻居)中还是没有出现共享的Samba主机,则需要检测是否是CentOS防火墙屏蔽了3702、5357这两个端口。
简单粗暴的先把安全防护都关掉: (你应该知道这里有风险)
1
2
systemctl stop firewalld
setenforce 0
copy
第3个坑:
访问Samba正常,但是只能读,不能写,不能创建目录。
先确认/etc/samba/smb.conf配置文件内容,
再确认目录权限,试试777:
三、设置开机自动运行Samba服务
1
2
3
systemctl enable smb
systemctl enable nmb
systemctl enable wsdd
copy
全部搞定,图片看看效果。
四、设置Samba用户名和密码
1. 修改Samba配置文件
1
vi /etc/samba/smb.conf
copy
增加以下内容
1
2
3
4
5
6
7
8
9
10
[ doc]
comment = CentOS Samba Doc ( 需要用户名密码)
path = /doc
read only = No
browseable = Yes
public = No
printable = No
guest ok = No
create mask = 0664
directory mask = 0775
copy
并确保[global]区域中,这两项设置正确
1
2
passdb backend = tdbsam
security = USER
copy
上面设置使用tdbsam方式来保存Samba的用户名密码。
该方式则是使用一个数据库文件来建立用户数据库。数据库文件默认为 /var/lib/samba/private/passdb.tdb
2. 建立Samba账户
我们可以使用pdbedit命令来建立Samba账户,具体用法如下:
要注意,建立的Samba用户必须首先是Linux系统用户。
1
2
3
4
5
6
pdbedit -a username :新建Samba账户
pdbedit -x username :删除Samba账户。
pdbedit -L :列出Samba用户列表,读取passdb.tdb数据库文件。
pdbedit -Lv :列出Samba用户列表的详细信息。
pdbedit -c "[D]" -u username :暂停该Samba用户的账号。
pdbedit -c "[]" -u username :恢复该Samba用户的账号。
copy
这里先创建2个Linux系统用户,并设置密码为123456:
1
2
3
4
5
6
7
groupadd smbgroup
adduser -g smbgroup -s /sbin/nologin smbuser1
adduser -g smbgroup -s /sbin/nologin smbuser2
echo 123456 | passwd --stdin smbuser1
echo 123456 | passwd --stdin smbuser2
copy
再用pdbedit创建Samba帐号。
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
30
31
32
33
34
35
[ root@pxecentos7 ~] # pdbedit -a smbuser3
new password:
retype new password:
Failed to add entry for user smbuser3.
[ root@pxecentos7 ~] # pdbedit -a smbuser1
new password:
retype new password:
Unix username: smbuser1
NT username:
Account Flags: [ U ]
User SID: S-1-5-21-0000000000-0000000000-0000000000-1000
Primary Group SID: S-1-5-21-0000000000-0000000000-0000000000-513
Full Name:
Home Directory: \\ pxecentos7\s mbuser1
HomeDir Drive:
Logon Script:
Profile Path: \\ pxecentos7\s mbuser1\p rofile
Domain: PXECENTOS7
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: 三, 06 2月 2036 23:06:39 CST
Kickoff time: 三, 06 2月 2036 23:06:39 CST
Password last set: 六, 25 4月 2020 00:42:44 CST
Password can change: 六, 25 4月 2020 00:42:44 CST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
[ root@pxecentos7 ~] # pdbedit -L
smbuser1:1000:
copy
可以看到我们创建Samba帐号 smbuser3 是失败了。原因是Linux系统没有smbuser3这个用户,而 smbuser1 创建成功了。
要注意这里 重新设置了Samba帐号 smbuser1的密码,这个是访问共享目录要输入的密码,可以跟登录Linux系统的用户密码【不相同】。
3. 设置目录读写权限
现在设置目录读写权限,然后重启Samba服务
1
2
3
4
chown -R smbuser1:smbgroup /doc/
chmod -R 775 /doc/
systemctl restart smb
copy
然后就可以在Windows上正常访问 \\192.168.1.32\doc ,弹出的输入框里,填入 smbuser1 和刚才设置的密码。
4. Windows下常见问题
这里有个经常会出现的问题,如下图,Windows不允许使用多个用户名连接同一ip的Samba服务。
这时需要Windows清除连接Linux的Samba服务缓存
Windows命令行输入net use ,就会打印出当前的所有远程连接。
根据列表,一个个删除连接: net use 远程连接名称 /del
或者一次性全部删除: net use * /del
删除完之后,就可以正常访问 \\192.168.1.32\doc输入用户密码名啦。
5. 将Windows常用命令建立批处理
建立磁盘映射:
1
2
3
4
5
6
net use Z: \\192.168.1.32\doc 123456 /user: smbuser1
Z: 映射到Windows的哪个磁盘
\\192.168.1.32\doc 远程Samba的目录
123456 Samba用户密码
smbuser1 Samba用户名
copy
删除磁盘映射:
1
2
3
4
5
net use * /del /y
* 所有映射到windows的磁盘盘符, 也可以指定具体的如 Z: Y:
/y 如果不加这个, 每次都会提示你是否删除磁盘映射
copy
将两行常用命令,建立两个批处理.bat文件,点击即可运行。
6. Windows开机自动建立Samba磁盘映射
【Win+R】打开“运行” —> 输入 gpedit.msc —> 打开组策略 —> 选择“计算机配置” —> 选择“Windows设置” —> 选择“脚本(启动/关机)” —> 选择“启动” —> 点击“添加” —> 选择上一步骤刚创建好的.bat脚本文件。
五、在另一台Linux系统上访问Samba共享目录
1
2
3
4
5
6
7
yum -y install samba-client cifs-utils
smbclient -L //192.168.1.32 -N
mount.cifs //192.168.1.32/data /mnt/data
mount.cifs -o username = "用户名" ,password= "密码" //192.168.1.32/doc /mnt/doc
umount /mnt/data
copy
其它相关文章:
CentOS访问Windows10的共享目录
Windows访问CentOS搭建的Samba文件共享服务
Windows访问CentOS搭建的NFS文件共享服务
在VMWARE虚拟机中使用宿主机的共享目录