配置NFS共享(Linux與Linux之間)
Network Flie System 網絡檔案系統
協定:NFS(TCP/UDP 2049),RPC(TCP/UDP 111)
所需軟體包:nfs-utils (預設會裝)
系統服務:nfs-server
搭建基本隻讀NFS服務
1.檢測是否裝包
[root@server0 ~]# rpm -q nfs-utils
nfs-utils-1.3.0-0.el7.x86_64
2.修改配置檔案 /etc/exports
[root@server0 ~]# vim /etc/exports
...
/public 172.25.0.0/24(ro)
[root@server0 ~]# mkdir /public
[root@server0 ~]# echo public test > /public/nsd.txt
3.重新開機nfs-server服務,設定開機自啟
[root@server0 ~]# systemctl restart nfs-server
[root@server0 ~]# systemctl enable nfs-server.service
4.用戶端 通路nfs-server服務
[root@desktop0 ~]# showmount -e 172.25.0.11
Export list for 172.25.0.11:
/public 172.25.0.0/24
[root@desktop0 ~]# mkdir /mnt/nfs
[root@desktop0 ~]# vim /etc/fstab
172.25.0.11:/public /mnt/nfs nfs _netdev 0 0
[root@desktop0 ~]# mount -a
[root@desktop0 ~]# df -h
檔案系統 容量 已用 可用 已用% 挂載點
/dev/vda1 10G 3.1G 7.0G 31% /
devtmpfs 906M 0 906M 0% /dev
tmpfs 921M 80K 921M 1% /dev/shm
tmpfs 921M 17M 904M 2% /run
tmpfs 921M 0 921M 0% /sys/fs/cgroup
172.25.0.11:/public 10G 3.1G 7.0G 31% /mnt/nfs
[root@desktop0 ~]# ls /mnt/nfs/
nsd.txt
搭建root使用者的讀寫NFS
[root@server0 ~]# mkdir /abc
[root@server0 ~]# echo 123 > /abc/a.txt
...
/abc 172.25.0.0/24(rw)
[root@server0 ~]# systemctl restart nfs-server.service
172.25.0.11:/abc /mnt/test nfs _netdev 0 0
檔案系統 容量 已用 可用 已用% 挂載點
/dev/vda1 10G 3.1G 7.0G 31% /
devtmpfs 906M 0 906M 0% /dev
tmpfs 921M 80K 921M 1% /dev/shm
tmpfs 921M 17M 904M 2% /run
tmpfs 921M 0 921M 0% /sys/fs/cgroup
//172.25.0.11/common 10G 3.1G 7.0G 31% /mnt/samba
//172.25.0.11/devops 10G 3.1G 7.0G 31% /mnt/dev
172.25.0.11:/abc 10G 3.1G 7.0G 31% /mnt/test
[root@desktop0 test]# touch 123.txt
touch: 無法建立"123.txt": 權限不夠
第一種
/abc 172.25.0.0/24(rw,no_root_squash) #no_root_squash 不壓榨用戶端root的權限
[root@server0 ~]# systemctl restart nfs
[root@desktop0 test]# systemctl restart nfs#重新開機用戶端服務
[root@desktop0 test]# ls /mnt/test/
123.txt a.txt
第二種 提權方法
[root@server0 ~]# setfacl -m u:nfsnobody:rwx /abc
[root@server0 ~]# getfacl /abc
getfacl: Removing leading '/' from absolute path names
# file: abc
# owner: root
# group: root
user::rwx
user:nfsnobody:rwx
group::r-x
mask::rwx
other::r-x
普通使用者
用戶端普通使用者通路伺服器端nfs-server服務,服務端會以用戶端相同UID身份的本地使用者進行權限判定
[root@server0 ~]# useradd -u 1666 test01
[root@server0 ~]# setfacl -m u:test01:rwx /abc
[root@desktop0 ~]# useradd -u 1666 li
[root@desktop0 ~]# su - li
[li@desktop0 ~]$ cd /mnt/test/
[li@desktop0 test]$ touch 10.txt
[li@desktop0 test]$ ls
10.txt 123.txt 1.txt 3.txt a.txt
安全NFS服務
LDAP : 網絡使用者,提供使用者名
kerberos:密碼驗證
1.服務端修改配置檔案,建立讀寫的共享
[root@server0 ~]# mkdir /protected
/protected *(rw,sec=krb5p)
2.服務端和用戶端部署加密密鑰 這裡是使用在網上下載下傳的密鑰
[root@server0 ~]# wget http://172.25.254.254/pub/keytabs/server0.keytab -O /etc/krb5.keytab
[root@desktop0 ~]# wget http://172.25.254.254/pub/keytabs/desktop0.keytab -O /etc/krb5.keytab
3.服務端 nfs-server nfs-secure-server 重新開機
[root@server0 ~]# systemctl restart nfs-server nfs-secure-server
[root@server0 ~]# systemctl enable nfs-server nfs-secure-server
4.保證ldapuser0使用者有寫權限,設定本地權限
[root@server0 ~]# chown ldapuser0 /test #備用
[root@server0 ~]# setfacl -m u:ldapuser0:rwx /protected
5.用戶端通路與挂載
Export list for 172.25.0.11:
/test *
172.25.0.11:/protected /mnt/nfs nfs _netdev,sec=krb5p 0 0
6.重新開機相關服務
[root@desktop0 ~]# systemctl restart nfs nfs-secure
7.驗證挂載
檔案系統 容量 已用 可用 已用% 挂載點
/dev/vda1 10G 3.1G 7.0G 31% /
devtmpfs 906M 0 906M 0% /dev
tmpfs 921M 80K 921M 1% /dev/shm
tmpfs 921M 17M 904M 2% /run
tmpfs 921M 0 921M 0% /sys/fs/cgroup
172.25.0.11:/protected 10G 3.1G 6.9G 31% /mnt/nfs
8.驗證寫入
[root@desktop0 ~]# ssh [email protected]
[email protected]'s password: kerberos
[ldapuser0@desktop0 ~]$ cd /mnt/nfs/
[ldapuser0@desktop0 nfs]$ touch 1.txt
[ldapuser0@desktop0 nfs]$ ls
1.txt
在RHCE7的考試中有兩道題是關于nfs的:
配置NFS共享服務
在 server0 配置 NFS 服務,要求如下:
以隻讀的方式共享目錄 /public,隻能被 example.com 域中的系統通路
以讀寫的方式共享目錄 /protected,隻能被 example.com 域中的系統通路
通路 /protected 需要通過 Kerberos 安全加密,您可以使用下面 URL 提供的密鑰:http://classroom.example.com/pub/keytabs/server0.keytab
目錄 /protected 應該包含名為 project 擁有人為 ldapuser0 的子目錄
使用者 ldapuser0 能以讀寫方式通路 /protected/project
[root@system1 ~]#mkdir -p /public /protected/project
[root@system1 ~]#chown ldapuser0 /protected/project/
[root@system1 ~]#wget -O /etc/krb5.keytab http://classroom/pub/keytabs/server0.keytab
[root@system1 ~]#vim /etc/exports
/public172.25.0.0/24(ro)
/protected172.25.0.0/24(rw,sec=krb5p)
[root@system1 ~]#systemctl start nfs-secure-server nfs-server
[root@system1 ~]#systemctl enable nfs-secure-server nfs-server
挂載NFS共享
在 desktop0 上挂載一個來自 server0.example.com 的共享,并符合下列要求:
/public 挂載在下面的目錄上 /mnt/nfsmount
/protected 挂載在下面的目錄上 /mnt/nfssecure 并使用安全的方式,密鑰下載下傳 URL:http://classroom.example.com/pub/keytabs/desktop0.keytab
使用者 ldapuser0 能夠在/mnt/nfssecure/project 上建立檔案
這些檔案系統在系統啟動時自動挂載
[root@system2 ~]#mkdir -p /mnt/nfsmount /mnt/nfssecure
[root@system2 ~]#wget -O /etc/krb5.keytab http://classroom/pub/keytabs/desktop0.keytab
[root@system2 ~]#systemctl start nfs-secure
[root@system2 ~]#systemctl enable nfs-secure
[root@system2 ~]#showmount -e server0
[root@system2 ~]#vim /etc/fstab
server0.example.com:/public /mnt/nfsmount nfs _netdev 0 0
server0.example.com:/protected /mnt/nfssecure nfs sec=krb5p,_netdev 0 0
[root@system2 ~]#mount -a
[root@system2 ~]#ssh ldapuser0@system2
經常遇見的問題:
# mount -a
.... Permission Denied。
可能的原因:
1)服務端的 /etc/exports配置沒有給權限(比如忘記寫掩碼長度)
2)服務端的 nfs-secure-server 服務沒開啟
3)用戶端的 nfs-secure 服務沒開啟
4)密鑰部署的名稱不對、内容不對
本文轉自 Xuenqlve 51CTO部落格,原文連結:http://blog.51cto.com/13558754/2058748,如需轉載請自行聯系原作者