身份认证
NFS是源自于unix的,因此其身份认证方式是采用当前用户的uid/gid组合,而不是像smb/cifs那样直观的用户名+密码。
跨windows和unix之间使用NFS,最大的问题就是身份映射,Identity Mapping。
方法一:通过kerberos传递身份,也就是LDAP,或者干脆用AD域。这个方法折腾了一整天还是没搞好,最终放弃。
方法二:把uid/gid映射到Windows系统中的user和group。
NFS4协议引入了一些尖端科技,会导致你即使映射好了,通过unix在share里新创建的文件,其user和group仍然都是-2,所以这种方法只能用在NFS3协议上。
- 勾选AUTH_SYS
- C:\Windows\System32\drivers\etc下建立unix风格的passwd和group文件,将其中的名字部分替换成windows里对应的名字,如:
要注意的是,Windows的NFS Server非常弱智,这两个文件里不能有空行,而且group里的内置组必须用BUILTIN前缀,而不是计算机名。
严重怀疑整个NFS Server功能设计之初只考虑了给域内用。
Unix挂载
Ubuntu22.04的特定版本有bug,没法用NFS4,一直提示invalid argument啥的,解决方法是升级内核。
首先apt install nfs-common
然后sudo mount -t nfs -o mountvers=3 192.168.1.4:/UnixShare data -v
安全性
用脚后跟都能想到,uid/gid这种方式完全没有安全性可言,任何机器都可以把自己的uid和gid设置成和你一样,所以服务器端必须要有防火墙限制访问。
Windows中防火墙对应这两条规则,它们默认是对所有远程计算机开放的: