一、Samba介绍
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成;SMB是一种在局域网上共享文件和打印机的一种通信协议。
Samba模式:C/S模式
二、Samba解决了什么问题
通过网络实现不同系统间的文件共享。(一般是局域网)
三、Samba工作原理是什么
Samba服务是由两个进程组成,分别是smbd和nmbd。
smbd:主要用来管理samba服务器上的共享目录,打印机等;主要是针对网络上的共享资源进行管理的服务。
nmbd:主要功能是进行NetBIOS解析,并提供浏览服务显示网络上的共享资源列表。
Samba大致工作流程:
四、Samba配置
网络主机规划
服务端 | 客户端 |
---|---|
Rhel8:192.168.24.9 | 192.168.24.x 主机名:docker |
主机名:node1 | Windows:192.168.24.y |
安装Samba并启动服务
服务端:
[root@node1 ~]# yum install -y samba
[root@node1 ~]# systemctl enable --now smb nmb
Linux客户端安装Samba客户端:
[root@docker ~]# yum install -y samba-client
注意:samba服务依赖于rpc服务,若不是yum安装,要预先安装好rpc包,起rpc服务。
Samba配置文件解析
samba主配文件:/etc/samba/smb.conf
详细配置文件:/etc/samba/smb.conf.example(可查看更多全局配置)
主配文件:
默认Samba用户家目录可被自己浏览和拥有读写权限。
Samba全局配置:
workgroup | 工作组 |
---|---|
security | 安全级别 user/share/server/domain |
安全级别 | 解释 |
share: | 不需要提供用户和密码。连接成功即可访问共享资源。 |
user: | 需要用户和密码,由连接的samba服务器端提供验证。 |
server: | 需要用户和密码,可指定其他机器提供验证。验证失败,则以user级别做处理。 |
domain: | 需要用户和密码,指定域服务器提供验证 |
Samba共享配置:
[共享名] | |
---|---|
comment | 描述 |
path | 共享目录绝对路径。/test |
browseable | 是否允许浏览。yes/no |
hosts allow | 允许那些网段访问。192.168.24.0/24 |
public | 是否对网段内所有主机开放浏览。yes/no |
valid users | 允许哪些用户可以访问共享文件。 oyys |
writable | 是否开启所有人写权限。 yes/no |
write list | 上一行为yes就是允许哪些人不能写;为no就是允许哪些人可写。用户名 @组 |
readonly | 是否只读共享。yes/no |
read list | 上一行为yes就是哪些人不止能读;为no就是哪些人只能读。用户名 @组 |
注意:public和valid users不能同时使用,否则public设置无效。
五、案例实操(共享设置和客户端挂载)
要求:
①设置共享文件夹/test
②samba服务器是WORKGROUP工作组成员
③设置共享目录/test 的共享名为test
④只有192.168.24.0/24网段能够访问共享文件夹
⑤test共享可以被浏览
⑥samba用户oyys能够读写共享目录里的内容,验证密码是redhat
创建共享目录,修改其他人权限
[root@node1 ~]# mkdir /test
[root@node1 ~]# chmod 757 /test
按要求编辑主配置文件:
重启服务
[root@node1 ~]# systemctl restart smb nmb
添加samba用户:
[root@node1 ~]# smbpasswd -a oyys //必须是已存在的本地用户
New SMB password: //设置登陆密码
Retype new SMB password:
Added user oyys.
Windows客户端临时挂载共享:
第一次需要输入samba用户名和密码,就可以看到家目录和共享出来的test文件夹。
在test共享下可以创建文件夹和文件。
Windows客户端永久挂载共享:
输入服务端共享文件夹绝对路径
Linux客户端临时挂载共享:(smbclient命令)
[root@docker ~]# smbclient //192.168.24.9/test -U oyys%redhat
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Thu Jul 28 13:09:39 2022
.. D 0 Thu Jul 28 13:04:55 2022
aaa D 0 Thu Jul 28 13:09:22 2022
bbb.txt A 0 Thu Jul 28 13:09:36 2022
18351104 blocks of size 1024. 14096636 blocks available
smb: \> mkdir ccc
smb: \> ls
. D 0 Thu Jul 28 13:19:57 2022
.. D 0 Thu Jul 28 13:04:55 2022
aaa D 0 Thu Jul 28 13:09:22 2022
bbb.txt A 0 Thu Jul 28 13:09:36 2022
ccc D 0 Thu Jul 28 13:19:57 2022
18351104 blocks of size 1024. 14096636 blocks available
smb: \>
Linux客户端永久挂载共享
[root@docker ~]# mkdir /mnt/samba //创建挂载点
[root@docker ~]# mount -o username=oyys,password=redhat -t cifs //192.168.24.9/test /mnt/samba
[root@docker ~]# vim /etc/fstab //永久挂载
[root@docker ~]# mount -a //检查挂载完整性
[root@docker ~]# df /mnt/samba/ //查看挂载状态
Filesystem 1K-blocks Used Available Use% Mounted on
//192.168.24.9/test 18351104 4254384 14096720 24% /mnt/samba
[root@docker ~]# cd /mnt/samba/ //查看
[root@docker samba]# ll
total 0
drwxr-xr-x 2 root root 0 Jul 28 13:09 aaa
-rwxr-xr-x 1 root root 0 Jul 28 13:09 bbb.txt
drwxr-xr-x 2 root root 0 Jul 28 13:19 ccc