在内网环境里Linux和Windows想要共享文件,形式有一些,smb,nfs。

NFS比较简单,不进行身份认证。

Linux直接比较简单,windows很早就有Unix的服务,2003也有nfs的客户端,不过2003要退了。

2008R2默认没有,需要安装。

添加角色开始,选文件服务,进入下一步,就可以看见【网络文件系统服务】,选择,安装。

然后在开始,管理工具,看见Network File System服务(NFS),点击后可以打开一个管理画面,基本上没什么用途的一个管理界面。

这时候打开文件夹的属性就会多一个选项,NFS共享。

选择NFS共享,点击共享此文件夹,Windows2008R2的NFS_Linuxkerberos v5那两个不要选,选无身份验证,启用未映射的用户访问,允许未映射的用户Unix访问。

然后点击权限,选择读写和允许根目录访问。

Windows2008R2的NFS_nfs_02

进入Linux机器,先看看能不能看到Windows的nfs信息。

showmount -e 172.26.2.20

Export list for 172.26.2.20:
/NFS (everyone)

可以看到回复的信息。

挂上去

mount 172.26.2.20:NFS /var/tmp/2008cn

ll
drwx------ 2 nfsnobody nfsnobody 64  7月 13 15:45 2008cn

可以看见用户和用户组都是nfsnobody

以root的身份

cd 2008cn

touch uuu

ll
合計 0
-rw-r--r-- 1 root root 0  7月 13 16:04 uuu

做的文件的所有者都是root,回到Windows机看看这个uuu文件的权限是什么样的。

Windows2008R2的NFS_nfs_03

出现了4个不知名的用户。前面都是S-1-5-88-,后面才不同。

1-0:1是代表所有者,0是root的数字代码

2-0:2是代表组,0是root组的数字代码

4:是其它组的权限,就是other组

3-420:3是代表访问权限,我看到一些资料说那就是Linux的umask,认真点好吧,看这个420还有可以,有些数字根本就不是Linux能有的,-rw-r--r--根本不是420啊,它们之间当然是有关系的,通过研究发现,是一个计算公式,Linux的为abc,那么对应的值是(a*8+b)*8+c,比如这个644,就是420了。

我们回到Linux机

su shenxu

cd 2008cn

被告知没有权限

其它组的人无法访问啊,看看nfsnobody

cat /etc/passwd | grep nfsnobody
nfsnobody:x:4294967294:4294967294:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

cat /etc/group | grep nfsnobody
nfsnobody:x:4294967294:nfsnobody

usermod -a -G nfsnobody shenxu

chmod 770 2008cn

把shenxu加入nfsnobody

然后就可以进入读写了。

做一个文件

回到Windows机看一下刚才做的文件的访问权限

这个文件是

1-500

2-500

3-436

4

500是shenxu组和用户的数字号码,因为刚才更改了目录的权限,所以产生的文件变成了-rw-rw-r--,436


NTFS文件系统和Linux有些字符不对应,所以文件名不要搞汉字的和特种符号,用26英文字母和数字比较稳妥。

如果在NFS共享里,选择的不是【允许未映射的用户Unix访问】,而是匿名,那么有可能比较麻烦。

下面的匿名用户uid和gid,默认都是-2,如果有Linux图形界面,看到它的ID就是-2,在/etc/passwd里面是4294967294(centos5.3),但是也有时候是65534(centos6.6),这里和图形界面看见的相同,其实双字节65534变单字节-2,4字节4294967294变单字节-2。如果都填uid里500,刚才我做的shenxu账户的ID是500,那么Linux机无论哪个用户写的文件,属性所有者都变成500,有时候需要用命令行改一下文件夹的权限(Windows)

nfsfile /v /ru=-2 /rg=-2 /s /cx c:\NFS,

当Linux机mount的时候,提示Input/output error,一般是权限问题,先看本机的portmap服务开了没,要开的,客户端NFS服务可以不开,但是portmap服务必须开,如果是centos6,那么就不是portmap了,是rpcbind。如果还有问题,打开本地安全策略(Windows),网络访问: 将 Everyone 权限应用于匿名用户”为“启用”,目录的权限添加anonymous logon组,比较繁琐,所以还是用【允许未映射的用户Unix访问】比较方便。


另外如果有关于防火墙的问题。

经过防火墙时间建成log,发现要想从Linux连接到windows的NFS服务,需要监听的端口有:

TCP:2049,111

UDP:1048