nfs关于用户写权限的配置

1 说明

nfs是很常用的网络共享盘方式,访问客户端数量多了之后,为确保安全,会做权限控制,一般都是放开读权限,而控制写权限。

本文将在几种场景下说明 nfs 关于用户写权限的配置。

2 配置

2.1 nfs一些细节原理

nfs 服务端即便在 exports 配置文件中配置了 rw,在客户端挂载时,往往也无法正常写入。

这个是因为 nfs 客户端挂载访问时是用 uid 映射的方式访问:

对于 root 用户,默认转换成 nobody 账号,也就是说,客户端不管你是以什么账号访问到 nfs 的挂载路径,在服务端,都是识别类似为 nobody@ ,实际访问到服务端上面的共享目录时,是以 nobody 账号的身份访问。

对于非 root 用户,则使用其账号访问,即如果 root 用户挂载,但是使用 user1 用户(假设 uid 为1000)访问,则在 nfs 服务端也是识别为 uid 为 1000 的用户访问,如果本地有对应的 uid ,则映射为对应的用户,即:如果服务端 uid 1000 对应为 testuser1,则最后客户端 user1 所对应的权限实际为服务端 testuser1 的权限

这部分建议查看链接:https://www.cnblogs.com/f-ck-need-u/p/7305755.html 

2.2 单独配置 root 用户写权限

对于 root 账号,可以在 exports 配置文件中添加 no_root_squash 选项即可,这样在客户端访问时,root 账号不会权限不会被冲刷成 nobody / nfsnobody ,直接映射为服务端 root 账号权限。

但是这样的配置权限太大,存在安全风险,实际生产中比较少这么配置。

2.3 配置非 root 普通用户写权限

nfs 并没有类似 no_root_squash 这种针对非 root 普通用户的配置选项,所以需要使用其他的方式配置。

2.3.1 所有用户(包括root)

如果要允许所有用户,则在服务端,修改共享目录的基础权限,更改777,即要保证 other 位的需要有 rwx 所有的权限。

这样配置后,并且 exportfs -r 重新读取配置文件生效后,即可有写权限。客户端原先已经挂载的,则需 umount ,再 mount ,即生效。

(注:对于服务端来说,nobody 对于共享目录来说,也是应用 other 位的权限,所以此方法也适用于 root 账号,但影响不大,非root账号在此配置下,对于此共享目录也拥有所有的权限,跟 root 一致。所以,一般也不建议对所有用户开放写权限。)

以下图中操作是在服务端配置。

nfs关于用户写权限的配置_第1张图片

2.3.2 个别非 root 普通用户

如果只允许个别非 root 普通用户,则可使用 anonuid 和 anongid 配置项,然后对共享目录配置 acl 权限,根据所授权的 uid 或 gid 配置。

  • 如果使用 anonuid ,则客户端需要授权的用户账号的 uid 需要跟 anonuid 一致。
  • 如果使用 anongid ,则客户端需要授权的用户账号的 groups 中需要有对应的 gid 。

一般需要挂载的客户端比较多,为了便于后续的配置管理,不需要经常调整配置,建议使用 anongid (如501)来配置,然后在客户端创建用户组,其 gid 跟服务端 anongid 一致,对于需要授权的用户账号,将新创建的用户组添加至用户的附属组中。

以下为服务端配置:

nfs关于用户写权限的配置_第2张图片

nfs关于用户写权限的配置_第3张图片

以下为客户端配置(服务端使用 anongid 时)

nfs关于用户写权限的配置_第4张图片

你可能感兴趣的:(nfs关于用户写权限的配置)