NFS是Linux下常用的共享软件,v3版本不太安全,无法进行用户认证,这里简单说明一下V4版本和Kerberos配合实现认证访问的过程。
0.准备工作
跟之前的Kerberos一样,需要3台机器来做试验,很多资料上写的是两台,即kdc、nis、nfs都在同一台服务器和一台客户机,这里我们把nfs单独拆出来,即用户信息nis和kdc放一台服务器,nfs再另外一台服务器,地址和功能分配如下:
192.168.0.48 server.example.com kdc和nis服务器
192.168.0.49 nfs.example.com nfs服务器,提供nis用户的家目录
192.168.0.50 client.example.com 客户端
1.配置nis
增加一个用户nfsuser,这个用户的家目录路径需要在nfs上也有一套,所以可以在添加用户的时候指定家目录,也可以后面再改/etc/passwd,nfsuser的uid尽量大一点,防止跟客户机用户的uid重复。
#mkdir -p /home/nfs
#chcon -t home_root_t /home/nfs
#useradd -d /home/nfs/nfsuser -u 5000 nfsuser
#make -C /var/yp
2.在KDC中增加用户
#kadmin.local
kadmin.local:addprinc nfsuser
3.配置nfs服务器
需要共享的是nfsuser的家目录,我们有两种方式得到这个目录,一个是按照第1步在nfs.example.com上也建立这个用户家目录,然后删掉用户,只留家目录,还有就是可以直接复制过来:
#scp -rp server.example.com:/home/nfs /home/nfs
#chown -R 5000.5000 /home/nfs/nfsuser
NFS v4版可以隐藏服务器上的绝对路径,做成pseudo-filesystem,所以我们新建一个目录,绑定到/home/nfs上进行共享设置
#mkdir -p /exports/home/nfs
#mount --bind /exports/home/nfs /home/nfs
#mount 可以看到挂载信息
ps.如果要每次开机都进行绑定,修改/etc/fstab,加入如下行:
/home/nfs /exports/home/nfs none bind 0 0
修改nfs的配置,使其支持v4版本
#vim /etc/sysconfig/nfs
取消SECURE_NFS="yes"前的注释
ps.如果要固定端口,则更改LOCKD_TCPPORT、LOCKD_UPPORT、STATD_PORT、MOUNT_PORT几项
配置共享目录
#vim /etc/exports
- /exports gss/krb5p(rw,all_squash,anonudi=5000,anongid=5000,fsid=0,crossmnt)
-
/exports/home/nfs gss/krb5p(rw)
对用到的参数做个简单说明:
all_squash 所有用户都使用指定的uid和gid访问nfs服务器
anonuid,anongid 用户访问时使用的uid和gid
fsid=0 建立虚假的根目录,这里指出/exports是根,那么/exports/home/nfs在客户端看来就是/home/nfs
crossmnt 允许访问“根”目录下子目录
gss/ 这里指出nfs加密的方式,一共有三种方式krb5,krb5i,krb5p:
krb5 基于Kerberos票据的认证
krb5i 挂载时校验数据完整性
krb5p 通过kerberos认证,并且对数据进行加密
ps./etc/exports文件在写的时候,()一定要紧挨着前面的参数,中间不能有空格
更改selinux的bool值,使其支持用户家目录和nfs,如果不改,服务可引用正常启动,但是无法完成试验,日志会报错。
#setsebool -P use_nfs_home_dirs on
在KDC中增加nfs服务,nfs服务只支持des-cbc-md5:normal的加密方式,所以要指定一下
#kadmin
kadmin:addprinc -e des-cbc-md5:normal nfs/nfs.example.com
kadmin:ktadd -k /etc/krb5.keytab -e des-cbc-md5:normal nfs/nfs.example.com
#ktutil
ktutil:rkt /etc/krb5.keytab
ktutil:list
KDC支持的加密类型由/var/kerberos/krb5kdc/kdc.conf中的supported_enctypes 参数指定,默认使用的加密阿类型由master_key_type 指定。
ps.这个ktutil不大好用,删除了一个entry后,必须要保存成另外一个keytab文件,然后再覆盖原来的,否则那些没有删除的entry会重复。
OK,现在启动nfs服务
#service nfs restart
- Shutting down NFS mountd: [ OK ]
-
Shutting down NFS daemon: [ OK ]
-
Shutting down NFS quotas: [ OK ]
-
Shutting down NFS services: [ OK ]
-
Shutting down RPC svcgssd: [ OK ]
-
Starting RPC svcgssd: [ OK ]
-
Starting NFS services: [ OK ]
-
Starting NFS quotas: [ OK ]
-
Starting NFS daemon: [ OK ]
-
Starting NFS mountd: [ OK ]
与v3版本相比,多了一个服务,svcgssd,这是NFSv4的标志,另外还需要启动一个服务
#service rpcidmapd restart
看一下服务器启动是否正确
#tail -n 30 /var/log/message 如果有报错,很可能是selinux的配置有问题,重新回去检查一遍就行了
#showmount -e
#exortfs -v
4.客户端配置
客户端必须要先加入nis和kerberos,然后启用nfs v4,方法跟服务器一样,取消SECURE_NFS="yes"的注释,然后启动必须的服务
#service rpcgssd restart
#service rpcidmapd restart
开始进行挂载
#mkdir -p /home/nfs
#mount -t nfs4 -o rw,sec=krb5p nfs.example.com:/home/nfs /home/nfs
这时是无法访问/home/nfs/nfsuser的,因为权限不够,所以需要认证获得票据
#su - guest guest是本地一般用户
$su - nfsuser
输入密码后即可正常访问nfsuser的家目录
阅读(7868) | 评论(0) | 转发(0) |