NFS(Network File System 网络文件服务) 文件系统(软件)文件的权限 NFS 是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。 通过使用 NFS 协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源 NFS 也是 NAS 存储 设备必然支持的一种协议。
NFS 它是文件系统,是操作系统内核来管理的
[root@localhost ~]#ls /lib/modules/3.10.0-693.el7.x86_64/kernel/fs/
binfmt_misc.ko.xz ceph dlm fat gfs2 lockd nfs_common overlayfs udf
btrfs cifs exofs fscache isofs mbcache.ko.xz nfsd pstore xfs
cachefiles cramfs ext4 fuse jbd2 nfs nls squashfs
NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制,通过使用 NFS 协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。(远端过程调用:自己没有这种功能,调用别人的功能) NFS 也是 NAS 存储 设备必然支持的一种协议 以完成远 程到本地的映射过程。在 CentOS 7 系统中,需要安装 nfs-utils、rpcbind 软件包来提供 NFS 共享服务, 前者用于 NFS 共享发布和访问,后者用于 RPC 支持。 手动加载 NFS 共享服务时,应该先启动 rpcbind,再启动 nfs。
特点: 采用TCP/IP传输网络文件 安全性低 简单易操作 适合局域网环境
NFS优势:
节省本地存储空间,将常用的数据如:/home 目录,存放在NFS服务器上且可以通过网络访问,将减少本地磁盘的使用率。
软件包:nfs-utils(包括服务器端和客户端)
相关软件包:rpcbind(必须)
nfs端口号不固定 RPC端口号111
NFS服务主要进程:
rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
rpc.lockd 非必要,管理文件锁,避免同时写出错
rpc.statd 非必要,检查文件一致性,可修复文件
日志:/var/lib/nfs/
区别:
ftp:装客户端、服务端、设置,比较复制
nfs:简单,高效
NFS的主包:
nfs-utils
rpcbind
主配置文件路径:
/etc/exports
文件格式:
共享目录 可以访问的主机地址 (权限)
/share *
systemctl start nfs
exportfs -v:显示本机服务端的共享目录
exportfs -r:重新加载配置文件
/dir 主机1(opt1,opt2) 主机2(opt1,opt2)...
共享目录 共享给哪个主机
格式说明:
- 以#开始的行为注释
- 主机格式
anonymous:表示使用*通配所有客户端
单个主机:ipv4,ipv6,FQDN
IP networks:两种掩码格式均支持
172.18.0.0/255.255.0.0
172.18.0.0/16
wildcards:主机名通配,例如:*.magedu.com,IP不可以
netgroups:NIS域的主机组,@group_name
每个条目指定目录导出到的哪些主机,及相关的权限和选项
默认选项:(ro,sync,root_squash,no_all_squash)
ro,rw 只读和读写
async 异步,数据变化后不立即写磁盘,先写入到缓冲区中,过一段时间再写入磁盘,性能高,安全性低
sync(1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘,性能低,安全性高
root_squash (默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,CentOS
7以前的版本为nfsnobody
no_root_squash 远程root映射成NFS服务器的root用户
all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody
no_all_squash (默认)保留共享文件的UID和GID
anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用
/data/nfs1 *(rw,all_squash,anonuid=1002,anongid=1002)
共享规则:
#查看当前共享信息
exportfs -v
[root@localhost ~]#exportfs -r
#重新加载服务配置
exportfs: No options for /share *: suggest *(sync) to avoid warning###客户机上如何查看共享
[root@localhost yum.repos.d]#showmount -e 192.168.91.100
#
Export list for 192.168.91.100:
/share *[root@localhost yum.repos.d]#mount 192.168.91.100:/share /mnt/nfs1/
# 对方地址 共享文件夹 挂载点
[root@localhost yum.repos.d]#df
[root@localhost data]#chmod 777 /data/ -R
[root@localhost data]#chmod 755 /data/ -R
#恢复权限
[root@localhost data]#setfacl -m u:nfsnobody:rwx /data/nfs1
#只给 nfsnobody用户 权限
[root@localhost data]#setfacl -b /data/nfs1
#删除acl 列表
[root@localhost nfs1]#ll
#变成nobody 由root_squash(压缩缩小) 决定
总用量 4
-rw-r--r--. 1 nfsnobody nfsnobody 0 3月 21 01:17 111.txt
-rwxrwxrwx. 1 root root 2259 3月 21 01:12 passwd
#普通用户不压榨 由 no_all_squash决定/share *(rw,no_root_squash)
###用户 uid问题####
统一压榨成指定用户
用于管理NFS导出的文件系统
常见选项:
-v #查看本机所有NFS共享
-r #重读配置文件,并共享目录
-a #输出本机所有共享
-au #停止本机所有共享
用于客户端查看服务端的共享目录
常见用法:
showmount -e hostname
[root@centos7 ~]#showmount -e 10.0.0.8
Export list for 10.0.0.8:
/data/wordpress *
客户端NFS挂载
NFS相关的挂载选项:man 5 nfs
fg #(默认)前台挂载
bg #后台挂载
hard #(默认)持续请求
soft #非持续请求
intr #和hard配合,请求可中断
rsize #和wsize 一次读和写数据最大字节数,rsize=32768
_netdev #无网络连接不挂载
vers #指定版本,客户端centos8默认4.2 ,centos7默认4.1 centos6默认4.0
例子
mount -o rw,nosuid,fg,hard,intr 172.16.0.1:/testdir /mnt/nfs/
#临时挂载
[root@centos7 ~]#mkdir /mnt/nfs
[root@centos7 ~]#mount 10.0.0.8:/data/wordpress /mnt/nfs
[root@centos7 ~]#ls /mnt/nfs
index.html
[root@centos7 ~]#df -T /mnt/nfs
Filesystem Type 1K-blocks Used Available Use% Mounted on
10.0.0.8:/data/wordpress nfs4 52403200 398336 52004864 1% /mnt/nfs永久挂载
vim /etc/fstab
172.16.0.1:/public /mnt/nfs nfs defaults,_netdev(无网络就不加载) 0 0
systemctl stop firewalld
setenforce 0
#关闭防火墙和核心防护
rpm -q nfs-utils
rpm -q rpcbind
#看一下这两个软件有没有安装
systemctl status nfs
systemctl status rpcbind
#看一下有没有开启
mkdir /share
mkdir /data
#建两个文件夹
vim /etc/exports
#进入nfs的配置文件
exportfs -v
#显示本机服务端的共享目录
exportfs -r
#重新加载配置文件
showmount -e 172.16.18.5
#用于客户端查看服务端的共享目录
mount 172.16.18.5:/data /mnt
#挂载
试验一下,使用data是否等于使用mnt
试验一下,在客户端,能否查看,创建服务端的文件
vim /etc/exports
#在服务端,在nfs配置文件里,给他们加上读写权限
exportfs -v
#显示本机服务端的共享目录
exportfs -r
#重新加载配置文件
解决权限变更后,为什么还是创建不了?
创建文件的用户身份怎么不对?
为什么会出现,有的用户身份改变,有的不变呢?
如果不想身份改变
systemctl stop firewalld
setenforce 0
#关闭防火墙和核心防护
yum install httpd -y
#安装httpd服务
cd /var/www/html
#切到网页主文件夹下
echo 7-2 > index.html
#在index.html中写入内容:7-2
cat index.html
#查看一下内容
systemctl start httpd
#开启httpd服务
systemctl stop firewalld
setenforce 0
#关闭防火墙和核心防护
yum install httpd -y
#安装httpd服务
systemctl start httpd
#开启httpd服务
cd /var/www/html
#切到网页主文件夹下
vim index.html
#在index.html中写入内容:7-2
systemctl stop firewalld
setenforce 0
#关闭防火墙和核心防护
vim index.html
#在index.html中写入ky35
mount 172.16.18.5:/data /var/www/html
#在7-2服务器上挂载,地址为7-1的
mount 172.16.18.5:/data /var/www/html
#在7-3服务器上挂载
[root@localhost ~]#type rpm
#是一个外部命令
rpm 是 /usr/bin/rpm[root@localhost ~]#rpm -e rpm
#依赖性会组织
错误:依赖检测失败:
rpm = 4.11.3-25.el7 被 (已安裝) rpm-libs-4.11.3-25.el7.x86_64 需要
rpm 被 (已安裝) color-filesystem-1-13.el7.noarch 需要
rpm = 4.11.3-25.el7 被 (已安裝) rpm-python-4.11.3-25.el7.x86_64 需要
rpm >= 0:4.11.3-22 被 (已安裝) yum-3.4.3-154.el7.centos.noarch 需要
rpm >= 4.1.1 被 (已安裝) createrepo-0.9.9-28.el7.noarch 需要
rpm 被 (已安裝) policycoreutils-2.5-17.1.el7.x86_64 需要
rpm 被 (已安裝) cmake-2.8.12.2-2.el7.x86_64 需要[root@localhost ~]#rpm -e rpm --nodeps
#忽略依赖关系
[root@localhost ~]#yum install rpm -y
#yum 也是 使用rpm 无法安装了
error: Unable to open /usr/lib/rpm/rpmrc for reading: No such file or directory.
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:
进入救援模式
1 继续
mount /dev/sr0 /mnt/
cp /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
mkdir test
mv tree-1.6.0-10.el7.x86_64.rpm test/
cd test
mkdir packages
mv tree-1.6.0-10.el7.x86_64.rpm packages/
createrepo -v test
cd /etc/yum.repos.d/
mkdir bak
mv *.repo bak/vim tree.repo
[tree]
name=tree
baseurl=file:///data/test
gpgcheck=0yum clean all
yum makecache
yum install tree -y
没有外网 又想使用这个epel源
[root@localhost ~]#yum install epel-release
#安装epel源 生成epel仓库文件
[root@localhost ~]# reposync -r epel -p /root/
#下载同步epel源 根据epel仓库文件去找目录[root@localhost ~]# yum -y install createrepo
#安装建立元数据命令
[root@localhost ~]# createrepo -v /root/epel
#建立元数据 软件目录 依赖关系
[root@localhost ~]# ls
anaconda-ks.cfg epel
[root@localhost ~]# cd epel/
[root@localhost epel]# ls
#查看元数据
ftp
http
mkisofs -r -o /root/xxx.iso /data/centos7/epel
制作成镜像
root@localhost yum.repos.d]#yum install nginx
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 nginx.x86_64.1.1.20.1-9.el7 将被 安装
--> 正在处理依赖关系 nginx-filesystem = 1:1.20.1-9.el7,它被软件包 1:nginx-1.20.1-9.el7.x86_64 需要
--> 正在处理依赖关系 nginx-filesystem,它被软件包 1:nginx-1.20.1-9.el7.x86_64 需要
--> 正在处理依赖关系 libssl.so.1.1(OPENSSL_1_1_1)(64bit),它被软件包 1:nginx-1.20.1-9.el7.x86_64 需要
--> 正在处理依赖关系 libssl.so.1.1(OPENSSL_1_1_0)(64bit),它被软件包 1:nginx-1.20.1-9.el7.x86_64 需要
--> 正在处理依赖关系 libcrypto.so.1.1(OPENSSL_1_1_0)(64bit),它被软件包 1:nginx-1.20.1-9.el7.x86_64 需要
--> 正在处理依赖关系 libssl.so.1.1()(64bit),它被软件包 1:nginx-1.20.1-9.el7.x86_64 需要
--> 正在处理依赖关系 libcrypto.so.1.1()(64bit),它被软件包 1:nginx-1.20.1-9.el7.x86_64 需要
--> 正在检查事务
---> 软件包 nginx-filesystem.noarch.1.1.20.1-9.el7 将被 安装
---> 软件包 openssl11-libs.x86_64.1.1.1.1k-2.el7 将被 安装
--> 解决依赖关系完成依赖关系解决
==========================================================================================================
Package 架构 版本 源 大小
==========================================================================================================
正在安装:
nginx x86_64 1:1.20.1-9.el7 epel 587 k
为依赖而安装:
nginx-filesystem noarch 1:1.20.1-9.el7 epel 24 k
openssl11-libs x86_64 1:1.1.1k-2.el7 epel 1.5 M事务概要
==========================================================================================================
安装 1 软件包 (+2 依赖软件包)总下载量:2.1 M
安装大小:5.2 M
Is this ok [y/d/N]:
[root@localhost yum.repos.d]# yum install nginx --downloadonly --downloaddir=/data/
[root@localhost http]#yum install nginx --downloadonly --downloaddir=/nginx/
--downloadonly #只下载相关包默认至某一目录
--downloaddir=绝对目录路径 #下载到某一目录真实 内网外网不可能互通
rpm
包依赖?
rpm