主题:samba
- 运维的思想:遇到问题想办法解决掉,而不是没有这个问题,为什么不经理李这个步骤,达到解决问题的目的再好不过了!
- 不懂的问题,百度查询
一、引入
- 在windows中,不同的主机之间是如何进行文件的传输呢?
- 微信qq这种是基于用户的文件传输,对于企业而言不适用。我阿里员工主机之间要传输文件,难不成还要借助qq呀
- ftp、http是文件传输协议,是传输文件时的约定
- 我们现在要讲的是,文件网络系统,值直接使用进行文件传输东西
- 文件传输系统和文件传输协议是不同的哦~ 系统更略胜一筹,开放的权利更多
下面我来讲讲windows下文件是怎么进行传输的吧
实验效果:若主机之间处于同一个公网,那么可以访问分享文件目录的主机获取资源!
实验思路:
1.windows先共享文件
2.win+r //真机IP地址(分享文件的主机地址ip)进行访问
实验过程:
1.文件共享
2.windows下文件访问
3.Linux下文件访问
(一)
1.配置yum源
2.下载安装包
dnf install samba-client -y
3.浏览页面共享的内容
smbclient -L //192.168.43.33
默认为访问root用户,访问失败!
应当访问kiosk用户,windows用户在控制面板中用户账号查询
smbclient -L //192.168.43.33 -U Kiosk
4.smbclient //192.168.43.33/共享的素材 -U Kiosk,并输入密码
使用 smb:> ls 查看远程的资源:显示内容和windows共享目录内容一模一样
使用smb:> !ls 查看本地的资源:
5.(1)搞点新鲜的,在linux主机内上传文件到windows中
smb:> put 文件名称注意只能是上传文件
在windows中可以看到文件上传成功
(2)在linux主机内删除windows中共享目录的文件
smb:> del 共享目录中的内容
windows同步删除
6.smb:> ?查看到可以使用的命令,可以看到没有touch命令,用起来不方便
7.smb:> quit 退出,回到原模式
(二)共享文件的好处是可以挂载 (用户:Kiosk)
mount //192.168.43.33/jcq /mnt -o username=Kiosk,password=redhat
挂载的意思是:在linux内操作,但是效果是在windows服务器上(windows的共享目录中)
(1)cd /mnt
(2)建立文件 touch file{1…10},在windows共享目录中多出10个文件
(3)rm -fr file* 远程操作删除文件,远程服务器直接被搞定
挂载操作服务器,键里删除文件,挂载点和共享目录jcq内容都会变化
二、samba服务及基本信息
1.作用:windows系统共享文件时用到的协议smb
2.
- 服务名称:smb.service
- 配置目录:/etc/samba
- 主配置文件:/etc/samba.conf
- 安全上下文:samba_share_t
- 端口号:139(tcp) 445(udp)
- 安装包:samba samba-common samba-client三个
3.vim /etc/samba/smb.conf.example 配置文件的说明
三、samba的安装与启用
实验在rhel7_node1中完成
0.配置yum仓库
1.windows共享资源的时候“傻瓜化”的操作,点点ok,但是实际上后台操作很多,我们就会不了解系统
2.linux(服务器)如何共享资源,所有事情自己去做(更了解linux)
3.rhel7_node1主机ip:192.168.43.20
4.在rhel7_node1主机进行samba的安装
5.samba的安装: dnf install samba samba-common samba-client -y
(samba:主体部分; samba-common:涉及到的配置文件安装包;samba-client:客户端;客户端是如果需要做测试的话,需要安装客户端)
6.在安装之前yum源一定要配置好
7.samba的启动:systemctl enable --now smb
或者**systemctl start smb.service
8.netstat -anltupe | grep smb 查看smb的端口号(139/445)
9.火墙允许服务(samba的启用)
(1)火墙查看允许所有的服务 firewall-cmd --get-service
(2)火墙允许samba firewall-cmd --permanent --add-service=samba
(3)重启火墙:firewall-cmd --reload
(4)查看火墙允许的服务:firewall-cmd --list-all
9.测试:rhel7_node1中,rhel7_node1主机ip是:192.168.43.10
smbclient -L //192.168.43.10,当需要输入root密码时,直接回车
三、samba用户的建立
- 在linux中,不同于windows给出用户和密码就可以直接使用
- samba用户必须是本地存在的用户(也就是必须id 用户名 可以查看到的用户)
- 设置RHEL7_node1:192.168.43.10
(一)samba用户的建立
0.用户 id westos ; id lee ;可以查到
如果本地用户不存在,useradd lee建立本地用户
id lee 查询本地用户是否建立成功;
1.建立两个用户 westos lee,建立命令如下:
smbpasswd -a westos 密码:westos
smbpasswd -a lee 密码:lee
2.用户的查询 pdbedit -L
3.删除已经存在的用户 pdbedit -X westos(其中 westos为已经存在的用户)
4.用户建立完成后,可以直接使用
smbclient -L //192.168.43.10 -U westos客户端访问服务器192.168.43.10的westos用户,可以访问到家目录
5.在windows中,//192.168.43.10访问这个虚拟机,输入用户名和密码,可以看到共享的家目录。但是双击打开访问时,被拒绝了。访问被限制,怎么办呢?
6.两种解决访问被限制的方法:
方式一:rhel7_node1中 getenforce为enforcing,设置setenforce 0改为警告模式
方式二:在selinux开启时,开启samba_enable_home_dirs
(1)getsebool -a | grep samba 可以看到samba_create_home_dirs—>off是关闭状态
samba_enable_home_dirs—>off是关闭状态
(2)setsebool -P samba_enable_home_dirs on 开启状态
7.windows中更改samba用户
(1)net use 查看记录
(2)net use * /del 输入y
(3)再次net use 查看记录,列表为空
8.windows再次访问,全新的输入用户和密码
四、samba服务共享目录
实验思路:
1.建立目录
2.服务端设定共享目录的安全上下文,并刷新
3.主配置文件/etc/samba/smb.conf文件下进行配置
4.重启smb服务
5.客户端测试可以访问该目录
实验过程:
1.建立目录 mkdir /westosdir
2.为了验证是这个目录,建立文件;touch /westosdir/westosfile{1…5}
ls /westosdir/ 验证建立文件成功
3.为了共享这个目录,编写主配置文件
vim /etc/samba/smb.conf
(1)为什么家目录可以看到呢?这是因为家目录在主配置文件中已经被共享出去!
(2)
- global 全局设定,其中workgroup是工作组
- homes 家目录
- printers 打印机
(3)更改workgroup=westos,更改工作组,相当于更改组织机构
4.想共享目录,如何实现共享呢?
vim /etc/samba/smb.conf
追加内容为:
[westosdir]
comment = westosdir (说明可以自定义)
path = /westosdir (路径要写绝对路径)
5.重启samba服务
systemctl restart smb.service
6.smbclient -L //192.168.43.10 匿名访问的时候已经被共享出了westosdir目录
7.smbclient //192.168.43.10/westosdir -U westos
(1)在命令6中你看到的共享目录叫什么名字,直接访问目录就可以。访问后可以进行上传和查看目录!
(2)注意呀,访问素材的时候一定要加参数-U 进入smb:>模式,可以进行上传和删除命令
(3)但是访问是失败的,这是因为服务器主机开了selinux
8.但是访问是失败的,这是因为服务器主机开了selinux
(1)更改安全上下文:
semanage fcontext -a -t samba_share_t ‘/westosdir(/.*)?’
(2)刷新selinux
restorecon -RvvF /westosdir/
9.再次访问可以访问到内容
上述的实验在以rhel7_node1既是客户端又是服务端,现在我们用rhel8_node1为客户端
(1)首先rhel8_node1配置yum源,并安装客户端samba-client
(2)rhel8_node1访问目录,可以看到目录里的内容
但是这里有一个问题:不管是访问哪一个用户,westos或者lee,都能访问到目录的内容嘞~~
五、samba的访问控制
此访问控制只是针对/westoosdir目录而言的!
1 服务端
(1)vim /etc/samba/smb.conf
追加内容为:
[westosdir]
comment = westosdir (说明可以自定义)
path = /westosdir (路径要写绝对路径)
hosts allow = 192.168.43.10(当前客户端的IP,只允许30来访问)
(2)重启服务
2 客户端(ip不是192.168.43.10的客户端主机),访问失败
smbclient //192.168.43.10/westosdir -U westos
3.此访问控制只是针对/westoosdir目录而言的,其他的ip可以看其他共享的内容
4.主配置文件中[westosdir]添加白名单,白名单多个ip都可以允许访问!
白名单允许多个写法
==hosts allow = 192.168.43.10 192.168.43.20 ==(中间空空格隔开)
5.全局设定
hosts allow = 192.168.43.10写在全局设定中,全局生效,不能列出共享的资源。
全局生效,不能列出共享资源
总结:
(1)当hosts allow/deny 写到单独共享时,对次共享有效
(2)当写到global时,对samba整体生效
六、samba的常用配置参数
writeable = yes | 是否可写 |
---|---|
write list = westos | 指定用户可写 |
write list = +westos | 指定组可写 |
write list = @westos | 指定组可写 |
valid users = lee | 指定访问用户 |
valid users = +lee | 指定访问组 |
valid users = @lee | |
browseable = yes/no | 是否隐藏共享 |
guest ok = yes | 匿名用户使用 |
(一)writeable = yes
0.df 查看挂载情况,并删除已经在/mny下挂载的内容
umount /mnt
1.mount //192.168.43.10/westosdir /mnt -o username=westos,password=westos
实现了把192.168.43.10/westosdir挂载到/mnt目录下
2.cd /mnt 并ls 可以看到/mt目录里的内容,但是不能删除/mnt里面的文件
这是因为挂载的时候,使用到的用户是westos用户,而/westosdir目录本身是对root可写。(挂载的意思是在可以远程操作服务器,在本机操作/192.168.43.10/westosdir,但是使用挂载的时候,是用的服务器的westos用户挂载的,权限上有限制)
ls -ld /westosdir 可看看到读写权限
3.若要/westosdir 对westos用户可写,更改用户和用户组
chown westos.westos. /westosdir/
chmod 777 /westosdir/
权限改为777,在做实验的时候保证不会受到本地文件(服务器上文件)的影响
4.设置/westosdir/具有可写的功能,并重smb服务
[westosdir]
comment = westosdir (说明可以自定义)
path = /westosdir
writeable = yes
5.测试:可以在客户端的/mnt 挂载点进行文件的删除和新建(可写功能)
rm -fr westosfile1 成功!
(二)write list = westos
1.两个用户westos lee,并且设置只westos可写
2.umount /mnt 卸掉挂载
3.使用lee进行挂载
mount //192.168.43.10/westosdir /mnt -o username=lee,password=lee
4.mount 可查看挂载的时候使用的哪个用户身份
5.可以看到使用lee用户身份不能再进行写操作
完成了实验效果,使用lee挂载,lee不能进行写操作,因为设置只westos可写
(三)write list = +westos
1.lee不属于westos组,测试不能写操作
2.设置lee属于westos组,测试能不能可写
usermod -G westos lee
id lee 可以看到lee用户属于westos组
3.编写主配置文件,对组可写
4.重启服务
5.可以进行写操作
6.清处组westos,usermod -G " " lee
id 查看到不再属于westos组
7.重启就不能进行写操作
注意:每一次更改都要重启服务(实际上是挂载更新)
(四)valid users = lee 指定访问用户(只可以访问lee)
含义:在访问服务器的时候,指定哪个用户可以访问,哪个用户不能访问
注销掉之前的设置,使用;或者#都可以注销
1.更改配置文件,追加valid users = lee
2.只有lee可以挂载了
(五)browseable = yes/no 是否隐藏目录
1.更改配置文件browseable = no
2.smbclient -L //192.168.43.10/ 可以看到目录看不到了,不用重启,即改即生效
3.browseable = yes 可以看到共享内容列表
(六)guest ok = yes , 匿名用户访问
1.在主配置文件中,全局global中写:
map to guest = bad user (含义:把没有用户的身份都应设为匿名用户)
2.[/westosdir]中追加guest ok = yes (允许匿名用户访问)
3.重启服务
4.当匿名用户访问/westosdir时,可以访问
smbclient //192.168.43.10/westosdir
之前的时候,访问共享的素材,如果不加用户参数-U 访问失败
(六)
环境:设置可写+不显示
1.使用lee挂载
2.建立文件,ll 查看发现文件的所有人是lee,这是因为挂载的时候,用到的身份用户是lee
3.挂载的时候,不管你的客户端是谁,都是用你访问的名称去挂载
4.怎么去转换用户身份
[/westosdir]中追加admin users = lee
含义:当我使用lee进行挂载时,使用的用户身份是超级用户
注意:提升的是用不身份,和组没有关系,并没有提升组!