文章目录
0-1 实验环境
- 服务器端:node1===>192.168.43.101
- 客户端:node2===>192.168.43.111
0-2 Windows与Linux共享文件
- Windows主机IP:192.168.43.1
- 新建文件夹westos
- 打开文件属性===>共享===>高级共享===>共享文件夹===>设置共享名称
- 文件属性===>共享===>箭头===>选择Everyone===>添加===>共享===>完成
- Linux客户端:node2主机
smbclient -L //192.168.43.1/共享名称 -U administrator
1. samba服务简介
Samba是SMB的一种实现方法,主要用来实现Linux系统的文件和打印服务。Linux用户通过配置使用Samba服务器可以实现与Windows用户的资源共享。
samba 是基于SMB协议(ServerMessage Block,信息服务块)的开源软件,samba也可以是SMB协议的商标。SMB是一种Linux、UNIX系统上可用于共享文件和打印机等资源的协议,这种协议是基于Client\Server型的协议,Client端可以通过SMB访问到Server(服务器)上的共享资源。当Windows是 Client,CentOS是服务器时,通过Samba就可以实现window访问Linux的资源,实现两个系统间的数据交互。
samba是运行于unix/linux的软件。它分为服务器端和客户端,实现了cifs协议描述的功能。用于windows和unix/linux见文件共享
cifs:Windows上的文件共享协议,其前身是SMB协议
2. samba基本信息
-
服务启动脚本
smb.service -
主配置目录
/etc/samba -
主配置文件
/etc/samba/smb.conf -
安全上下文
samba_share_t -
端口 139、445
-
安装包
samba:
samba-common:工具包
samba-client:客户端
3. samba的安装与启用
dnf search samba
:查找dnf install samba -y
:服务器端安装
dnf install samba-common -y
:服务器和客户端均需安装
dnf install samba-client -y
:客户端安装systemctl enable --now smb.service
:启动samba服务- 当火墙开启时启用samba:
firewall-cmd --permanent --add-service=samba
:在火墙中永久开启samba
firewall-cmd --reload
:刷新火墙使设定生效
- 测试:
smbclient -L //192.168.43.101
:列出指定IP提供的共享文件
(当需要输入root密码时请直接回车)
4. samba用户的建立
samba用户必须是本地存在的用户
smbpasswd -a 用户名
:添加samba用户pdbedit -L
:查看samba用户列表pdbedit -x 用户名
:删除samba用户
5. samba用户访问家目录
setsebool -P samba_enable_home_dirs on
- 在Windows下访问
Windows+R===>输入 \\192.168.43.101
运行
- 在Linux下访问
smbclient -L //IP/共享名称 -U 用户名
:列出指定IP提供的共享文件
6. samba服务共享目录
6.1 共享自建目录
mkdir /westosdir
:建立共享目录touch /westosdir/file1
:建立文件semanage fcontext -a -t samba_share_t ‘/westosdir(/.*)?’
:修改共享目录的Selinux安全上下文restorecon -RvvF /westosdir
:刷新cp /etc/samba/smb.conf.example /etc/samba/smb.conf
:复制模板文件vim /etc/samba/smb.conf
:添加共享目录
[LEE] #共享名称
comment = westos dir #共享说明
path = /westosdir #共享路径
systemctl restart smb.service
:重启服务
- 在客户端访问共享文件:
smbclient //共享文件主机IP/共享名 -U samba用户名
:列出指定IP提供的共享文件mount -o username=samba用户名,password=密码 //共享文件主机IP/共享名 挂载目录
:挂载文件系统
6.2 共享系统目录(不能直接修改安全上下文)
vim /etc/samba/smb.conf
:修改共享目录为系统目录
[LEE] #共享名称
comment = westos dir #共享说明
path = /mnt #共享路径
setsebool -P samba_export_all_ro on
:修改bool值(允许读共享)getsebool -a | grep samba
:查询samba的bool值systemctl restart smb.service
:重启服务
- 在客户端访问共享文件:
smbclient //共享文件主机IP/共享名 -U samba用户名
:列出指定IP提供的共享文件
- 还原服务器端设置
7. samba常用配置参数
- 服务器端:
chmod 777 共享目录
:修改共享目录权限vim /etc/samba/smb.conf
:添加或修改参数systemctl restart smb.service
:重启服务
- 客户端测试:
mount -o username=sdsnzy1,password=sdsnzy1 //192.168.43.101/LEE /mnt/
7.1 所有用户可写
writable = yes
- 客户端挂载后建立文件失败!
- 服务器端修改权限及配置文件,重启服务
- 客户端测试:重新挂载,可写!
7.2 指定用户可写
write list = 用户
- 服务器端修改配置文件,重启服务!
- 客户端重新挂载测试:
7.3 指定组可写
write list = @用户 或 +用户
- 服务器端修改配置文件,重启服务!(添加sdsnzy1为sdsnzy2的附加组,实验完成后还原)
- 客户端重新挂载测试:
7.4 指定访问用户
valid users = 用户
- 服务器端修改配置文件,重启服务!
- 客户端重新挂载测试:
7.5 指定访问组
valid users = @用户 或 +用户
- 服务器端修改配置文件,重启服务!(添加sdsnzy1为sdsnzy2的附加组,实验完成后还原)
- 客户端重新挂载测试:
7.6 是否隐藏共享
browseable = no:不显示共享
browseable = yes:显示共享(默认)
- 服务器端设置不显示共享时,重启服务,客户端测试:
- 服务器端设置显示共享时,重启服务,客户端测试:
7.7 允许匿名用户访问
map to guest = bad user :全局设定(在[gloabl]里添加)
guest ok = yes:共享名称里设定
- 服务器端修改配置文件,重启服务!
- 客户端匿名挂载测试:
mount -o username=guest //192.168.43.101/LEE /mnt
:匿名挂载
7.8 指定主机访问(白名单)
hosts allow = 192.168.43.111:只有该主机能访问(多个主机IP用空格隔开)
hosts allow = 192.168.43.:只有该网段下的主机能访问(例如192.168.43.38;192.168.43.183…等等)
7.9 指定主机访问(黑名单)
hosts deny = 192.168.43.111:只禁止该主机访问(多个主机IP用空格隔开)
hosts allow = 192.168.43.:禁止该网段下的主机访问
8. Samba+autofs 自动挂载卸载
autofs:在客户端实现自动挂载卸载的软件;
mount是用来挂载文件系统的,可以在系统启动的时候挂载也可以在系统启动后挂载。对于本地固定设备,如硬盘可以使用mount挂载;而光盘、软盘、NFS、SMB等文件系统具有动态性,即需要的时候才有必要挂载。光驱和软盘我们一般知道什么时候需要挂载,但NFS和SMB共享等就不一定知道了,即我们一般不能及时知道NFS共享和SMB什么时候可以挂载。而autofs服务就提供这种功能,好像windows中的光驱自动打开功能,能够及时挂载动态加载的文件系统。免去我们手动挂载的麻烦。要实现光驱,软盘等的动态自动挂载,需要进行相关的配置。
8.1 autofs客户端安装
dnf install autofs -y
8.2 客户端配置
vim /etc/auto.master
:编辑配置文件
/mnt /etc/auto.samba
最终挂载点的上层目录 自动定义子策略文件
vim /etc/auto.samba
:编辑自动定义子策略文件
samba -fstype=cifs,username=用户,password=密码 ://服务器端主机IP/共享目录
最终挂载点 挂载参数 挂载资源
vim /etc/autofs.conf
:修改默认卸载时间
timeout = 3 #自动卸载时间默认为300秒
systemctl restart autofs.service
:重启服务
8.3 客户端测试
cd /mnt/samba
:进入挂载点目录df
:发现已经自动挂载cd
:退出挂载点目录,3s后(等待资源闲置超时,挂载资源自动卸载)df
:3s后发现已经自动取消挂载
9. Samba多用户挂载(cifs)
在客户端如果用普通挂载方式,没有用过用户验证的人也可以访问samba服务,不安全
通过认证的用户才可以挂载
9.1 客户端安装samba认证工具
dnf search cifs
:查询
dnf install cifs-utils.x86_64 -y
:安装
9.2 客户端配置
vim /root/smbauth
:创建并编辑挂载用户密码文件(防止每次挂载明文输入密码不安全)
username=sdsnzy1
password=sdsnzy1
vim /etc/auto.master
:编辑配置文件
/- /etc/auto.cifs
最终挂载点的上层目录 自动定义子策略文件
vim /etc/auto.cifs
:编辑自动定义子策略文件
/samba -fstype=cifs,credentials=/root/smbauth,sec=ntlmssp,multiuser ://192.168.43.101/LEE
credentials=/root/smbauth #指定认证文件(第一步编辑好的密码文件)
sec=ntlmssp #指定认证类型
multiuser #支持多用户
systemctl restart autofs.service
:重启服务
9.3 客户端认证
cifscreds add -u Samba用户 服务器端主机IP
:添加认证cifscreds clearall
:清除所有认证用户cifscreds clear -u Samba用户
:清除指定的已认证的用户cifscreds update -u Samba用户
:更新认证
实验:
su - kiosk
:切换到普通用户ls -l /mnt
:无法查看cifscreds add -u sdsnzy1 192.168.43.101
:添加认证- 可查看,建立文件
- 切换到其他普通用户,没认证无法查看,很安全!!!