Openssh、Nfs
文章目录
Openssh
一、Openssh简介
OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程中的数据,并由此来代替原来的类似服务。
知识延伸:
ssh协议有两个版本:
- v1:基于CRC-32 做MAC,不安全; (一般用于实现主机认证)
- v2:基于协议协商选择双方都支持的最安全的MAC机制
基于DH做密钥交换,基于RSA或DSA实现身份认证,从而实现无需输入账号面膜 - 客户端通过检查服务器端的主机秘钥来判断是否能够继续通信;
认证方式:
- 基于口令的认证
- 基于密钥的认证
二、Openssh的作用
由于传统的telnet、rcp ftp等工具是明文传输数据的,对数据安全性存在很大的安全隐患,而OpenSSH可以对传输的数据进行加密从而大大提高了数据的安全性。
三、OpenSSH程序简介
OpenSSH的分为客户端和服务端两部分
-
Clients端的配置文件:/etc/ssh/ssh_config
-
Server端的配置文件:/etc/ssh/sshd_config
-
Server端服务脚本:/etc/rc.d/init.d/sshd
OpenSSH在Linux系统中默认是安装并启动的
openssh 主要的关键包有四个
openssh.x86_64 5.3p1-104.el6 //服务端和客户端的公共组件
openssh-askpass.x86_64 5.3p1-104.el6 //
openssh-clients.x86_64 5.3p1-104.el6 //客户端安装包
openssh-server.x86_64 5.3p1-104.el6 //服务端安装包
openssl-clients 几个常用文件
[root@localhost ~]# rpm -ql openssh-clients
/etc/ssh/ssh_config //客户端配置文件
/usr/bin/scp //远程复制文件
/usr/bin/sftp //远程文件共享
/usr/bin/slogin
/usr/bin/ssh
/usr/bin/ssh-add
/usr/bin/ssh-agent
/usr/bin/ssh-copy-id
/usr/bin/ssh-keyscan
openssl-server 几个常用文件
/etc/rc.d/init.d/sshd
/etc/ssh/sshd_config
/etc/sysconfig/sshd
服务器端配置文件/etc/ssh/sshd_config 主要参数详解
服务端配置文件是让别人登陆时使用的
注:配置文件中使用“#”注释掉的一般就是使用默认
参数 | 注释 |
---|---|
#Port 22 | //默认端口号,为了其安全一般要更改为其他端口 |
#AddressFamily any | //说明要监听任意地址 |
#ListenAddress 0.0.0.0 | //监听本机所有IPV4的ip |
#ListenAddress :: | //监听本机所有的IPV6的地址 |
Protocol 2 | 监听的协议版本 |
# HostKey for protocol version 1 | //说明key的协议版本 |
SyslogFacility AUTHPRIV | //使用AUTHPRIV 记录日志 |
#LogLevel INFO | //log日志级别 |
#Authentication: | //认证相关 |
#PermitRootLogin yes | //是否支持管理员直接登陆 |
#StrictModes yes | //是否使用严格模式 (严格检查用户的某些相关信息) |
#RSAAuthentication yes | //是否支持RSA密钥认证 |
#PubkeyAuthentication yes | //是否支持公钥认证 |
客户端配置文件/etc/ssh/ssh_config 主要参数详解
客户端配置文件时登陆别人的ssh使用的
参数 | 注释 |
---|---|
#Host * | //表示连接所有主机 |
#Port 22 | //默认连接端口 |
#Cipher 3des | //加密时使用的加密机制 |
#StrictHostKeyChecking ask | //严格的主机秘钥检查 即第一次连接时是否询问 |
四、客户端ssh的使用
1、ssh的基本语法
ssh [OPTIONS] [user]@server [COMMAND]
- -l user: 以指定用户身份连接至服务器;默认使用本地用户为远程登录时的用户;
ssh user@server
ssh -l user server
实例
环境
主机 ip
node1 192.168.58.10
node2 192.168.58.20
[root@node1 ~]# ip a //查看当前主机ip
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:b7:b0:df brd ff:ff:ff:ff:ff:ff
inet 192.168.58.10/24 brd 192.168.58.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
inet6 fe80::ca43:3f86:3176:184c/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@node1 ~]# ssh root@192.168.58.20
The authenticity of host '192.168.58.20 (192.168.58.20)' can't be established.
ECDSA key fingerprint is SHA256:WWNUfnxMY6JpaYtzbdkxTIZSANvOUmXQl0hTULKwikw.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.58.20' (ECDSA) to the list of known hosts.
root@192.168.58.20's password: //输入所连主机的ip
Activate the web console with: systemctl enable --now cockpit.socket
This system is not registered to Red Hat Insights. See https://cloud.redhat.com/
To register this system, run: insights-client --register
Last login: Fri Sep 24 23:05:07 2021 from 192.168.58.10
[root@node2 ~]#
测试 (ssh 连上node2后创建一个目录) 然后查看
Last login: Fri Sep 24 23:01:36 2021 from 192.168.58.1
[root@node2 ~]# mkdir test
[root@node2 ~]#
Last login: Fri Sep 24 23:05:07 2021 from 192.168.58.10
[root@node2 ~]# ls
anaconda-ks.cfg test
[root@node2 ~]# exit
注销
Connection to 192.168.58.20 closed.
[root@node1 ~]#
SSH 主机密钥
ssh通过公钥加密的方式保持通信安全。当某一ssh客户端连接到ssh服务器时,在该客户端登录之前,服务器会向其发送公钥副本。这可用于为通信渠道设置安全加密,并可验证客户端的服务器。
当用户第一次使用ssh连接到特定服务器时,ssh命令可在用户的/.ssh/known_hosts文件中存储该服务器的公钥。在此之后每当用户进行连接时,客户端都会通过对比/.ssh/known_hosts文件中的服务器条目和服务器发送的公钥,确保从服务器获得相同的公钥。如果公钥不匹配,客户端会假定网络通信已遭劫持或服务器已被入侵,并且中断连接。
这意味着,如果服务器的公钥发生更改(由于硬盘出现故障导致公钥丢失,或者出于某些正当理由替换公钥),用户则需要更新其~/.ssh/known_hosts文件并删除旧的条目才能够进行登录。
主机ID存储在本地客户端系统上的
[root@node1 ~]# cat ~/.ssh/known_hosts
192.168.58.10 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEPb6+ibxzWLa1GPNeAMu91/GMzYJRa7jmOh48WtzFoUc4OqQvsc5DY38fqsK2U+APD4NEf+anv7bcieX7eLNBs=
192.168.58.20 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKaCw+2ojcY4NMpki7fEmMuVC6j6zjeASNLilekY8u4FaVPgJQG+lbA2+nzBusqa0oHiC4WlIY3kJJ5p2ejCvGw=
主机密钥存储在SSH服务器上的 /etc/ssh/ssh_host_key* 中
[root@node1 ~]# ls /etc/ssh/*key*
/etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key /etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ed25519_key.pub /etc/ssh/ssh_host_rsa_key.pub
配置基于 SSH 密钥的身份验证
用户可通过使用公钥身份验证进行ssh登录身份验证。ssh允许用户使用私钥-公钥方案进行身份验证。这意味着将生成私钥和公钥这两个密钥。私钥文件用作身份验证凭据,像密码一样,必须妥善保管。公钥复制到用户希望登录的系统,用于验证私钥。公钥并不需要保密。拥有公钥的ssh服务器可以发布仅持有您私钥的系统才可解答的问题。因此,可以根据所持有的密钥进行验证。如此一来,就不必在每次访问系统时键入密码,但安全性仍能得到保证。
使用ssh-keygen命令生成密码。将会生成私钥/.ssh/id_rsa和公钥/.ssh/id_rsa.pub。
注意:
生成密钥时,系统将提供指定密码的选项,在访问私钥时必须提供该密码。如果私钥被偷,除颁发者之外的其他任何人很难使用该私钥,因为已使用密码对其进行保护。这样,在攻击者破解并使用私钥前,会有足够的时间生成新的密钥对并删除所有涉及旧密钥的内容。
生成ssh密钥后,密钥将默认存储在家目录下的.ssh/目录中。私钥和公钥的权限就分别为600和644。.ssh目录权限必须是700。
在可以使用基于密钥的身份验证前,需要将公钥复制到目标系统上。可以使用ssh-copy-id完成这一操作
[root@localhost ~]# ssh-copy-id remoteuser@remotehost
通过ssh-copy-id将密钥复制到另一系统时,它默认复制~/.ssh/id_rsa.pub文件
[root@node1 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:C/WzHuRyyUroR3q8PIrRj2EO50vFEz4hujfv13CpoAU root@node1
The key's randomart image is:
+---[RSA 3072]----+
| |
| |
| . + |
| .E= + |
| . ..S + . |
| o ++B.+o |
| + X*+.B= |
| %oO==o.. |
| . B*B+. |
+----[SHA256]-----+
[root@node1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.58.20
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.58.20's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@192.168.58.20'"
and check to make sure that only the key(s) you wanted were added.
五、scp远程复制工具的使用简介
语法:
scp [OPTIONS] SRC…DEST
常用选项:
-
-r: 递归复制,复制目录及内部文件时使用;
-
-p: 保存源文件元数据信息中的属主、属组及权限;
-
-q: 静默模式
-
-P PORT: 指明远程服务器使用的端口;
两种模式:
-
PUSH: scp [OPTIONS] /PATH/FROM/SOMEFILE … user@server:/PATH/TO/DEST
//复制本地文件至远程主机 (但远程目录一定要有写权限) -
PULL: SCP [OPTIONS] user@server:/PATH/FROM/SOMEFILE /PATH/TO/DEST
实例
//远程目标主机文件至本地
eg1:复制当前主机上的/root/test2至192.168.58.20主机的/opt/目录下
[root@node1 ~]# ls
anaconda-ks.cfg test2
[root@node1 ~]# scp -p /root/test2 root@192.168.58.20:/opt/
test2 100% 0 0.0KB/s 00:00
[root@node1 ~]# ls
//到node2 查看
[root@node2 ~]# ls /opt/
data test2
eg2:复制远程主机/etc/fstab至当前主机当前目录下
//在node2创建一个testing.txt的文件
[root@node2 ~]# touch testing.txt
[root@node2 ~]# ls
anaconda-ks.cfg testing.txt
//在node1,将node2的testing cp到当前目录中来
[root@node1 ~]# scp root@192.168.58.20:/root/testing.txt ./
testing.txt 100% 0 0.0KB/s 00:00
[root@node1 ~]# ls
anaconda-ks.cfg test2 testing.txt
[root@node1 ~]#
七、增强服务端sshd配置指南
1、不要使用默认端口;(修改默认端口为其他端口)
配置文件:/etc/ssh/sshd_config
Port 22
service sshd restart //修改后需要重启服务
2、不要使用v1版本协议:
Protocol 2
3、限制可登陆的用户 {需要添加}
AllowUsers:允许登陆的用户白名单 (多个用户使用空格隔开)
AllowGroups:允许登陆的组的白名单
DenyUsers
DenyGroups
/etc/ssh/sshd_config
#service sshd reload
==》 获取配置文件详细信息;【 man sshd_conifg 】
4、设定空闲会话超时时长:
5、利用防火墙设置ssh访问策略:
限定ssh服务仅允许***服务器分配有限的地址段内的主机访问
6、仅监听特定的IP地址:
7、使用强密码策略:
[root@node1 ssh]# tr -dc A-Za-z0-9 < /dev/urandom | head -c 30 | xargs
Qe6zOmB2sBNpEONVcKhWS8T4bVrcb0
8、使用基于密钥的认证;
9、禁止使用空密码
10、禁止root直接登陆
PermitRootLogin no
11、限制ssh的访问频度
12、做好日志、经常做日志分析
/var/log/secure
Nfs
一、Nfs简介
NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。
NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利;
NFS一般用来存储共享视频,图片等静态数据。
NFS挂载原理如图
当我们在NFS服务器设置好一个共享目录/home/public后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到自己文件系统的某个挂载点,这个挂载点可以自己定义,如上图客户端A与客户端B挂载的目录就不相同。并且挂载好后我们在本地能够看到服务端/home/public的所有数据。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。挂载后,NFS客户端查看磁盘信息命令:#df –h。
既然NFS是通过网络来进行服务器端和客户端之间的数据传输,那么两者之间要传输数据就要有想对应的网络端口,NFS服务器到底使用哪个端口来进行数据传输呢?基本上NFS这个服务器的端口开在2049,但由于文件系统非常复杂。因此NFS还有其他的程序去启动额外的端口,这些额外的用来传输数据的端口是随机选择的,是小于1024的端口;既然是随机的那么客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?这时就需要通过远程过程调用(Remote Procedure Call,RPC)协议来实现。
二、RPC与NFS通讯原理:
因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能对应的端口并不固定,客户端要知道NFS服务器端的相关端口才能建立连接进行数据传输,而RPC就是用来统一管理NFS端口的服务,并且统一对外的端口是111,RPC会记录NFS端口的信息,如此我们就能够通过RPC实现服务端和客户端沟通端口信息。PRC最主要的功能就是指定每个NFS功能所对应的port number,并且通知客户端,记客户端可以连接到正常端口上去。
那么RPC又是如何知道每个NFS功能的端口呢?
首先当NFS启动后,就会随机的使用一些端口,然后NFS就会向RPC去注册这些端口,RPC就会记录下这些端口,并且RPC会开启111端口,等待客户端RPC的请求,如果客户端有请求,那么服务器端的RPC就会将之前记录的NFS端口信息告知客户端。如此客户端就会获取NFS服务器端的端口信息,就会以实际端口进行数据的传输。
注意:在启动NFS SERVER之前,首先要启动RPC服务(即portmap服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。特别注意:一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行systemctl reload nfs或exportfs –rv即可使修改的/etc/exports生效
三、NFS客户端和NFS服务器通讯过程:
-
首先服务器端启动RPC服务,并开启111端口
-
服务器端启动NFS服务,并向RPC注册端口信息
-
客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
-
服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
-
客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
四、NFS服务器部署
安装NFS服务,需要安装两个软件,分别是:
RPC主程序:rpcbind
NFS 其实可以被视为一个 RPC 服务,因为启动任何一个 RPC 服务之前,我们都需要做好 port 的对应 (mapping) 的工作才行,这个工作其实就是『 rpcbind 』这个服务所负责的!也就是说, 在启动任何一个 RPC 服务之前,我们都需要启动 rpcbind 才行! (在 CentOS 5.x 以前这个软件称为 portmap,在 CentOS 6.x 之后才称为 rpcbind 的!)。
NFS主程序:nfs-utils
就是提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其他相关 documents 与说明文件、执行文件等的软件!这个就是 NFS 服务所需要的主要软件。
NFS的相关文件:
主要配置文件:/etc/exports
这是 NFS 的主要配置文件了。该文件是空白的,有的系统可能不存在这个文件,主要手动建立。NFS的配置一般只在这个文件中配置即可。
NFS 文件系统维护指令:/usr/sbin/exportfs
这个是维护 NFS 分享资源的指令,可以利用这个指令重新分享 /etc/exports 变更的目录资源、将 NFS Server 分享的目录卸除或重新分享。
分享资源的登录档:/var/lib/nfs/*tab
在 NFS 服务器的登录文件都放置到 /var/lib/nfs/ 目录里面,在该目录下有两个比较重要的登录档, 一个是 etab ,主要记录了 NFS 所分享出来的目录的完整权限设定值;另一个 xtab 则记录曾经链接到此 NFS 服务器的相关客户端数据。
客户端查询服务器分享资源的指令:/usr/sbin/showmount
这是另一个重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 则主要用在 Client 端。showmount 可以用来察看 NFS 分享出来的目录资源。
五、NFS服务安装
//安装NFS和rpc(node1和node2都下载)
[root@node1 ~]# yum install -y nfs-utils rpcbind
//关防火墙(node1、2都关,)
[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@node1 ~]# setenforce 0
//启动服务并设置开机自启
注意:先启动rpc服务,再启动nfs服务。
[root@node1 ~]# systemctl start rpcbind
[root@node1 ~]# systemctl enable rpcbind
[root@node1 ~]# systemctl start nfs-server
//创建共享文件目录,编辑配置文件
[root@node1 ~]# mkdir /public
#创建public共享目录
[root@node1 ~]# vim/etc/exports
/public 192.168.58.0/24(ro)
/protected 192.168.58.0/24(rw)
[root@node1 ~]# systemctl restart nfs-server rpcbind
#重新加载NFS服务,使配置文件生效
配置文件说明:
格式: 共享目录的路径 允许访问的NFS客户端(共享权限参数)
如上,共享目录为/public , 允许访问的客户端为192.168.58.0/24网络用户,权限为只读。
请注意,NFS客户端地址与权限之间没有空格。
NFS输出保护需要用到kerberos加密(none,sys,krb5,krb5i,krb5p),格式sec=XXX
none:以匿名身份访问,如果要允许写操作,要映射到nfsnobody用户,同时布尔值开关要打开,setsebool nfsd_anon_write 1
sys:文件的访问是基于标准的文件访问,如果没有指定,默认就是sys, 信任任何发送过来用户名
krb5:客户端必须提供标识,客户端的表示也必须是krb5,基于域环境的认证
krb5i:在krb5的基础上做了加密的操作,对用户的密码做了加密,但是传输的数据没有加密
krb5p:所有的数据都加密
用于配置NFS服务程序配置文件的参数:
参数 作用
- ro 只读
- rw 读写
- root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
- no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
- all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
- sync 同时将数据写入到内存与硬盘中,保证不丢失数据
- async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
NFS客户端挂载配置:
使用showmount命令查看nfs服务器共享信息。输出格式为“共享的目录名称 允许使用客户端地址”。
[root@node2 ~]# showmount -e 192.168.58.10
Export list for 192.168.58.10:
/protected 192.168.58.0/24
/public 192.168.58.0/24
showmount命令的用法;
- -e 显示NFS服务器的共享列表
- -a 显示本机挂载的文件资源的情况NFS资源的情况
- -v 显示版本号
//在客户端创建目录,并挂载共享目录。
[root@node2 ~]# mkdir /mnt/public
[root@node2 ~]# mkdir /mnt/data
[root@node2 ~]# vim /etc/fstab
#在该文件中挂载,使系统每次启动时都能自动挂载
192.168.58.10:/public /mnt/public nfs defaults 0 0
192.168.58.10:/protected /mnt/data nfs defaults 0 1
[root@node1 ~]# mount -a #是文件/etc/fstab生效
//查看
[root@node2~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/rhel-root xfs 17G 3.1G 14G 18% /
devtmpfs devtmpfs 1.4G 0 1.4G 0% /dev
tmpfs tmpfs 1.4G 140K 1.4G 1% /dev/shm
tmpfs tmpfs 1.4G 9.1M 1.4G 1% /run
tmpfs tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 173M 842M 18% /boot
tmpfs tmpfs 280M 32K 280M 1% /run/user/0
/dev/sr0 iso9660 3.6G 3.6G 0 100% /mnt/cdrom
192.168.58.10:/public nfs4 17G 3.7G 14G 22% /mnt/public
192.168.58.10:/protected nfs4 17G 3.7G 14G 22% /mnt/data
作业
1.手动搭建一个nfs服务器
开放/nfs/shared目录,供所有用户查阅资料
开放/nfs/upload目录为172.16.12.0/24网段的数据上传目录,并将所有用户及所属的用户组都映射为nfs-upload,其UID与GID均为300
手动搭建一个nfs服务器
- 开放/nfs/shared目录,供所有用户查阅资料
关闭防火墙
[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@node1 ~]# setenforce 0
安装NFS服务
[root@node1 ~]# yum install -y nfs-utils
systemctl start nfs-server rpcbind
创建目录
[root@node1 ~] # mkdir -p /nfs/shared
编辑配置文件和共享目录
[root@node1 ~]# vim /etc/exports
[root@node1 nfs]# cat /etc/exports
/nfs/shared *(ro,sync)
在客户端关闭防火墙
[root@node2 ~]# systemctl stop firewaldd
Failed to stop firewaldd.service: Unit firewaldd.service not loaded.
[root@node2 ~]# systemctl stop firewalld
[root@node2 ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@node2 ~]# setenforce 0
安装NFS服务
[root@node2 ~]# yum install -y nfs-utils rpcbind
[root@node2 ~]# systemctl start nfs-server rpcbind
在客户端查看共享目录
[root@node2 ~]# showmount -e 192.168.58.120
Export list for 192.168.58.120:
/nfs/shared *
创建挂载点目录,挂载
[root@node2 ~]# mkdir /xu
[root@node2 ~]# mount -t nfs 192.168.58.120:/nfs/shared /xu
[root@node2 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 883M 0 883M 0% /dev
tmpfs 901M 0 901M 0% /dev/shm
tmpfs 901M 8.7M 892M 1% /run
tmpfs 901M 0 901M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 47G 1.7G 46G 4% /
/dev/nvme0n1p1 1014M 179M 836M 18% /boot
tmpfs 181M 0 181M 0% /run/user/0
192.168.58.120:/nfs/shared 47G 1.7G 46G 4% /xu
- 开放/nfs/upload目录为172.16.12.0/24网段的数据上传目录,并将所有用户及所属的用户组都映射为nfs-upload,其UID与GID均为300
创建共享目录
[root@node1 ~]# mkdir -p /nfs/upload
在服务器端设置属主和属组
[root@node1 ~]# chown nfs-upload.nfs-upload /nfs/upload
创建nfs-upload用户 ,UID和GID为300
[root@node1 ~]# useradd -r -u 300 nfs-upload
修改配置文件
[root@node1 nfs]# cat /etc/exports
/nfs/shared *(ro,sync)
/nfs/upload 192.168.58.0/24(rw,anonuid=300,anongid=300,sync)
systemctl restart nfs-server rpcbind
在客户端查看共享目录
[root@node2 ~]# showmount -e 192.168.58.120
Export list for 192.168.58.120:
/nfs/shared *
/nfs/upload 192.168.58.0/24
创建挂载点目录,挂载
[root@node2 ~]# mkdir /xm
[root@node2 ~]# mount -t nfs 192.168.58.120:/nfs/upload /xm
查看
[root@node1 ~]# cd /nfs
[root@node1 nfs]# ll
总用量 0
drwxr-xr-x. 2 root root 6 9月 24 18:38 shared
drwxr-xr-x. 2 nfs-upload nfs-upload 6 9月 24 18:41 upload