linux mount的安裝配置


1、首先需要安裝nfs-utils 和 portmap:

yum install nfs-utils portmap  (安裝軟件,也可直接安裝 yum install nfs* portmap)
chkconfig rpcbind on (設置開機啟動portmap)
chkconfig nfs on  (設置開機啟動nfs)
service rpcbind restart (啟動portmap服務)
service NFS restart (啟動nfs服務)

2、服務器端配置文件/etc/exports:指定要共享的目錄及權限

#:允許ip地址范圍在192.168.0.*的計算機以讀寫的權限來訪問/home/work 目錄。
/home/work 192.168.0.*(rw,sync,root_squash)
/home  192.168.1.105 (rw,sync)
/public  * (rw,sync)
配置文件每行分為兩段:第一段為共享的目錄,使用絕對路徑,第二段為客戶端地址及權限。
地址可以使用完整IP或網段,例如10.0.0.8或10.0.0.0/24,10.0.0.0/255.255.255.0當然也可以地址可以使用主機名,DNS解析的和本地/etc/hosts解析的都行,支持通配符,
例如:*.chengyongxu.com 權限有: rw:read-write,可讀寫; 注意,僅僅這里設置成讀寫客戶端還是不能正常寫入,還要正確地設置共享目錄的權限,參考問題7 ro:read-only,只讀; sync:文件同時寫入硬盤和內存; async:文件暫存於內存,而不是直接寫入內存; no_root_squash:NFS客戶端連接服務端時如果使用的是root的話,那么對服務端分享的目錄來說,也擁有root權限。顯然開啟這項是不安全的。 root_squash:NFS客戶端連接服務端時如果使用的是root的話,那么對服務端分享的目錄來說,擁有匿名用戶權限,通常他將使用nobody或nfsnobody身份; all_squash:不論NFS客戶端連接服務端時使用什么用戶,對服務端分享的目錄來說都是擁有匿名用戶權限; anonuid:匿名用戶的UID值,通常是nobody或nfsnobody,可以在此處自行設定; anongid:匿名用戶的GID值。

NFS客戶端用戶映射:客戶端登陸用戶為root或者其他用戶,然后根據服務器端nfs server配置,相應客戶端連接映射到nfs服務器端的用戶為root或者指定用戶(通過anonuid或者anongid來設定)、nfsnobody等。最后這個映射用戶和共享目錄的權限共同影響該客戶端連接是否有讀寫權限。 
手動設定客戶端、服務器端用戶映射,參數:map_static=/etc/nfs.map 
/etc/nfs.map文件映射內容如下: 
# remote local 
gid 500 1000 
uid 500 2003 

客戶端連接時候,對普通用戶的檢查

NO.1如果明確設定了普通用戶被壓縮的身份,那么此時客戶端用戶的身份轉換為指定用戶。

NO.2如果NFS server上面有同名用戶,那么此時客戶端登錄賬戶的身份轉換為NFS server上面的同名用戶。

NO.3如果沒有明確指定,也沒有同名用戶,那么此時 用戶身份被壓縮成nfsnobody。
客戶端連接的時候,對root的檢查

NO.1如果設置no_root_squash,那么此時root用戶的身份被壓縮為NFS server上面的root。

NO.2如果設置了all_squash、anonuid、anongid,此時root 身份被壓縮為指定用戶。

NO.3如果沒有明確指定,此時root用戶被壓縮為nfsnobody。

NO.4如果同時指定no_root_squash與all_squash 用戶將被壓縮為 nfsnobody,如果設置了anonuid、anongid將被壓縮到所指定的用戶與組

3、防火牆設置修改
默認情況下,CentOS6服務器版安裝完成后,防火牆iptables配置中只放開了22端口。 
在nfs配置文件/etc/sysconfig/nfs中指定nfs服務相關端口,並修改防火牆放開相應端口

#Port rpc.mountd should listen on.  
#MOUNTD_PORT=892  
  
#Port rpc.statd should listen on.  
#STATD_PORT=662  
  
#/usr/sbin/rpc.rquotad Port rquotad should listen on.  
#RQUOTAD_PORT=875  
  
#TCP port rpc.lockd should listen on.  
#LOCKD_TCPPORT=32803  
  
#UDP port rpc.lockd should listen on.  
#LOCKD_UDPPORT=32769   
#(此過程可以省略)

 

修改iptables配置文件/etc/sysconfig/iptables,放開111(portmap服務端口),2049(nfs服務端口)

4,/etc/hosts.allow配置修改  (默認這里好像可以不需要修改,不過最好設置成只允許需要的客戶端機器連接,然后其他機器的連接都deny )
/etc/hosts.allow,/etc/hosts.deny 描述哪些主機允許使用本地的INET服務。 

#服務進程名:主機列表:當規則匹配時可選的命令操作 
server_name:hosts-list[:command] 
在/etc/hosts.allow中添加允許客戶端訪問的規則 
ALL:127.0.0.1         #允許本機訪問本機所有服務進程 
ALL:192.168.0.135     #允許192.168.0.135客戶端機器訪問本機所有服務進程 
smbd:192.168.0.0/255.255.255.0    #允許網段的IP訪問smbd服務 
sshd:192.168.100.0/255.255.255.0        #允許192.168.100.網段的IP訪問服務器上的sshd進程 
sshd:60.28.160.244                                  #允許外網的60.28.160.244訪問這個服務器上的sshd進程 
在/etc/hosts.deny中 被禁制登陸的嘗試連接信息也可以設置成記錄下來並發到用戶郵箱 
sshd:ALL    #禁止所有

5,修改共享出去的目錄權限為760,並修改目錄所有組為nfsnobody 
參考:問題7

6,客戶端掛載:執行下面的指令就可以把NFS服務器(IP地址為192.168.1.45)共享出來的/home掛裝到本地的/mnt/nfs/home目錄下。 
showmount -e nfs-serverip: 查看nfs服務器共享出來的資源 
mount -t nfs 192.168.1.45:/home /mnt/nfs/home

7,NFS性能測試 (可忽略):

•根據命令time dd if=/dev/zero of=/mnt/home bs=16k count=16384 來設置合理的WSIZE,RSIZE值 
•根據nfs客戶端數,在/etc/sysconfig/nfs配置文件中設置合適的nfs服務器端進程數RPCNFSDCOUNT,默認為8

exportfs命令:如果我們在啟動了NFS之后又修改了/etc/exports,是不是還要重新啟動nfs呢?這個時候我們就可以用exportfs命令來使改動立刻生效,該命令格式如下: 
exportfs [-aruv] -a :全部mount或者unmount /etc/exports中的內容 -r :重新mount /etc/exports中分享出來的目錄 -u :umount 目錄 -v :在 export 的時候,將詳細的信息輸出到屏幕上。 
showmount命令:顯示NFS服務器的掛載信息。 
showmount -e [nfs-server]:顯示指定的NFS SERVER上export出來的目錄,不指定后面IP時查看的是本機作為NFS Server時,對外共享的目錄。。 
rpcinfo -p命令:顯示RPC信息  -p參數:用rpc協議來探測主機host上使用的rpcbind,並顯示所有已注冊的RPC程序。 
nfsstat命令:查看NFS的運行狀態,對於調整NFS的運行有很大幫助

過程中出現的問題解決:

1, 通過yum或者rpm安裝完portmap后,發現執行命令service portmap start時報如下錯誤:portmap: unrecognized service。 
CentOS6(Linux Kernel 2.6.32)中,portmap已經被rpcbind代替了,仔細查看安裝信息就會發現,執行命令yum install portmap時安裝的就是rpcbind。安裝完成后也可以通過命令:yum whatprovides portmap來查看詳細信息。

2, 客戶端掛載時,報錯誤mount clntudp_create: RPC: Port mapper failure - RPC: Unable to receive。

•1,通過命令rpcinfo -p來查看portmap服務時候正常啟動以及相應的端口(默認111) 
•2,檢查/etc/sysconfig/iptables防火牆設置,允許tcp,udp的111端口訪問,然后service iptables restart 
•3,檢查/etc/hosts.deny,/etc/hosts.allow看客戶端連接是否被阻止了

3, 客戶端執行命令showmount -e nfs-server時,報錯誤:mount clntudp_create: RPC: Program not registered。 
nfs、rpcbind服務沒有啟動,使用chkconfig把nfs、rpcbind加到系統服務中並用service來啟動 
或者在/etc/hosts.allow中添加允許客戶端訪問的規則 ALL:192.168.0.135

4, 客戶端執行命令showmount -e nfs-server時,報錯誤:rpc mount export: RPC: Unable to receive; errno = No route to host 
配置文件:/etc/sysconfig/nfs 
找到nfs服務相關端口設置的地方,並移除注釋后,在iptables防火牆設置中指定允許相應端口的Udp,tcp流通過。 

#MOUNTD_PORT=892 
#STATD_PORT=662 
#LOCKD_TCPPORT=32803 
#LOCKD_UDPPORT=32769 
iptables -A INPUT -p TCP --dport 662 -m state --state NEW -j ACCEPT 
iptables -A INPUT -p UDP --dport 661 -m state --state NEW -j ACCEPT

5, showmount -e nfs-server成功,正式掛載時報錯:mount: mount to NFS server '192.168.1.5' failed: System Error: No route to host.這是由於nfs服務的默認端口2049被防火牆阻塞了,和上面類似修改iptables允許2049端口通過

6, showmount -e nfs-server成功,正式掛載時報錯:mount: mount to NFS server '192.168.1.5' failed: timed out (retrying). 
編輯/etc/sysconfig/iptables時,相關端口的tcp端口允許通過,而udp不允許。
Disable name lookup requests from NFS server to a DNS server.  
or  NFS version used by the NFS client is other than version 3.

7,exports配置文件中目錄權限屬性設置為rw(默認為root_squash),但是在客戶端mount目錄執行touch命令時報錯誤:touch: cannot touch `a': Permission denied。解決:

•服務器端共享目錄權限查看ll -d /home 
•修改服務器端共享目錄權限chown 760 /home(文件所有者root有全權限、文件所有組用戶有讀寫權限、其他用戶無權限,然后把目錄的組設置為nfsnobody) 
•修改服務器端共享目錄權限組擁有者為nfsnobody(cat /etc/passwd | grep nob) 
•chgrp nfsnobody /home 

8,經常遇到的在客戶端執行 mount -t nfs IP:/文件夾  /文件夾   時,報錯:mount nfs : connected timeout .則查看服務端的環境是否正確

查看服務氣的SELinux狀態: 1、/usr/sbin/sestatus -v ##如果SELinux status參數為enabled即為開啟狀態 SELinux status: enabled 2、getenforce ##也可以用這個命令檢查 關閉SELinux: 1、臨時關閉(不用重啟機器): setenforce 0 ##設置SELinux 成為permissive模式 ##setenforce 1 設置SELinux 成為enforcing模式 2、修改配置文件需要重啟機器: 修改/etc/selinux/config 文件 將SELINUX=enforcing改為SELINUX=disabled 重啟機器即可

•成功在客戶端創建新的文件!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM