在内网环境里Linux和Windows想要共享文件,形式有一些,smb,nfs。
NFS比较简单,不进行身份认证。
Linux直接比较简单,windows很早就有Unix的服务,2003也有nfs的客户端,不过2003要退了。
2008R2默认没有,需要安装。
添加角色开始,选文件服务,进入下一步,就可以看见【网络文件系统服务】,选择,安装。
然后在开始,管理工具,看见Network File System服务(NFS),点击后可以打开一个管理画面,基本上没什么用途的一个管理界面。
这时候打开文件夹的属性就会多一个选项,NFS共享。
选择NFS共享,点击共享此文件夹,kerberos v5那两个不要选,选无身份验证,启用未映射的用户访问,允许未映射的用户Unix访问。
然后点击权限,选择读写和允许根目录访问。
进入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文件的权限是什么样的。
出现了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