任何程序错误,以及技术疑问或需要解答的,请扫码添加作者VX::1755337994
RHCE 考试其中有一道题是需要配置kerberos 认证的nfs 文件共享,设置nfs共享比较简单,但是keberos服务器的设置虽然不在考点之内,确是需要完成这个实验搭建的重要一环,其实通过几天的资料查找和试验,我发现kerberos的搭建过程并不是很复杂,但是也遇到了一些让人抓耳挠腮的bug, 所以这里将整个过程跟大家分享一下,本文使用的OS版本为 RHEL 7.0, 有问题的地方也请批评指正。
试验的环境共有三台虚拟机构成,其名称和IP 配置如下: - Kerberos 服务器: hostname : remote.exmaple.com IP: 192.168.57.2 - NFS 服务器: hostname :server.exmaple.com IP: 192.168.57.3 - 客户端: hostname : client.exmaple.com IP: 192.168.57.204
1.安装软件
yum -y install krb5-server krb5-workstation
2.编辑 /etc/krb5.conf 文件, 取消注释所有行,并替换kdc, admin server的设置,这里用default realm EXAMPLE.COM , 最后配置文件如下:
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = falsei
default_realm = EXAMPLE.COM
default_ccache_name = KEYRING:persistent:%{uid}
[realms]
EXAMPLE.COM = {
kdc = remote.example.com
admin_server = remote.example.com
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
3. 修改 /etc/hosts 文件
192.168.57.3 server.example.com remote
192.168.57.2 remote.example.com server
192.168.57.204 client.example.com client
4.修改 /var/kerberos/krb5kdc/kdc.conf 文件 由于我们使用default realm 所以无需修改此文件,若用另外的realm,需替换此文件中的EXAMPLE.COM
5. 运行命令以下命令创建数据库,并按照提示设置数据库密码
[root@remote ~]# kdb5_util create -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'EXAMPLE.COM',
master key name 'K/M@EXAMPLE.COM'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:
6. 启动kerberos
systemctl start kerberos kadmin
systemctl enable kerberos kadmin
7. 允许防火墙
firewall-cmd --permanent --add-service=kerberos
firewall-cmd --reload
8. 运行kadmin.local 来管理kdc 并添加nfs server 和 client的 主机信息
[root@remote ~]# kadmin.local
Authenticating as principal root/admin@EXAMPLE.COM with password.
kadmin.local: addprinc -randkey host/server.example.com
WARNING: no policy specified for host/server.example.com@EXAMPLE.COM; defaulting to no policy
Principal "host/server.example.com@EXAMPLE.COM" created.
kadmin.local: addprinc -randkey host/client.example.com
WARNING: no policy specified for host/client.example.com@EXAMPLE.COM; defaulting to no policy
Principal "host/client.example.com@EXAMPLE.COM" created.
9. 添加nfs server 和 client的 nfs 服务主机和客户端
kadmin.local: addprinc -randkey nfs/server.example.com
WARNING: no policy specified for nfs/server.example.com@EXAMPLE.COM; defaulting to no policy
Principal "nfs/server.example.com@EXAMPLE.COM" created.
kadmin.local: addprinc -randkey nfs/client.example.com
WARNING: no policy specified for nfs/client.example.com@EXAMPLE.COM; defaulting to no policy
Principal "nfs/client.example.com@EXAMPLE.COM" created.
10. 运行 listprincs 来检查kdc设置
kadmin.local: listprincs
K/M@EXAMPLE.COM
host/client.example.com@EXAMPLE.COM
host/server.example.com@EXAMPLE.COM
kadmin/admin@EXAMPLE.COM
kadmin/changepw@EXAMPLE.COM
kadmin/server.example.com@EXAMPLE.COM
krbtgt/EXAMPLE.COM@EXAMPLE.COM
nfs/client.example.com@EXAMPLE.COM
nfs/server.example.com@EXAMPLE.COM
[root@remote ~]#
11. 为服务器和客户端生成各自的秘钥文件,并保存在/tmp文件夹下, quit退出 kadmin
kadmin.local: ktadd -k /tmp/server.keytab nfs/server.example.com
[以下省略输出]
kadmin.local: ktadd -k /tmp/client.keytab nfs/client.example.com
[以下省略输出]
kadmin.local: quit
12. 配置时间服务器 为了保证kerberos 认证能够进行,需要在三台设备统一时间, 现在设置kdc 为ntp server, 另外两台同步kdc的时间。 - 安装npt服务
yum -y install ntp
21 行到26行,设置服务器为自己: #server 0.rhel.pool.ntp.org iburst #server 1.rhel.pool.ntp.org iburst #server 2.rhel.pool.ntp.org iburst #server 3.rhel.pool.ntp.org iburst server 127.127.1.0 fudge 127.127.1.0 stratum 11
1. 安装软件
yum -y install nfs-utils krb5-workstation pam_krb5
2.编辑/etc/hosts文件,添加三台设备的dns信息
192.168.57.3 server.example.com remote
192.168.57.2 remote.example.com server
192.168.57.204 client.example.com client
3. 从kdc服务器拷贝配置文件和keytab秘钥文件并保存在/etc目录下
scp remote:/etc/krb5.conf /etc/krb5.conf
scp remote:/tmp/server.keytab /etc/krb5.keytab
4.设立共享目录 /nfs1
mkdir /nfs1
5. 编辑/etc/exports 文件如下
/nfs1 *.example.com(ro,sec=krb5p)
6. 修改 /etc/sysconfig/nfs, 第13行的位置以下条目添加 -V 4.2
RPCNFSDARGS="-V 4.2"
7. 开启nfs,nfs-secure并设为开机启动
systemctl restart nfs nfs-secure
systemctl enable nfs nfs-secure
8. 设置防火墙
firewall-cmd --permanent --add-service=kerberos
firewall-cmd --reload
9. 设置时间同步
1. 安装软件
yum -y install nfs-utils krb5-workstation pam_krb5
2.编辑/etc/hosts文件,添加三台设备的dns信息
192.168.57.3 server.example.com remote
192.168.57.2 remote.example.com server
192.168.57.204 client.example.com client
3. 从kdc服务器拷贝配置文件和keytab秘钥文件并保存在/etc目录下
scp remote:/etc/krb5.conf /etc/krb5.conf
scp remote:/tmp/client.keytab /etc/krb5.keytab
4. 创建挂载点/mnt/nfs1
mkdir /mnt/nfs1
5.编辑/etc/fstab 文件实现自动挂载
remote:/nfs1 /mnt/nfs1 nfs defaults,v4.2,sec=krb5p 0 0
6.启动 nfs-secure ,这里注意nfs-server这个服务不要启动,否则可能挂载不了
systemctl restart nfs-secure
7. 设置时间同步 步骤同 NFS 服务器端设置 step 9 8. 挂载
mount -a
1.注意事项
2.常见问题
nfs client 报错: No such file or directory:
mount.nfs: mounting remote:/nfs1 failed, reason given by server: No such file or directory
Debug方法
重新mount 客户端,如果问题解决,可能是域名解析错误或此处填写错误。
nfs client 报错: access denied:
mount.nfs: access denied by server while mounting remote:/nfs1
Debug方法
Aug 24 07:54:32 remote rpc.svcgssd[5833]: ERROR: GSS-API: error in handle_nullreq:
gss_accept_sec_context(): GSS_S_FAILURE (Unspecified GSS failure.
Minor code may provide more information) - Ticket not yet valid
或者
Aug 24 12:43:37 remote rpc.svcgssd[5833]: ERROR: GSS-API: error in handle_nullreq:
gss_accept_sec_context(): GSS_S_FAILURE (Unspecified GSS failure.
Minor code may provide more information) - Key table file '/etc/krb5.keytab' not found
是由于NFS Server端的keytab文件有问题,请根据前文介绍重新拷贝keytab文件
nfs client 报错: access denied 且nfs server端无报错:
mount.nfs: access denied by server while mounting remote:/nfs1
Debug方法
若出现 server unknown 或者 client unknown 等信息,请
1) 确认kdc端数据库内有所需的principle (host 和nfs)
2) 确认 三台虚拟机的hosts 文件配置正确
nfs client 报错: access denied 且nfs server端无报错并且kdc日志显示正常:
mount.nfs: access denied by server while mounting remote:/nfs1
这个Bug也是困扰了我三天的bug,确实很难Debug,尝试了各种方法仍找不到原因,因为原因出现在一个很容易被忽略的细节.
Debug方法
输出应该有以下一行: root 5833 0.0 0.4 46752 4676 ? Ss Aug24 0:00 /usr/sbin/rpc.svcgssd
如果没有执行以下命令开启:
/usr/sbin/rpc.svcgssd
nfs客户端重新 mount, 这下应该可以从nfs server看到久违的报错信息了。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。