基本信息 | 含义 |
---|---|
smb.service | 服务启动脚本 |
/etc/samba | 主配置目录 |
/etc/smb.conf | 主配置文件 |
samba_share_t | 安全上下文 |
139/445 | 端口 |
samba、samba-common | 安装包 |
注意在做本章实验时,selinux是开启的强制状态
1)samba服务端、客户端以及工具包安装:
2)samna服务的开启以及将samba服务添加到火墙策略中:
3)输入“smbclient -L //172.25.254.136”命令测试,后面不加“-U 用户名”时,默认是root用户登陆smb,要求输入密码时,直接回车即可,此时可以看到列出的信息是没有可以使用的:
当后面加-U参数时,可以指定samba用户登陆,此时登陆上去后,默认家目录就是可以使用的,是被共享出来的:
命令 | 含义 |
---|---|
smbpasswd -a liu | 将已经存在的liu用户,添加为smb用户 |
pdbedit -L | 查看smb用户列表 |
pdbedit -x liu | 删除smb用户 |
samba用户必须是当前主机已经存在的用户,此处设置密码时,时samba用户的密码,和本机密码没有任何关系:
1)注意,下面命令和前些写的不一样,前面的命令有-L参数,表示显示服务器所分享出来的所有资源;这里在ip后面的目录,就是该smb用户的家目录,可以直接登陆查看,进入后可以看到在列出文件时,受到了权限限制,无法访问加目录:
2)是因为selinux的samba允许访问家目录功能默认是关闭的,需要将他开启。注意这张章所作的实验都是在selinux开启的状态下进行的:
3)开启允许访问家目录后,就可以成功登陆liu这个smb用户的家目录了:
1)共享自己创建的目录
2)共享系统中存在的目录
重启服务后,查看共享目录,可以看到MNT共享目录名,但是进入后无显示内容,这同样也是因为selinux的原因。但是在共享系统目录时,不要修改目录安全上下文,会造成一些系统问题:
解决方法是打开selinux的samba_export_all_ro功能,表示smb开启对所有文件读的功能,不管是否符合安全上下文,开启后samba服务将不再受安全上下文的影响。想要写的功能时,可以开启下面rw写的功能:
若遇到想让某些用户访问,而其他用户不能访问,也就是对不同ip进行访问控制,通俗来讲就是设置用户的黑白名单,可以使用另一台samba客户端进行测试,客户端需要安装samba-client软件。
1)可以使用不同ip的主机去访问smb服务器共享出来的目录,在没有设置访问控制前默认任何主机都是可以访问到的:
2)编辑主配置文件,在约91行处这里是全局配置,输入“ hosts allow = 172.25.254.136”命令,也可以说是白名单,表示所有smb共享只允许在该主机上访问,然后重启服务;若有多个想要设置的用户,就输入空格,将ip写在后面:
3)此时再使用两台主机分别访问服务器共享出来的目录,只有136主机的smb用户可以访问,也就是用户白名单:
4)编辑主配置文件,在约91行处,将上面的allow改为deny,表示全局的黑名单,输入“ hosts deny = 172.25.254.136”,命令,表示smb的所用共享只有该主机不允许访问,然后重启服务:
5)此时再使用两台主机分别访问服务器共享出来的目录,只有136主机的smb用户不可以访问,也就是用户黑名单:
注意:在使用第二台主机查看smb服务器共享出来的目录时,要先安装smb客户端,查看共享出来的目录的内容时,也用的是之前建立的smb用户。
6)上面的实验都是写入全局共享,[GLOBAL]处是对samba整体生效;当将访问权限写到单独共享处时,则只对此共享生效,如下表示只有136主机可以访问WESTOS目录:
7)此时其他主机访问WESTOS共享目录是不行的,因为WESTOS目录只允许136主机访问,但是没有经过访问限制的MNT目录就可以被访问:
配置参数 | 含义 |
---|---|
writable = yes | 可写(建立、删除) |
write list = westos | 指定用户可写 |
write list = +westos/@westos | 指定组可写 |
valid users = lee | 指定访问用户 |
valid users = +lee/@lee | 前面加+/@符号,表示指定访问组 |
browseable = yes/no | 是否隐藏共享,不需要重启服务 |
map to guest = bad user | 允许匿名用户访问,写到全局设定中 |
guest ok = yes | 允许匿名用户访问,写在某个设定的目录中 |
admin users = westos | 指定此共享的超级用户身份 |
1)编辑主配置文件,在系统级共享目录下写入valid users = liu,表示基于用户的共享,也就是只有该用户可以访问该共享,其他用户不能访问:
重启服务,使用liu用户访问MNT目录,可以访问,使用其他smb用户(可以再建立一个smb用户方便观察实验效果)是无法访问该目录的,此时使用liu用户可以实现对该共享目录的挂载,而其他用户不可:
2)编辑主配置文件,在系统级共享目录下写入valid users = +liu或者valid users = @liu,都表示只有该组的用户可以访问该共享,其他组用户不能访问。给某个用户添加该组后,该用户即可访问MNT目录:
3)默认/mnt目录和/westos目录对其他人是不可写的,为了实验效果,给/westos个目录777权限,以排除本地文件系统的干扰,实际上这样是不合理的:
4)编辑主配置文件,设定“writable = yes ”所有用户对/westos目录可写,注意这里的可写指的是smb用户可写,目录本身是否可写要看本地文件系统的权限:
配置完成后使用客户端挂载westos目录时,就可以挂载成功,此时进入该挂载去建立文件是可以建立的,建立完成后,在该主机上文件所有者和所有组属于root。但是实际上在服务端看到的是用哪个用户挂载的所有者和所有组就属于那个用户:
5)编辑主配置文件,设定“write list = westos”表示westos目录对指定用户可写,其他用户不可以:
6)编辑主配置文件,设定"write list = +liu",表示只有该组用户对该目录可写,其他用户组不可以:
可以看在服务器上到westos用属于liu组,所以对个该目录可写:
在服务器上,去除westos用户的liu组,此时在客户端westos对该目录不可写:
7)编辑主配置文件,设定"browseable = no"表示隐藏共享资源:
编辑主配置文件,设定"browseable = yes"表示不隐藏共享:
8)编辑主配置文件,在[global]全局里面输入“map to guest = bad user”,表示所有匿名身份指向为guest,不能在非全局处写该参数,否则会出现问题无法挂载。在WESTOS共享资源处输入“guest ok = yes”,表示允许匿名用户访问,当这两个参数设置后,才表示匿名用户允许访问:
注意:以上实验都是使用服务端的smb用户,不是smb用户是无法使用挂载的。即使在客户端没有建立过该用户,依旧可以在客户端使用该smb用户,但smb用户的实际控制权在服务器上
在客户端如果用以上的挂载方式,没有用户验证的该客户端主机的其他用户也可以访问已认证用户挂载的samba共享资源里的内容,而且smb用户的用户名和密码也直接显示在外面,这种方式不安全。所以可以通过设置特殊参数,使用户名密码等信息不会被直接看到,并且其他用户在没有samba认证时不能看已认证用户挂载的samba共享资源里的内容。
1)在服务器,编辑主配置文件,设定任何用户对westos目录都可写:
编辑一个文件/root/smb_auth,该文件名可自定义,将用户名和密码存入:
将该文件权限设为只有自己可读写:
3)此时使用“mount //172.25.254.136/WESTOS /media -o credentials=/root/smb_auth”命令挂载,credentials表示将存有用户名和密码的文件写入。注意这样挂载时,若-o写在前面,会显示挂载不存在:
输入“mount //172.25.254.160/WESTOS /media -o credentials=/root/smb_auth,multiuser”命令,表示多用户,但有smb认证的用户才能进入,。没有认证的用户可以进入该目录,但是无法查看内容:
输入“mount //172.25.254.160/WESTOS /media -o credentials=/root/smb_auth,multiuser,sec=ntlmssp”命令,ntlmssp表示sam用户的认证方式:
4)添加客户端的westos为sam用户,也就是该用户为自己做一个samba认证,此时若输入错误密码进入时,会显示权限被拒绝:
此时需要先清除之前添加的该用户,然后在重新添加该用户,输入正确密码即可进入:
该用户进入后会看到所有文件的所有者和所有组都是自己:
5)在服务端,查看westos目录,看到的是真实的文件所有者和所有组:
基本信息 | 含义 |
---|---|
nfs-utils | 安装包 |
nfs-server | 服务脚本 |
/etc/exports | 共享配置文件 |
2)需要开启nfs,然后在火墙策略中添加rpc-bind、mountd、nfs服务。
若只添加了rpc-bind,在客户端,输入“showmount -e 172.25.254.136”命令查看:
若再添加mountd,在客户端,输入“showmount -e 172.25.254.136”命令查看:
若再添加nfs,在客户端,输入“showmount -e 172.25.254.136”命令查看,此时就可以查看看到正确显示:
3)在服务端,编辑/etc/exports文件,写入以下内容,其中ro表示只读挂载,*表示将该目录共享给所有人,此处也可以指定ip;输入“exportfs -rv ”命令进行刷新,注意这里不能使用重启服务:
4)在客户端输入“showmount -e 172.25.254.136”命令查看,看到westos目录对所有人可挂载:
5)测试,使用“mount 172.25.254.136:/westos /media/”命令进行挂载,挂载好后进入查看:
参数 | 含义 |
---|---|
anonuid=1000,anongid=1000 | 指定用户身份 |
sync | 更改生成后同步数据到服务器 |
async | 实时同步数据到服务器 |
rw | 读写 |
ro | 只读 |
no_root_squash | root用户挂载不转换身份 |
1)在服务端,编辑/etc/exports文件,表示对所有人该目录可读写挂载,刷新:
在客户端,进入挂载点,建立文件,查看文件权限看到nfs用户默认的拥有者和拥有组都是noboby:
在服务端查看文件权限,看到文件拥有者和拥有组同样是noboby:
2)在服务端,编辑/etc/exports文件,表示读写且root用户挂载不转换身份,刷新:
在客户端,进入挂载点,建立文件,查看文件权限看到文件的拥有者和拥有组依旧是root用户:
3)在服务端,编辑/etc/exports文件,表示读写且指定用户为westos,刷新:
客户端,进入挂载点,建立文件,查看文件权限看到文件的拥有者是westos用户,拥有组是nobody:
4)在服务端,编辑/etc/exports文件,表示读写且指定用户和用户组为westos,刷新:
客户端,进入挂载点,建立文件,查看文件权限看到文件的拥有者和拥有组都是westos:
5)还有两个常用参数,分别是:sync,表示在客户端更改文件,等更改完保存后才同步到服务端,其缺点是遇到断电等问题,文件未同步时,造成文件内容损失;async,表示实时更新,边写边更新,其缺点是消耗资源大。
3)服务启动后会自动出现/net,只需要进入/net,然后再进入以服务端ip命令的目录,输入cd westos即可挂载上,输入cd就可退出挂载,但是退出挂载默认时间是300秒,300秒后会自动卸载:
4)编辑/etc/autofs.conf文件更改卸载时间,将卸载时间缩短,方便观察实验效果,编辑完后重启服务即可。
默认卸载时间:
更改为5秒后卸载:
重启服务后,查看,挂载已经自动卸掉:
1)samba自动挂载可以编辑/etc/auto.master 文件,输入“/media /etc/automount”,其中automount文件名是自定义的,表示将该文件挂载再media下,这叫最终挂载自定义点子策略文件:
2)编辑自定义的子策略文件,挂载文件输入“samba -fstype=cifs,username=liu,password=westos : //172.25.254.136/WESTOS”,表示表示将该目录,以samba的方式挂载,重启服务:
3)进入media下,然后输入cd samba,进入即挂载上,输入cd退出挂载:
1)nfs的挂载同上,首先可以编辑/etc/auto.master 文件,输入“/media /etc/automount”,其中automount文件名是自定义的,表示将该文件挂载再media下,这叫最终挂载自定义点子策略文件:
2)编辑自定义的子策略文件,挂载文件输入“nfs 172.25.254.136:/westos”,表示表示将该目录,以nfs的方式挂载,重启服务:
3)进入media下,然后输入cd nfs,进入即挂载上,输入cd退出挂载:
同时写两种挂载方式
1)编辑/etc/automount文件,写入
samba -fstype=cifs,username=liu,password=westos : //172.25.254.136/WESTOS
nfs 172.25.254.136:/westos,如下所示,重启服务:
2)输入“cd /media/nfs ”命令,实现nfs挂载,cd退出:
3)输入“cd /media/samba”命令,实现samba挂载,cd退出:
使用nfs和samba都会是以软件的方式将文件系统共享出去,而iscsi主要用于共享硬盘,直接共享设备权限
1)保证服务端有闲置的硬盘,将硬盘的所有空间都分配给一个分区:
2)在服务端安装服务“dnf install targetcli -y”并开启服务:
输入“targetcli”命令,就会进入交互运行环境,输入ls可以查看:
3)进入该编辑环境,输入“/backstores/block create westos_storage /dev/vdb1”,表示将该分区变成一个网络磁盘,westos_storage是自定义的网络磁盘名称:
输入“/iscsi create iqn.2021-02.org.westos:storage”,表示创建一个iqn表达方式的链,用于时别单个iscsi目标:
输入“/iscsi/iqn.2021-02.org.westos:storage/tpg1/luns create /backstores/block/westos_storage”,将网络磁盘和iqn关联起来:
输入“/iscsi/iqn.2021-02.org.westos:storage/tpg1/acls create iqn.2021-02.org.westos:westoskey”,建立一个钥匙:
1)在客户端安装软件“dnf install iscsi-initiator-utils.x86_64 -y”:
2)编辑/etc/iscsi/initiatorname.iscsi 认证文件,修改客户端的iscsi认证钥匙与服务端一致,systemctl restart iscsid ,重启服务:
3)输入“iscsiadm -m discovery -t st -p 172.25.254.136”命令,表示列出服务端可用的网络磁盘,此处若没有在火墙策略处允许端口,就会显示无法链接:
4)输入“iscsiadm -m node -T iqn.2021-03.org.westos:storage -p 172.25.254.136 -l”,表示启用服务端的存储设备,-l表示登陆:
5)认证成功后,输入“fdisk -l”命令,就可以查看到设备存在:
1)卸载挂载好的设备,输入“tree /var/lib/iscsi”查看网络共享设备:
输入“iscsiadm -m discovery -t st -p 172.25.254.136”命令,表示查看网络共享设备存在:
2)输入“iscsiadm -m node -T iqn.2021-03.org.westos:storage -p 172.25.254.136 -u”,-u表示登出,这种操作是临时的,当服务重启时,设备就会加载回来:
3)输入“systemctl restart iscsi”重启服务,重启后再次查看设备,可以看到设备又加载回来:
4)所以正确的删除方式是,先卸载挂载殿,再登出,然后删除设备,删除/etc/iscsi/initiatorname.iscsi文件中的认证。
“iscsiadm -m node -T iqn.2021-03.org.westos:storage -p 172.25.254.136 -u”登出:
“iscsiadm -m node -T iqn.2021-03.org.westos:storage -p 172.25.254.136 -o delete”删除,“systemctl restart iscsi”重启服务:
1)输入“targetcli ”,进入后发现设备信息仍然在:
2)输入“/iscsi/”进入该目录,输入“/iscsi delete iqn.2021-03.org.westos:storage”删除设备:
3)返回上一层查看,并没有删除干净,输入“clearconfig confirm=True”表示删除其他配置,删除完后查看,最后退出保存: