第六章、nfs网络文件系统
1.nfs网络文件系统简介
NFS(Network File system,网络文件系统)是由SUN公司研制的UNIX表示层协议,它允许网络中的计算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源,主要在unix系列操作系统上使用。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
1.1NFS功能特点
- 由于NFS支持的功能比较多,而不同的功能都会使用不同的程序来启动,
- 每启动一个功能就会启用一些端口来传输数据,因此NFS的功能所对应的端口并不固定nfs一般使用未被使用的小于1024的端口用于传输
- 但如此一来就会产生客户端连接服务器的问题,因为客户端需要知道服务器端的相关端口才能够连接
1.2.RPC(Remote Procedure Call)
由于当服务器在启动NFS时会随机选取数个端口号,并主动向RPC注册,所以RPC知道每个NFS功能所对应的端口号,RPC将端口号通知给客户端,让客户端可以连接到正确的端口上去。RPC采用固定端口号port111来监听客户端的需求并向客户端响应正确的端口号。
1.3NFS的访问原理
1.server端的nfs向本机的RPC(portmap)注册服务和端口
2.client端的用户向本机RPC(portmap)提出远程访问请求
3.client端的RPC(portmap)向server端的RPC(portmap)请求获得用户需求nfs注册的端口
4.server端的RPC(portmap)向clinet端的RPC(portmap)发送nfs注册的端口
5.client端的RPC(portmap)在获得对应端口后直接向server端的nfs服务器请求访问并且挂载到client端的目录
在启动NFS之前,要先启动RPC,否则NFS会无法向RPC注册RPC若重新启动,原来注册的数据会消失不见,因此RPC重启后,它管理的所有服务都需要重新启动以重新向RPC注册
2.nfs服务的安装与部署
在服务端和客户端安装dnf install nfs-utils -y
安装后启动服务systemctl enable --now nfs.server
在服务器端建立一个/nfs
文件
接着写一个文件vim /etc/exports
/nfs 192.168.0.0/24(ro,sync)
共享的目录 共享主机 (只读,先输入再同步)
编辑好之后让其生效
exportfs -rv
在另一台主机查看
showmount -e 192.168.0.200
3.客户端中挂载nfs
在该台主机中挂载
将服务器端的/nfs挂载到本机的/mnt/中
mount 192.168.0.200:/nfs /mnt/
查看挂载信息
测试:
在服务器端创建一个文件
在客户端查看
成功。
4.常用参数
vim /etc/exports
/nfs 192.168.0.0/24(rw,sync)
设置为读写操作
exportfs -rv
服务器端
客户端
我们修改参数之后在客户机建立一个文件flie2
在服务器端查看文件的权限信息如下所示
显示nobody
的原因
all_squash #客户端所有用户创建文件时,客户端会将文件的用户和组映射为匿名用户和组
no_all_squash #客户端普通用户创建的文件的 UID 和 GID 是多少,服务端就显示为多少(默认设置)
如果不想显示nobody
,可以修改参数为
vim /etc/exports #服务器端
/nfs 192.168.0.0/24(rw,sync,no_root_squash)
exportfs -rv
此时在客户端建立文件file3时,在服务器端的显示就会是如下所示(由超级用户root创建的文件,就会显示root)
指定用户身份(指定用户lee)
vim /etc/exports #服务器端/nfs 192.168.0.0/24(rw,sync,anonuid=1001,anongid=1001)exportfs -rv
此时建立的file4的文件属于指定用户lee的
5.nfs客户端动态挂载机制
dnf install autofs -y #下载(在客户端下载)systemctl enable --now autofs #启动通过cd /net/主机进入
cd /net/192.168.0.200
5.1设定动态卸载时间
vim /etc/autofs.confsystemctl restart autofs
我们退出,等待5s后df查看挂载信息,发现已经被卸载
5.2自定义动态挂载点
vim /etc/auto.master #客户端修改主策略文件添加如下内容
/nfs /etc/auto.nfsshare
#最终挂载点的上层目录 #子策略文件
vim /etc/auto.nfsshare #建立文件并编写内容添加如下内容
nfs1 -rw 192.168.0.200:/nfssystemctl restart autofs.service
进入/nfs/nfs1,查看挂载信息
5.3自动匹配策略
进入到哪个文件就自动挂载到哪个文件
服务器端建立文件
在客户端的
vim /etc/auto.nfsshare
编写
* -rw 192.168.0.200:/nfs/&
如下图所示,进入到哪个文件就自动挂载那个文件
第七章、SELinux
1.SElinux简介
SELinux是Security-Enhanced Linux的缩写,意思是安全强化的linux
SELinux 主要由美国国家安全局(NSA)开发,当初开发的目的是为了避免资源的误用
传统的访问控制在我们开启权限后,系统进程可以直接访问
当我们对权限设置不严谨时,这种访问方式就是系统的安全漏洞
在开启SElinux后
- 会对进程本身部署安全上下文
- 会对文件部署安全上下文
- 会对服务使用端口进行限制
- 会对程序本身的不安全功能做限制
开始设置两台主机(一台开启selinux,一台关闭selinux)
查看selinux的状态
getenforce
disbale为关闭状态
grubby --update-kernel ALL --args selinux=1 #修改内核参数,启动selinuxreboot #重启
下载
dnf install vsftpd -y #文件传输
dnf install lftp -ysystemctl enable --now vsftpd
设置匿名用户可以登录
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
[root@localhost ~]# systemctl restart vsftpd
设置上传功能
修改该文件的权限(pub用于存放可供用户公开访问的文件)
1.1对进程本身部署安全上下文
将两台主机设置好之后
ps axZ | grep vsftpd #显示进程的 SELinux 上下文
如下所示,172.25.254.150
是开启selinux的,会显示相关的selinux的上下文
192.168.0.200
是关闭selinux的,不会显示相关的selinux的上下文
1.2会对文件部署安全上下文
我们建立文件leefile
ls -Z leefile #用于显示文件或目录的 SELinux 上下文。
分别在两台主机中建立文件
在开启selinux的主机中无法查看到leefile
在关闭selinux的主机中可以查看到leefile
1.3会对服务使用端口进行限制
vim /etc/ssh/sshd_config
在该文件中修改端口号为2222,重启后发现
开启selinux的主机无法重新启动,但是关闭selinux的主机可以重新启动
1.4会对程序本身的不安全功能做限制
我们分别在两台主机中上传文件,
开启selinux的主机无法上传
关闭selinux的主机可以上传
getsebool -a | grep ftp
#getsebool是一个用于查看 SELinux 布尔值(Boolean values)的命令。SELinux 布尔值用于控制特定的 SELinux 策略规则,通过设置这些布尔值,可以允许或禁止某些操作。
2.selinux的工作原理
2.1SElinux的工作方式
SELinux是通过MAC的方式来控制管理进程,它控制的主体是进程,而目标则是该进程能否读取的文件资源
- 主体(subject):就是进程
- 目标(object):被主体访问的资源,可以是文件、目录、端口等。
- 策略(policy):由于进程与文件数量庞大,因此SELinux会依据某些服务来制定基本的访问安全策略
targeted:针对网络服务限制较多,针对本机限制较少,是默认的策略;
strict:完整的SELinux限制,限制方面较为严格。
2.2SELinux 的安全上下文
安全上下文(security context):
主体能不能访问目标除了策略指定外,主体与目标的安全上下文必须一致才能够顺利访问。
最终文件的成功访问还是与文件系统的rwx权限设置有关
安全上下文的查看
文件的安全上下文
]# ls -Z
system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
unconfined_u:object_r:admin_home_t:s0 Desktop
进程的安全上下文
]# ps axZ | grep vsftpd
system_u:system_r:ftpd_t:s0-s0:c0.c1023 43035 ? Ss 0:00 /usr/sbin/vsftpd
/etc/vsftpd/vsftpd.conf
安全上下文用冒号分为四个字段:Identify:role:type:
身份标识(Identify):相当于账号方面的身份标识,主要有以下三种常见的类型:
root: 表示root的账号身份;
system_u: 表示程序方面的标识,通常就是进程;
unconfined_u:代表的是一般用户账号相关的身份。
角色(role):通过角色字段,可知道这个数据是属于程序、文件资源还是代表用户。一般角色有:
object_r: 代表的是文件或目录等文件资源;
system_r: 代表的是进程。
类型(type):在默认的targeted策略中,Identify与role字段基本上是不重要的,重要的在于
这个类型字段。而类型字段在文件与进程的定义不太相同,分别是:
type: 在文件资源上面称为类型。
domain: 在主体程序中则称为域
domain需要与type搭配,则该程序才能够顺利读取文件资源。
代表灵敏度,一般用s0、s1、s2来命名,数字代表灵敏度的分级。数值越大、灵敏度越高
3.对于SElinux的管理及优化
SElinux有三种工作模式:
-
enforcing:强制模式,开始限制domain/type。
-
permissive:宽容模式,仅会有警告信息并不会实际限制domain/type的访问。
-
disabled:关闭,SELinux并没有实际运行。
3.1selinux的状态设置
1.查看SElinux当前状态查看
getenforce
2.临时更改SElinux的工作模式
setenforce 0|1
0 表示宽容模式
1 表示强制模式
setenforce只有在SElinux在激活状态下使用,不能用于开启或关闭SElinux
设置状态为Permissive
,该状态下可以查看文件信息,但会有警告信息
cat /var/log/audit/audit.log # Linux 系统中与审计(Audit)相关的日志文件
查看警告信息
3.2selinux对linux服务的影响
1.服务的功能影响
在selinux开启的状态下上传文件是不允许的
但是可以修改
ftpd_anon_write --> off #状态是off
修改后
setsebool -P ftpd_anon_write on
接着
chcon -t public_content_rw_t /var/ftp/pub/
此时可以上传
3.3服务的端口影响
vim /etc/ssh/sshd_config
修改端口为2222,重启不能运行
但是
semanage port -a -t ssh_port_t -p tcp 2222 #根据需求更改被允许使用的端口
semanage port -l | grep ssh #查看服务被允许使用的端口