问题导向:
假如企业有ABC三台服务器,用户a的信息,在存储在a服务器里,但是当出现一些不可抗拒因素,使得A服务器坏了,那么a用户信息的丢失所造成的损失,应该由谁来但呢?
此时则,引入存储分离的概念:
简单来说,就是,创建一个大的存储设备,将各个服务器存储的用户信息,都放在里边,如果,对应信息的对应服务器坏掉了,其他的服务器还可以讲数据取出。以此来解决,数据的安全性问题。
而cifs和nfs就是采用这个思想所产生的系统。
存储分离即数据的存储与服务器相分离
一、cifs文件系统
SMB和CIFS:
SMB(Server Message Block)
又称CIFS(Common Internet File System),一种应用层网络传输协议(微软(Microsoft)和英特尔(Intel)在1987年制定的协议),由微软开发,主要功能是使网络上 的机器能够共享计算机文件、打印机、串行端口和通讯等资源。它也提供认证的进程间通讯技能。它主要用在Windows的机器上。
CIFS
是由microsoft在SMB的基础上发展,扩展到Internet上的协议。他和具体的OS无关, 在unix上安装samba后可使用CIFS.它使程序可以访问远程Internet计算机上的文件并要求此计算机的服务。CIFS 使用客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。
CIFS是公共的或开放的SMB协议版本,并由Microsoft使用。SMB协议现在是局域网上用于服务器文件访问和打印的协议。象SMB协议一 样,CIFS在高层运行,而不象TCP/IP协议那样运行在底层。CIFS可以看做是应用程序协议如文件传输协议和超文本传输协议的一个实现。
该服务的端口号为:139和445
安装完毕系统后用:netstat -antlupe | grep smb查看
访问网络共享的三个基本步骤:
1. 识别要访问的远程共享
2. 确定挂载点(应该将共享目录挂载到的位置),并创建挂载点的空目录
3. 通过相关的命令或者配置更改挂载的网络文件系统
实验前提,服务的搭建:
该服务分为两部分:存储服务器端,客户端。
客户端IP:172.25.254.123
服务端IP:172.25.254.223
步骤:
存储服务端:
步骤如下:
- 安装:需要安装三个软件
yum install samba-client.x86_64 samba-common.x86 samba.x86_64 -y
客户端、 命令、 服务器
samba 这个软件主要提供SMB服务器所需要的各项服务程序
samba-common 主要提供服务器和客户端都会用到的一些数据,以及有关命令等。
- 开启服务(systemctl start smb),查看端口号检查smb服务端口是否开启:netstat -antulpe | grep smb
端口: 139和445
- 火墙允许smb服务,selinux允许服务(关闭selinux,或者更改selinux状态为警告模式 setenforce 0)
firewall-cmd --list-all 查看火墙是否允许smb服务
firewall-cmd --permanent --add-service=samba 添加samba服务
firewall-cmd --permanent --add-service=samba-client 添加samba-client服务
firewall-cmd --reload 重新加载火墙
- pdbedit -L 查看smb服务用户,此时还没有。
- 将指定用户家目录添加到文件共享服务中(这里的用户必须为本地用户)
useradd yun 创建用户
smbpasswd -a yun 将用户“yun”用户家目录添加到文件共享,并设置密码。
useradd zhai
smbpasswd -a zhai
westos用户本身不存在,则添加失败
- pdbedit -L 再次查看smb服务用户,此时已经显示有用户家目录
pdbedit -L ##显示开启了共享文件服务的本地用户
pdbedit -x user ##删除开启了共享文件服务的用户
客户端:
配置步骤如下:
- yum install samba-client -y 安装smb客户端
- yum list samba-client 检查是否安装成功
windows测试方式
运行窗口
\\172.25.254.223\westos
linux测试方式
- smbclient -L //172.25.254.223 匿名登陆服务端,并查看信息
- smbclient -L //172.25.254.223 -U yun 用建立的用户查看信息,显示内容
- smbclient //172.25.254.223/yun -U yun 以yun身份登陆进入文件系统
用户只能查看自己的共享目录
注意:此方法进入该共享目录,没有touch命令,所以不能直接给共享目录里创建文件
但是可以用put进行上传,也可以用get从共享目录里进行下载文件。
上述方法上传文件比较麻烦,下面用挂载的方法,会方便很多,直接在被挂载的目录上操作,客户端就会有效果
挂载实现更多操作(实验前我先在服务端的共享目录里创建了文件)
- mount //172.25.254.223/yun /mnt -o username=yun,password=yun,将共享端,挂载到客户端的/mnt目录下
- df显示挂载
- cd /mnt ls可以查看到之前在存储服务器端创建的文件,此时可以直接进行上传,下载。
- umount /mnt 不操作时,进行卸载就可以
一、smaba的访问控制
服务端:
- rpm -qc samba-common #查看smd的配置文件
/etc/logrotate.d/samba
/etc/samba/lmhosts
/etc/samba/smb.conf 服务的主配置文件
/etc/sysconfig/samba
- vim /etc/samba/smb.conf 进入该文件,修改参数
89 workgroup = linux 设置域的名字(设置更改完毕之后在客户端登录进行查看)
97 hosts deny = 172.25.254.123 黑名单
= 172.25.254。 黑名单以内的主机禁止访问
hosts allow = 172.25.254.123 白名单
= 172.25.254 白名单IP以外的主机可以访问
此时客户端不能对共享目录进行访问。
二、新建目录的共享
步骤:
服务端:
- 先开启服务端的selinux
getenforce ##查看内核级火墙状态
Permissive ##之前设置的是警告模式
setenforce 1 ##设置内核级火墙为强制模式,或者vim /etc/sysconfig/selinux修改
完了之后reboot
- 共享目录的建立,mkdir /share_catalog
- 然后进smb的配置文件vim /etc/samba/smb.conf添加创建的目录信息:
322 [hello] ##用户可以看到的共享名称
comment = Share Directory ##用户可以看到的共享描述
path = /share_catalog ##共享目录的绝对路径
writalbe = yes ##可写
在客户端看到的是[共享]的名称,而实际共享的的目录则是在path里面所设置的
- 重启动服务:systemctl restart smb
- 客户端上:subclient //172.25.254.223 -U yun可以看到,刚才新建的hello
- 此时查看该目录,是有执行权限的
ls -ls /share_catalog 展示共享目录的权限
此时不能查看文件信息
当关闭selinux时,此时可以查看,但是此时安全系数不高
所以就要在selinux开启的状态,修改完安全上下文成功后,给该目录一个755权限,此时其他用户就不能对该共享目录进行操作,此时单独给yun这个用户,对共享目录的操作权限,即可。
步骤如下:
semanage fcontext -a -t samba_share_t '/share_catalog(/.*?)?' ##更改共享目录的安全上下文
restorecon -RvvF /share_catalog ##重新加载使其生效
chmod 755 /share_catalog 给共享目录755权限,设置其他用户不能操作
setfacl -m u:yun:rwx /share_catalog 给予yun这个用户满权限,让他对目录可以进行操作
这样可以提高安全性。
在客户端:建立的文件,就是认证的用户的。
测试:
smbclient //172.25.254.223/hello -U yun 进行测试查看
mount //172.25.254.142/wuxie /mnt -o usernama=wuxie,password=root
df
cd /mnt/
ls
rm -rf AA
ls
三、系统目录的共享
存储服务端:
1.修改smb的主配置文件
直接在自己创建的那个目录信息下添加:
vim /etc/samba/smb.conf
[mnt] ##共享的系统目录
comment =Share Systen mnt directory ##共享系统目录的描述
path= /mnt ##共享系统目录的绝对路径
writable=yes 添加用户可写权限(在服务层次上)
systemctl restart smb.service
chmod 775 /mnt
setfacl -m u:yun:rwx /mnt/ wuxie用户对于mnt目录用rwx的权限
2、此时在客户端进行挂载:
mount //172.25.254.223/mnt /mnt -o username=yun,passwd=yun
selinux开着,所以此时也不可写。
系统目录也可以通过修改安全上下文使得smb服务可以用。
但是系统目录/mnt不是只有smb服务用,如果修改了安全上下文,修改后别的服务用不了,显然是不合理的。
虽然开放权限使得所有人对smb读服务没有任何限制对于系统来说不安全,但没有更好的解决方法.
服务器端:
- getsebool -a | grep samba 查看samba的系统布尔值
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> off
samba_export_all_ro --> off 只读是关闭的
samba_export_all_rw --> off 读写是关闭的
samba_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
use_samba_home_dirs --> off
virt_sandbox_use_samba --> off
virt_use_samba --> off
- setsebool -P samba_export_all_rw --> on 或 1 永久修改samba布尔读写值为1;-P表示永久修改ia
客户端测试:df察看是否挂载上,没有的话,重新挂载道/mnt下
cd /mnt
touch file
ls
配置文件里的其他参数:
vim /etc/samba/smb.conf
126 map to guest = bad user 将游客用户映射到匿名用户登陆
323 [hello]
324 comment=Share
325 path =/westos
326 writable = yes 全局可写参数,打开之后,默认所有用户可写
328 # browseable = yes 在使用命令查看时,是否显示目录。默认为yes(显示)。
329 # guest ok = yes 允许游客用户登陆,和map to guest = bad user共同搭配使用
330 # valid users = yun 允许那些用户登陆;valid users = +yun或者valid users = @wuxie表示属于yun组的用户都可以登陆
331 # write list = pao 允许拿些用户可写
332 # admin users=yun 修改用户yun为hello目录的超级用户,即root用户,在创建文件之后,可以发现,该文件的用户为root,组为yun
四、smb多用户挂载
问题导向:只有root用户通过了认证,而当前切换到student用户时依然可以查看共享文件,这是不合理的。
解决方法:
客户端
1. yum install cifs-utils.x86_64 -y 安装认证插件
2.查看该软件的连机帮助
man mount.cifs
3.创建smb用户的认证文件,也同时为了不泄露密码
vim /root/sbpassword
username=yun
password=yun
4.设置文件权限
chmod 600 /root/sbpass ##为了安全,设置认证文件权限为600
5.挂载
mount //172.25.254.223/hello /mnt -o credentials=/root/sbpassword,sec=ntlmssp,multiuser
credentials=/root/sbpassword 隐藏密码,告诉密码存放地址
sec=ntlmssp 认证方式
multiuser 多用户认证
检测:切换到student,此时没有权限,无法和擦看
关于用户认证:
cifscreds add -u username ip ##添加认证用户
cifscreds clear -u username ip ##清除指定已认证的用户
cifscreds clearall ##清除所有认证用户
cifscreds update -u username ip ##更新认证信息
ip为服务端的ip地址 -u username 必须是已经在服务端认证过的用户