大数据学习Linux

1. 文件共享服务-NFS

2021-02-12  本文已影响0人  随便写写咯

1. NFS服务基础

1.1 NFS工作原理

NFS: Network File System网络文件系统, 是基于内核的文件系统. 
通过使用NFS, 应用程序可以像访问本地文件一样访问远端系统上的文件, 基于RPC(Remote Procedure Call)远程过程调用实现.
RPC采用C/S模式, 客户机应用程序调用本地进程(portmap), 发送一个有进程参数的调用信息到服务进程(portmap), 然后等待应答信息. 
在服务器端, portmap进程保持睡眠状态, 直到调用信息到达. 当一个调用信息到达, 服务器获得进程参数, 计算结果, 发送答复信息, 然后等待下一个调用信息
最后, 客户端调用本地portmap进程, 接受答复信息, 获得进程结果, 然后调用继续进行
图片.png
当在NFS服务器设置好一个共享目录, 如/home/data后, 其他有权限访问NFS服务器的NFS客户端就可以将这个/home/data挂载到自己文件系统的某个挂载点
这个挂载点, 客户端可以自己定义, 并且挂载好后, 可以在客户端本地访问挂载点, 即可访问到NFS服务器上/home/data的所有数据
如果服务器端配置为客户端只读, 那么客户端只能读取文件. 如果是读写权限, 客户端就可以在本地的挂载点进行读写, 而文件的修改也是发生在服务器端

1.2 NFS的通讯

NFS工作在2049端口, 而除了2049, NFS还会开启多个随机端口, 来给客户端提供服务, 多个不同的端口通过rpcbind服务来统一进行注册和调度
[23:10:24 root@nfs ~]#grep 2049 /etc/services 
nfs             2049/tcp        nfsd shilp      # Network File System
nfs             2049/udp        nfsd shilp      # Network File System
nfs             2049/sctp       nfsd shilp      # Network File System
客户端通过rpcbind服务(port:111)来和服务端统一进行交互, 而NFS服务器会把开启的随机端口注册在rpcbind服务中. 
客户端通过rpcbind注册中心, 来调用NFS服务器上不同的功能
NFS服务依赖于rpcbind服务, 因此,  NFS启动依赖于rpcbind. 不过, 在CentOS7版本后, 系统各服务间的依赖关系会自动解决

客户端和服务器端通信流程:

1. 服务器端启动rpc服务, 开启111端口
2. 服务器端启动NFS服务, 并且向rpcbind注册自己开启的随机端口号
3. 客户端启动rpc, 向服务器端的rpc服务请求服务器端的NFS端口
4. 服务器端的rpc服务将NFS开启的端口号通知客户端
5. 客户端通过获取NFS的端口号与NFS建立连接, 开始数据传输

1.3 NFS软件

软件包: nfs-utils(包含服务器和客户端相关工具)
相关软件包: rpcbind(必须安装), tcp_wrappers, 安装nfs-utils会自动安装这两个软件包
rpcbind.x86_64 0:0.2.0-49.el7              tcp_wrappers.x86_64 0:7.6-77.el7
Kernel支持: nfs.ko
端口: 2049(nfsd), 其他端口由portmap(111)分配
说明: Centos6开始, portmap进程由rpcbind代替

1.4 共享资源定义文件

1. /etc/exports文件, 由系统基础包提供
[23:30:07 root@nfs ~]#rpm -qf /etc/exports
setup-2.8.71-11.el7.noarch
2. /etc/exports.d, 由nfs-utils包提供
/etc/exports.d/*.exports
两者都可以定义共享资源

1.5 服务启动

[23:33:15 root@nfs ~]#systemctl enable --now nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[23:35:08 root@nfs ~]#ss -ntl
State      Recv-Q Send-Q                                             Local Address:Port                                                            Peer Address:Port              
LISTEN     0      100                                                    127.0.0.1:25                                                                         *:*                  
LISTEN     0      64                                                             *:2049                                                                       *:*                  
LISTEN     0      128                                                            *:59524                                                                      *:*                  
LISTEN     0      128                                                            *:111                                                                        *:*                  
LISTEN     0      128                                                            *:20048                                                                      *:*                  
LISTEN     0      64                                                             *:34134                                                                      *:*                  
LISTEN     0      128                                                            *:22                                                                         *:*                  
LISTEN     0      100                                                        [::1]:25                                                                      [::]:*                  
LISTEN     0      64                                                          [::]:40607                                                                   [::]:*                  
LISTEN     0      64                                                          [::]:2049                                                                    [::]:*                  
LISTEN     0      128                                                         [::]:36940                                                                   [::]:*                  
LISTEN     0      128                                                         [::]:111                                                                     [::]:*                  
LISTEN     0      128                                                         [::]:20048                                                                   [::]:*                  
LISTEN     0      128                                                         [::]:22                                                                      [::]:* 

1.6 NFS主要进程

rpc.nfsd 最主要的NFS进程, 管理客户端是否可登录
rpc.mountd 挂载和卸载NFS文件系统, 包括权限管理
rpc.lockd 非必要, 管理文件锁, 避免同时写出错
rpc.statd 非必要, 检查文件一致性, 可修复文件

2 NFS应用

文件共享案例

NFS服务器: 10.0.0.197
NFS客户端: 10.0.0.207

2.1 服务器上创建共享目录

[23:42:51 root@nfs ~]#mkdir /data/nfsdir{1,2}
[23:44:14 root@nfs ~]#ls /data
nfsdir1  nfsdir2
[23:44:16 root@nfs ~]#touch /data/nfsdir1/a.txt
[23:45:11 root@nfs ~]#touch /data/nfsdir2/b.txt
[23:45:17 root@nfs ~]#tree /data
/data
├── nfsdir1
│   └── a.txt
└── nfsdir2
    └── b.txt

2 directories, 2 files

2.2 将目录共享

共享/data/nfsdir1目录, 所有人都可以远程挂载该目录(*), 后面的权限选项不写就是默认(ro,sync,root_squash,no_all_squash) 
[23:45:19 root@nfs ~]#vim /etc/exports

/data/nfsdir1 *  
[23:48:05 root@nfs ~]#vim /etc/exports.d/test.exports

/data/nfsdir2 *(rw)   # 注意, 被允许的主机位和选项位之间不能有空格

2.3 让配置生效

方法1: 重启nfs服务
systemctl restart nfs
方法2: exportfs - r # 仅让配置文件生效的命令. 不会重启服务, 不会影响用户体验
#警报提示可以忽略, 因为nfsdir1没有设定选项
[23:53:40 root@nfs ~]#exportfs -r
exportfs: No options for /data/nfsdir1 *: suggest *(sync) to avoid warning

2.4 查看NFS共享配置

exportfs -v (显示当前主机上, 通过nfs共享出来的目录, 以及对应有权限的主机和相应权限)
[23:53:42 root@nfs ~]#exportfs -v
/data/nfsdir1   <world>(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
/data/nfsdir2   <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

2.5 客户端远程挂载

NFS客户端: 10.0.0.207
showmount来自nfs-utils包, 因此要在客户端也安装nfs-utils包
showmount -e HOSTNAME 可以列出, 目标主机,通过nfs共享出来的文件列表
[23:57:29 root@nfs-client ~]#showmount -e 10.0.0.197
Export list for 10.0.0.197:
/data/nfsdir2 *
/data/nfsdir1 *
[23:57:34 root@nfs-client ~]#mkdir /var/www/html/wordpress -pv
mkdir: created directory ‘/var/www’
mkdir: created directory ‘/var/www/html’
mkdir: created directory ‘/var/www/html/wordpress’
  1. 临时挂载

通过mount命令去挂载共享目录, nfs中用mount命令实际是调用的mount.nfs4, 这个包来自于nfs-utils, 因此客户端也需要安装nfs-utils包

[00:00:47 root@nfs-client ~]#mount
mount       mount.fuse  mount.nfs   mount.nfs4  mountpoint  mountstats  

格式:
mount 服务器ip:共享目录 本地目录
[00:01:56 root@nfs-client ~]#mount 10.0.0.197:/data/nfsdir1 /var/www/html/wordpress

验证

[00:02:02 root@nfs-client ~]#df -h
Filesystem                Size  Used Avail Use% Mounted on
devtmpfs                  476M     0  476M   0% /dev
tmpfs                     487M     0  487M   0% /dev/shm
tmpfs                     487M  7.7M  479M   2% /run
tmpfs                     487M     0  487M   0% /sys/fs/cgroup
/dev/sda2                  20G  1.6G   19G   8% /
/dev/sda5                  27G   33M   27G   1% /data
/dev/sda1                1014M  131M  884M  13% /boot
tmpfs                      98M     0   98M   0% /run/user/0
10.0.0.197:/data/nfsdir1   27G   33M   27G   1% /var/www/html/wordpress


[00:02:21 root@nfs-client ~]#ls /var/www/html/wordpress
a.txt
由于nfsdir1是默认权限, 只能读, 所有无法修改a.txt文件

[00:02:37 root@nfs-client ~]#> /var/www/html/wordpress/a.txt 
-bash: /var/www/html/wordpress/a.txt: Read-only file system
创建另一个挂载点, 测试nfsdir2, 由于权限是读写权限, 所以, 可以修改b.txt文件

[00:03:02 root@nfs-client ~]#mkdir /var/www/html/discuzz -pv
mkdir: created directory ‘/var/www/html/discuzz’
[00:03:53 root@nfs-client ~]#mount 10.0.0.197:/data/nfsdir2 /var/www/html/discuzz/
[00:04:20 root@nfs-client ~]#ls /var/www/html/discuzz/
b.txt
[00:04:25 root@nfs-client ~]#echo "test" > /var/www/html/discuzz/b.txt 
-bash: /var/www/html/discuzz/b.txt: Permission denied
这里虽然dir2是写权限, 但是仍然修改失败, 权限拒绝
[00:14:06 root@nfs ~]#ll /data
total 0
drwxrwxrwx 2 root root 19 Feb 11 23:45 nfsdir1
drwxrwxrwx 2 root root 19 Feb 11 23:45 nfsdir2
修改操作系统文件权限后即可完成写操作
[15:36:23 root@nfs ~]#chmod  -R o+w  /data/nfsdir2
[00:04:43 root@nfs-client ~]#echo "test" > /var/www/html/discuzz/b.txt 
[00:14:24 root@nfs-client ~]#cat /var/www/html/discuzz/b.txt
test
在客户端以root用户创建文件, 文件的属主和属组被压榨为nfsnobody(uid-nfsnobody)
[15:36:27 root@nfs-client ~]#touch /var/www/html/discuzz/file1.txt
touch: cannot touch ‘/var/www/html/discuzz/file1.txt’: Permission denied

[15:40:04 root@nfs ~]#ll /data
total 4
drwxr-xr-x 6 mysql mysql 4096 Apr 22 13:17 mysql
drwxr-xr-x 2 root  root    19 Apr 22 13:26 nfsdir1
drwxr-xrw- 2 root  root    19 Apr 22 13:26 nfsdir2
[15:40:12 root@nfs ~]#ll /data/nfsdir2/
total 4
-rw-r--rw- 1 root root 5 Apr 22 15:36 b.txt
服务端修改权限
[15:40:17 root@nfs ~]#chmod -R 777 /data/nfsdir2

再次在客户端创建文件
[15:41:53 root@nfs-client ~]#touch /var/www/html/discuzz/file1.txt
[15:42:24 root@nfs-client ~]#ll /var/www/html/discuzz/
total 4
-rwxrwxrwx 1 root      root      5 Apr 22 15:36 b.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Apr 22 15:42 file1.txt
root压榨: 默认情况下, root用户在挂载点创建文件会被压榨成nfsnobody用户, 文件在客户端和服务器端都是nfsnobody
客户端
[15:42:24 root@nfs-client ~]#ll /var/www/html/discuzz/
total 4
-rwxrwxrwx 1 root      root      5 Apr 22 15:36 b.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Apr 22 15:42 file1.txt
服务端
[15:53:57 root@nfs ~]#ll /data/nfsdir2
total 4
-rwxrwxrwx 1 root      root      5 Apr 22 15:36 b.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Apr 22 15:42 file1.txt

修改失败原因分析:

  1. 虽然nfs共享目录在设置时允许了客户端rw, 但是这是在nfs层面, 操作系统层面是没有给客户端写权限的
  2. 以客户端的root向共享目录写数据, 实际到了服务器那端就是其他用户了, 因此客户端的root并不是服务器上的root. 这里客户端在共享目录里创建文件时, 用户身份会被映射成nfsnobody
综合两点, 想要客户端的账户, 能在共享目录有写权限, 除了要在/etc/exports文件里设定rw权限, 还要在文件系统层面 给于远程用户整个目录的读写执行(777)权限. 
目录读权限,可以ls看目录里的内容
目录写权限, 可以在目录创建和删除文件
目录执行权限, 可以进入到该目录. 
文件和目录的权限补充:
想进一个目录, 需要x权限, 如果对一个目录只有x权限, 也就只能进入目录, 无法查看目录内容ls, 无法在目录内创建,删除文件touch等
想在目录里创建删除文件, 要有目录的wx权限, 如果对一个目录只有wx权限,可以进入该目录, 可以在目录内创建删除文件, 但是不能修改文件. 如果要修改文件, 需要对文件本身有w权限
想看一个目录里的文件列表, 需要rx权限, 如果对一个目录只有rx权限, 可以ls查看目录文件列表,进入目录,但是不能创建删除文件. 至于能不能修改目录里的文件内容, 要看对文件有没有写权限, 这时如果对文件没有w权限就无法修改文件了

2.6 root_squash

容易出现的问题:

在不同的nfs客户端(比如, web服务器)上, 相同的用户名的用户id不一定一样, 因此, 同一个用户比如admin, 如果在web1上的id是100, 在web2的id是200, 100访问nfs时会映射成nfs上100的用户名, 200访问nfs时会映射成nfs上200的用户名. 这时同一个用户admin通过不同的服务器访问nfs映射成的用户不一样就会导致权限混乱, 影响文件的管理.

比如, 用户通过web1传了一个图片到nfs, web1上的系统账户比如apache的id是100,访问nfs会映射成nfs上100用户,那么所上传的图片的属主和属组也就是该100用户. 之后用户又想删除该图片,结果连接服务器时被调度到了web2, 而web2上的apache是200id, 通过200id连接到nfs会被映射成nfs上200id的用户, 肯定是和第一次连接时映射的用户不同, 那么也就没有权限删除图片了. 但是如果下次在访问又被调度回了web1就又能删除了.
因此, 如果服务器账号不统一, 很可能导致权限问题, 验证失败

如何统一所有机器的用户名和id:

  1. ldap方式, 实现集中的用户账户管理

不在每个web机器创建用户账户, 而是专门创建一个统一的共享服务, 专门来存放web服务器用户账号.
ldap服务器里有一个数据库, 会把所有的用户账号在数据库里建起来. nfs服务器从ldap服务器拿账号做认证.

  1. 另外所有容器里的id也要一致, 在制作基础镜像时就要保证账户一致, 所有上层的业务镜像都是从基础镜像集成账号,以此保证所有服务器账户一致.
  2. web服务器都用root和nfs连接,并且设置不压榨root
  3. web服务器爱用啥用啥, 但是访问到nfs都统一压榨成同一个用户

如果不想压榨root成普通用户, 只需修改nfs上对应目录的共享配置文件即可, 这里以/data/nfsdir2为例

恢复/data/nfsdir2的权限到默认的755

[00:54:46 root@nfs ~]#chmod 755 /data/nfsdir2
[00:54:54 root@nfs ~]#ll -d /data/nfsdir2
drwxr-xr-x 2 root root 36 Feb 12 00:16 /data/nfsdir2

修改/data/nfsdir2的共享配置文件

[00:54:58 root@nfs ~]#vim /etc/exports.d/test.exports 

/data/nfsdir2 *(rw,no_root_squash)   # 各权限位之间不要有空格

[00:56:04 root@nfs ~]#exportfs -r
exportfs: No options for /data/nfsdir1 *: suggest *(sync) to avoid warning

[00:56:04 root@nfs ~]#exportfs -v
/data/nfsdir1   <world>(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
/data/nfsdir2   <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

在客户端测试

[00:57:57 root@nfs-client /var/www/html/discuzz]#echo 111 > file1.txt  # 文件修改成功
[00:58:02 root@nfs-client /var/www/html/discuzz]#cat file1.txt 
111
[00:59:19 root@nfs-client /var/www/html/discuzz]#touch file2.txt
-rw-r--r-- 1 root      root      0 Feb 12 00:59 file2.txt # 属主和属组都是root了

在服务器端查看创建的文件

[00:56:30 root@nfs ~]#ll /data/nfsdir2
total 8
-rw-r--r-- 1 root      root      0 Feb 12 00:59 file2.txt # 新建的文件, 属主和属组也是root了

如果 no_root_squash和all_squash同时设定, 那么root还是会被压榨成nfsnobody

如何指定被压榨后的用户名? - 修改共享目录配合文件

[23:10:07 root@centos8-2 /data/nfsdir2]#vim /etc/exports.d/test.exports 

/data/nfsdir2 *(rw,all_squash,anonuid=2,anongid=2)
修改后, root和普通用户都会被压成nfs上uid=2,gid=2的人
root_squash: 默认选项, 远程root用户映射为nfsnobody用户, uid为65534
no_root_squash: 远程root映射成NFS服务器的root用户
all_squash: 所有远程用户, 包括root, 都变成nfsnobody
no_all_squash: 默认选项,不压榨普通用户, 保留共享文件的UID和GID

2.7 sync与async

sync: 同步, 数据在请求时, 立即写入共享存储磁盘, 性能低, 但是安全性高
async: 异步, 数据变化后不立即写入磁盘, 先写入缓冲区, 过一段时间, 再写入磁盘, 性能高, 但是安全性低

2.8 挂载权限设置

通过在共享目录配置ip地址来控制哪些ip的主机可以挂载
设定对于/data/nfsdir2目录, 10.0.0.207可以挂载并且是读写权限, 10.0.0.217可以挂载, 但是只读权限
[01:17:43 root@nfs ~]#vim /etc/exports.d/test.exports 

/data/nfsdir2 10.0.0.207(rw,no_root_squash) 10.0.0.217(ro)  
[01:29:06 root@nfs ~]#exportfs -r
exportfs: No options for /data/nfsdir1 *: suggest *(sync) to avoid warning
10.0.0.207测试, 之前已经挂载过了, 无需重新挂载
[01:22:38 root@nfs-client /var/www/html/discuzz]#touch testfile.txt
[01:22:45 root@nfs-client /var/www/html/discuzz]#

10.0.0.217测试
[01:25:52 root@nfs-client2 ~]#mount 10.0.0.197:/data/nfsdir2 /var/www/html/discuzz
[01:26:14 root@nfs-client2 ~]#df -h
Filesystem                Size  Used Avail Use% Mounted on
devtmpfs                  476M     0  476M   0% /dev
tmpfs                     487M     0  487M   0% /dev/shm
tmpfs                     487M  7.7M  479M   2% /run
tmpfs                     487M     0  487M   0% /sys/fs/cgroup
/dev/sda2                  20G  1.6G   19G   8% /
/dev/sda5                  27G   33M   27G   1% /data
/dev/sda1                1014M  131M  884M  13% /boot
tmpfs                      98M     0   98M   0% /run/user/0
10.0.0.197:/data/nfsdir2   27G   33M   27G   1% /var/www/html/discuzz
[01:28:06 root@nfs-client2 /var/www/html/discuzz]#echo 11 > testfile.txt 
-bash: testfile.txt: Read-only file system

NFS权限隐患

即使没有权限挂载的主机, 也可以通过showmount -e 命令查看到nfs服务器设定的挂载规则. 这样就可以修改自己的ip地址充当允许挂载的机器, 不安全.

2.9 长期使用, 远程挂载, 持久保存

mount挂载都是临时, 重启失效, 持久保存, 要写入/etc/fstab文件

在10.0.0.207永久挂载/data/nfsdir2目录
[01:33:17 root@nfs-client ~]#vim /etc/fstab
10.0.0.197:/data/nfsdir2                   /mnt                     nfs  _netdev     0 0   
_netdev:表示挂载的是网络资源, 服务器启动时要读取fstab文件进行挂载, 如果启动时网络和远程服务器不通,导致连不上远程服务器
那么启动时服务器就会卡死起不来, 加了这项就会主动探测网络是否通畅, 如果不通,就先不挂载, 等服务器启动后,再进行排错. 避免了由于网络不通导致挂载失败,服务器无法启动.

让挂载生效: -a -a, --all               mount all filesystems mentioned in fstab

[01:36:10 root@nfs-client ~]#mount -a

练习项目:

图片.png

利用一台DNS服务器实现前端调度, web服务器用3台linux apache, nfs用2台linux.
实现客户访问web服务器,先通过dns查询, dns查询随机返回服务器ip, 客户随机调度到不同的服务器,可以访问到相同的文件资源..

一台dns服务器
3台web服务器
2台nfs服务器
一台客户端
2台MySQL作为主从

2.10 停止本机所有共享与恢复

停止: exportfs -au
恢复: exportfs -a

2.11 指定nfs挂载的版本

CentOS7默认是4.1版本

mount -o vers=3
通过mount确认

3 利用autofs实现自动挂载

效果: 访问某一个文件夹时, 会自动触发预先设定的挂载规则, 显示其目录的内容

利用autofs服务

1. 利用autofs
2. 安装autofs后利用自带的nfs挂载功能, 该功能也适用于临时挂载nfs,访问数据.  方便做测试.

案例: 设置/data/net目录就是预先定好的挂载目录, 将nfs上的/data/nfsdir2目录挂载到/net目录上.

  1. 安装autofs软件
[01:36:12 root@nfs-client ~]#yum -y install autofs
[01:59:41 root@nfs-client ~]#systemctl enable --now autofs.service
  1. 设置规则
[01:50:11 root@nfs-client ~]#rpm -ql autofs
/etc/auto.master # 该文件可以定义挂载逻辑
相对路径法: 把要挂载的文件目标, 和挂载点的对应关系, 拆分成两部分实现, auto.master只写挂载点的父目录
父目录: /data --> 写到/etc/auto.master文件, 表示本机的/data目录是挂载点的父目录, 至于/data内部具体挂载哪些目录, 由另外一个文件决定, 需要手动指定一个子配置文件, 在其中定义具体挂载到哪个目录
挂载点会自动创建
格式:
/etc/auto.master:  /data /etc/test.autofs(子配置文件)
/etc/test.autofs: net 10.0.0.197:/data/nfsdir2
[02:00:01 root@nfs-client ~]#vim /etc/auto.master
/data /etc/test.autofs
[02:04:15 root@nfs-client ~]#vim /etc/test.autofs 
net -fstype=nfs,rw 10.0.0.197:/data/nfsdir2  
[02:05:08 root@nfs-client ~]#systemctl restart autofs
[02:07:56 root@nfs-client ~]#ll /data/net
total 16
-rwxrwxrwx 1 root      root      5 Feb 12 00:14 b.txt
-rw-r--r-- 1 nfsnobody nfsnobody 4 Feb 12 00:58 file1.txt
-rw-r--r-- 1 root      root      0 Feb 12 00:59 file2.txt
-rw-r--r-- 1 root      root      3 Feb 12 01:28 testfile.txt
-rw-r--r-- 1 root      root      3 Feb 12 01:28 test.txt
[02:08:18 root@nfs-client ~]#cd /data/net
[02:08:32 root@nfs-client /data/net]#touch filefile.txt
[02:08:36 root@nfs-client /data/net]#cat b.txt 
test

对于NFS的资源, 利用autofs, 需要NFS赋予本机权限才行

autofs自带NFS功能, 对于NFS的资源, 如果有权限, 可以直接访问, 无需挂载
不过需要客户端也安装nfs-utils
auto.master文件中预先定义好了NFS资源的映射关系
/net    -hosts
只要访问/net目录, 指明NFS服务器的地址, 就可以访问NFS上自己有权限的文件
[02:16:12 root@nfs-client ~]#ls /net/10.0.0.197/data/nfsdir1
a.txt
[02:16:21 root@nfs-client ~]#ls /net/10.0.0.197/data/nfsdir2
b.txt  file1.txt  file2.txt  filefile.txt  testfile.txt  test.txt
绝对路径法
把父目录和挂载目录都在自配置文件中指定
vim /etc/auto.master
/-     /etc/test.autofs
vim /etc/test.autofs
/data/net -fstype=nfs,rw 10.0.0.197:/data/nfsdir2 
[02:18:32 root@nfs-client ~]#systemctl restart autofs
[02:18:37 root@nfs-client ~]#ll /data/net
total 16
-rwxrwxrwx 1 root      root      5 Feb 12 00:14 b.txt
-rw-r--r-- 1 nfsnobody nfsnobody 4 Feb 12 00:58 file1.txt
-rw-r--r-- 1 root      root      0 Feb 12 00:59 file2.txt
-rw-r--r-- 1 root      root      0 Feb 12 02:08 filefile.txt
-rw-r--r-- 1 root      root      3 Feb 12 01:28 testfile.txt
-rw-r--r-- 1 root      root      3 Feb 12 01:28 test.txt

3.1 利用autofs实现自动挂载用户家目录

10.0.0.187 - NFS服务器
10.0.0.207 - client1
10.0.0.197 - client2
yum -y install nfs-utils
yum -y install autofs
[05:49:53 root@nfs ~]#mkdir -pv /data/home 
mkdir: created directory ‘/data/home’
[05:52:41 root@nfs ~]#useradd -d /data/home/admin -u 1111 admin
[05:53:31 root@nfs ~]#vim /etc/exports

/data/home *(rw)  # 将/data/home目录共享出来, 所有主机都可以挂载, 具有读写权限
[05:54:15 root@nfs ~]#exportfs -r
[05:55:15 root@nfs ~]#exportfs -v
/data/home      <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,root_squash,no_all_squash)
[05:51:47 root@client1 ~]#useradd -M -u 1111 admin
[05:56:19 root@client1 ~]#vim /etc/auto.master
/home /etc/auto.home
[05:57:16 root@client1 ~]#vim /etc/auto.home

* -fstype=nfs 10.0.0.187:/data/home/& 
[05:57:50 root@client1 ~]#systemctl restart autofs
systemctl enable --now nfs
[06:04:18 root@client1 ~]#su - admin
Last login: Fri Feb 12 06:03:12 CST 2021 on pts/0
[06:04:20 admin@client1 ~]$pwd
/home/admin
[06:02:01 root@nfs ~]#ll /data/home/
total 0
drwx------ 2 admin admin 62 Feb 12 05:53 admin # 只有admin有权限
NFS: 在NFS创建时, 要指定家目录在/data/home/leader下
[06:11:26 root@nfs ~]#useradd -d /data/home/leader -u 3333 leader
client1: 客户端创建用户时, 不要创建家目录

[06:12:59 root@client1 ~]#useradd -M -u 3333 leader
[06:13:06 root@client1 ~]#su - leader
[06:13:10 leader@client1 ~]$pwd
/home/leader
[06:13:11 leader@client1 ~]$cd /home/admin
-bash: cd: /home/admin: Permission denied

[06:13:38 leader@client1 ~]$ll /home
total 0
drwx------ 2 admin   admin   83 Feb 12 06:07 admin
drwx------ 2 leader  leader  62 Feb 12 06:11 leader
[15:25:12 root@nfs ~]#useradd -d /data/home/user2222 -u 2222 user2222
[15:29:47 root@nfs ~]#useradd -d /data/home/user4444 -u 4444 user4444
[15:33:25 root@client2 ~]#vim /etc/auto.master
/home /etc/auto.home 
[15:34:09 root@client2 ~]#vim /etc/auto.home 

* -fstype=nfs 10.0.0.187:/data/home/&  
[15:29:56 root@client2 ~]#useradd -M -u 2222 user2222
[15:30:01 root@client2 ~]#useradd -M -u 4444 user4444
上一篇下一篇

猜你喜欢

热点阅读