NFS 服务器的安装与设置!NFS 服务器可以提供文件系统的网络分享喔!
例题: 请问我的主机是以 RPM 为套件管理的 Linux distribution ,例如 Red Hat, CentOS 与 SuSE 等版本,那么我要如何知道我的主机里面是否已经安装了 portmap 与 nfs 相关的套件呢? 答:
|
[root@linux ~]# vi /etc/exports /tmp 192.168.1.0/24(ro) localhost(rw) *.ev.ncku.edu.tw(ro,sync) # [分享目录] [第一部主机(权限)] [可用主机名] [可用通配符] |
[root@linux ~]# vi /etc/exports # 任何人都可以用我的 /tmp ,用通配符来处理主机名称,重点在 no_root_squash /tmp *(rw,no_root_squash) |
[root@linux ~]# vi /etc/exports /tmp *(rw,no_root_squash) /home/public 192.168.0.0/24(rw) *(ro) # 继续累加在后面,注意,我有将主机与网域分为两段 (用空白隔开) 喔! |
[root@linux ~]# vi /etc/exports /tmp *(rw,no_root_squash) /home/public 192.168.0.0/24(rw) *(ro) /home/test 192.168.0.100(rw) # 只要设置 IP 正确即可! |
[root@linux ~]# vi /etc/exports /tmp *(rw,no_root_squash) /home/public 192.168.0.0/24(rw) *(ro) /home/test 192.168.0.100(rw) /home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40) # 如果要开放匿名,那么重点是 all_squash,并且要配合 anonuid 喔! |
[root@linux ~]# /etc/init.d/portmap start # 如果 portmap 本来就已经在运行了,那就不需要启动啊! [root@linux ~]# /etc/init.d/nfs start # 有时候可能会出现如下的警告消息: exportfs: /etc/exports [3]: No 'sync' or 'async' option specified for export "192.168.0.100:/home/test". Assuming default behaviour ('sync'). # 上面的警告消息仅是在告知因为我们没有指定 sync 或 async 的参数, # 则 NFS 将缺省会使用 sync 的信息而已。妳可以不理他,也可以加入 /etc/exports。 [root@linux ~]# vi /etc/exports /tmp *(rw,no_root_squash,sync) /home/public 192.168.0.0/24(rw,sync) *(ro,sync) /home/test 192.168.0.100(rw,sync) /home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40,sync) [root@linux ~]# /etc/init.d/nfs restart |
[root@linux ~]# /etc/init.d/nfslock start
|
[root@linux ~]# vi /var/log/messages
Sep 22 00:01:37 linux nfs: Starting NFS services: succeeded
Sep 22 00:01:37 linux nfs: rpc.rquotad startup succeeded
Sep 22 00:01:37 linux nfsd[1050]: nfssvc_versbits: +2 +3 +4
Sep 22 00:01:37 linux nfs: rpc.nfsd startup succeeded
Sep 22 00:01:37 linux nfs: rpc.mountd startup succeeded
Sep 22 00:01:37 linux rpcidmapd: rpc.idmapd -SIGHUP succeeded
|
[root@linux ~]# netstat -ultn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:803 0.0.0.0:* LISTEN 1047/rpc.rquotad
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 32503/portmap
tcp 0 0 0.0.0.0:819 0.0.0.0:* LISTEN 1064/rpc.mountd
udp 0 0 0.0.0.0:2049 0.0.0.0:* -
udp 0 0 0.0.0.0:800 0.0.0.0:* 1047/rpc.rquotad
udp 0 0 0.0.0.0:816 0.0.0.0:* 1064/rpc.mountd
udp 0 0 0.0.0.0:111 0.0.0.0:* 32503/portmap
|
[root@linux ~]# rpcinfo [-p] [IP|hostname] 参数: -p :显示出所有的 port 与 porgram 的信息; 范例一:显示出目前这部主机的 RPC 状态 [root@linux ~]# rpcinfo -p localhost program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100011 1 udp 800 rquotad 100011 2 udp 800 rquotad 100011 1 tcp 803 rquotad 100011 2 tcp 803 rquotad 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100005 1 udp 816 mountd 100005 1 tcp 819 mountd 100005 2 udp 816 mountd 100005 2 tcp 819 mountd 100005 3 udp 816 mountd 100005 3 tcp 819 mountd # NFS版本 端口口 服务名称 |
[root@linux ~]# showmount [-ae] [hostname|IP] 参数: -a :显示目前主机与用户端的 NFS 连接分享的状态; -e :显示某部主机的 /etc/exports 所分享的目录数据。 范例一:请显示出刚刚我们所设置好的相关 exports 信息 [root@linux ~]# showmount -e localhost Export list for localhost: /tmp * /home/linux *.linux.org /home/public (everyone) /home/test 192.168.0.100 |
[root@linux ~]# tail /var/lib/nfs/etab /home/public *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash, subtree_check,secure_locks,mapping=identity,anonuid=-2,anongid=-2) # 上面是同一行,可以看出除了 ro, sync, root_squash 等等, # 其实还有 anonuid 及 anongid 等等的设置! /tmp *(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,subtr ee_check,secure_locks,mapping=identity,anonuid=-2,anongid=-2) # 同样的,在 /tmp 也有很多的权限相关的参数喔! |
[root@linux ~]# exportfs [-aruv] 参数: -a :全部挂载(或卸载) /etc/exports 文件内的设置 -r :重新挂载 /etc/exports 里面的设置,此外,亦同步更新 /etc/exports 及 /var/lib/nfs/xtab 的内容! -u :卸载某一目录 -v :在 export 的时候,将分享的目录显示到屏幕上! 范例一:重新挂载一次 /etc/exports 的设置 [root@linux ~]# exportfs -arv exporting 192.168.0.100:/home/test exporting 192.168.0.0/24:/home/public exporting *.linux.org:/home/linux exporting *:/home/public exporting *:/tmp 范例二:全部都卸载 [root@linux ~]# exportfs -auv |
[root@linux ~]# vi /usr/local/virus/iptables/iptables.allow iptables -A INPUT -i $EXTIF -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT iptables -A INPUT -i $EXTIF -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT iptables -A INPUT -i $EXTIF -p TCP -s 140.116.0.0/16 --dport 111 -j ACCEPT iptables -A INPUT -i $EXTIF -p UDP -s 140.116.0.0/16 --dport 111 -j ACCEPT |
[root@linux ~]# vi /etc/hosts.allow # 让来自 140.116.44.0/255.255.255.0 的主机可以使用 mountd mountd: 140.116.44.0/255.255.255.0 [root@linux ~]# vi /etc/hosts.deny # 让所有人都不能使用 mountd mountd: ALL |
[root@linux ~]# /etc/init.d/portmap start [root@linux ~]# /etc/init.d/nfslock start # 一般来说,系统缺省会启动 portmap ,不过鸟哥之前关闭过,所以要启动。 # 另外,如果服务器端有启动 nfslock 的话,用户端也要启动才能生效! [root@linux ~]# showmount -e 192.168.0.2 Export list for 192.168.0.2: /tmp * /home/linux *.linux.org /home/public (everyone) <==这是等一下我们要挂载的目录 /home/test 192.168.0.100 |
[root@linux ~]# mkdir -p /home/nfs/public [root@linux ~]# mount -t nfs 192.168.0.2:/home/public /home/nfs/public # 注意一下挂载的语法!『 -t nfs 』指定文件系统类型, # IP:/dir 则是指定某一部主机的某个提供的目录! [root@linux ~]# df Filesystem 1K-blocks Used Available Use% Mounted on ....中间省略.... 192.168.0.2:/home/public 10080512 2135072 7433344 23% /home/nfs/public |
[root@linux ~]# umount /home/nfs/public
|
参数 | 参数代表意义 | 系统默认值 |
suid nosuid | 晓得啥是 SUID 吧?如果挂载的 partition 上面有任何 SUID 的 binary 程序时, 你只要使用 nosuid 就能够取消 SUID 的功能了!嗄?不知道什么是 SUID ?那就不要学人家架站嘛!@_@! 赶紧回去基础学习篇复习一下进程与资源管理啦! | suid |
rw ro | 你可以指定该 partition 是唯读 (ro) 或可读写喔! | rw |
dev nodev | 是否可以保留设备文件的特殊功能?一般来说只有 /dev 才会有特殊的设备,因此你可以选择 nodev 喔! | dev |
exec noexec | 是否具有运行 binary file 的权限? 如果你想要挂载的仅是数据区 (例如 /home),那么可以选择 noexec 啊! | exec |
user nouser | 是否允许用户进行文件的挂载与卸载功能? 如果要保护文件系统,最好不要提供用户进行挂载与卸载吧! | nouser |
auto noauto | 这个 auto 指的是『mount -a』时,会不会被挂载的项目。 如果你不需要这个 partition 随时被挂载,可以设置为 noauto。 | auto |
[root@linux ~]# mount -t nfs -o nosuid,noexec,nodev,rw \ > 192.168.0.2:/home/public /home/nfs/public [root@linux ~]# mount 192.168.0.2:/home/public on /home/nfs/public type nfs (rw,noexec,nosuid,nodev,addr=192.168.0.2) |
参数 | 参数功能 | 缺省参数 |
fg bg | 当运行挂载时,该挂载的行为会在前景 (fg) 还是在背景 (bg) 运行? 若在前景运行时,则 mount 会持续尝试挂载,直到成功或 time out 为止,若为背景运行, 则 mount 会在背景持续多次进行 mount ,而不会影响到前景的进程操作。 如果你的网络连接有点不稳定,或是服务器常常需要开关机,那建议使用 bg 比较妥当。 | fg |
soft hard | 上头不是谈到挂载时会使用 RPC 调用吗? 如果是 hard 的情况,则当两者之间有任何一部主机脱机,则 RPC 会持续的调用,直到对方恢复连接为止。 如果是 soft 的话,那 RPC 会在 time out 后『重复』调用,而非『持续』调用, 因此系统的延迟会比较不这么明显。同上,如果你的服务器可能开开关关,建议用 soft 喔! | hard |
intr | 当你使用上头提到的 hard 方式挂载时,若加上 intr 这个参数, 则当 RPC 持续调用中,该次的调用是可以被中断的 (interrupted)。 | 没有 |
rsize wsize | 读出(rsize)与写入(wsize)的区块大小 (block size)。 这个设置值可以影响用户端与服务器端传输数据的缓冲记忆容量。一般来说, 如果在局域网路内 (LAN) ,并且用户端与服务器端都具有足够的内存,那这个值可以设置大一点, 比如说 32768 (bytes) 等,提升缓冲记忆区块将可提升 NFS 文件系统的传输能力! 但要注意设置的值也不要太大,最好是达到网络能够传输的最大值为限。 | rsize=1024 wsize=1024 |
[root@linux ~]# mount -t nfs -o nosuid,noexec,nodev,rw \ > bg,soft,rsize=32768,wsize=32768 \ > 192.168.0.2:/home/public /home/nfs/public |
[root@linux ~]# vi /etc/fstab 192.168.0.2:/home/public /home/nfs/public nfs nosuid,noexec,nodev,rw, bg,soft,rsize=32768,wsize=32768 0 0 # 注意!上面的设置是同一行喔!不要搞错啰! ^_^ |
[root@linux ~]# mount -t nfs localhost:/home/test /home/nfs
mount: localhost:/home/test failed, reason given by server: Permission denied
|
[root@linux ~]# mount -t nfs localhost:/home/test /home/nfs mount: RPC: Port mapper failure - RPC: Unable to receive [root@linux ~]# mount -t nfs localhost:/home/test /home/nfs mount: RPC: Program not registered |
[root@linux ~]# vi /etc/auto.master /home/nfs /etc/auto.nfs [root@linux ~]# mkdir /home/nfs # 注意!此时 /home/nfs 内并没有其他的目录存在喔! |
[本地端目录] [-挂载参数] [服务器所提供的目录] 参数: [本地端目录] :指的就是在 /etc/auto.master 内指定的目录之次目录 [-挂载参数] :就是前一小节提到的 rw,bg,soft 等等的参数啦!可有可无; [服务器所提供的目录] :例如 192.168.0.2:/home/public 等 [root@linux ~]# vi /etc/auto.nfs public -rw,bg,soft,rsize=32768,wsize=32768 192.168.0.2:/home/public testing -rw,bg,soft,rsize=32768,wsize=32768 192.168.0.2:/home/test temp -rw,bg,soft,rsize=32768,wsize=32768 192.168.0.2:/tmp # 参数部分,只要最前面加个 - 符号即可! |
[root@linux ~]# /etc/init.d/autofs start
|
[root@linux ~]# mount; df # 妳不会看到任何跟 192.168.0.2 这部主机有关的 NFS 挂载信息喔! [root@linux ~]# cd /home/nfs/public [root@linux public]# mount; df 192.168.0.2:/home/public on /home/nfs/public type nfs (rw,bg,soft, rsize=32768,wsize=32768,addr=140.116.44.179) # 上面的输出是同一行!瞧!突然出现这个玩意儿! Filesystem 1K-blocks Used Available Use% Mounted on 192.168.0.2:/home/public 10080488 2144288 7424136 23% /home/nfs/public # 文件的挂载也出现没错! [root@linux public]# pwd /home/nfs/public # 这个目录突然被生出来了! ^_^ |
[root@linux ~]# vi /etc/exports
/tmp 192.168.0.0/24(rw,no_root_squash)
/home/nfs 192.168.0.0/24(ro) *(ro,all_squash)
/home/upload 192.168.0.0/24(rw,all_squash,anonuid=210,anongid=210)
/home/andy 192.168.0.50(rw)
|
1. /tmp [root@linux ~]# ll -d /tmp drwxrwxrwt 5 root root 20480 Sep 22 22:52 /tmp 2. /home/nfs [root@linux ~]# mkdir -p /home/nfs [root@linux ~]# chmod 755 -R /home/nfs # 修改较为严格的文件权限将目录与文件设置成唯读!不能写入的状态,会更保险一点! 3. /home/upload [root@linux ~]# groupadd -g 210 nfs-upload [root@linux ~]# useradd -g 210 -u 210 -M nfs-upload # 先创建对应的帐号与群组名称及 UID 喔! [root@linux ~]# mkdir -p /home/upload [root@linux ~]# chown -R nfs-upload:nfs-upload /home/upload # 修改拥有者!如此,则用户与目录的权限都设置妥当啰! 4. /home/andy [root@linux ~]# ll -d /home/andy drwx------ 3 andy andy 4096 Oct 28 13:37 andy |
[root@linux ~]# /etc/init.d/portmap start [root@linux ~]# /etc/init.d/nfs start [root@linux ~]# /etc/init.d/nfslock start |
1. 确认远程服务器的可用目录: [root@linux ~]# /etc/init.d/portmap start [root@linux ~]# /etc/init.d/nfslock start [root@linux ~]# showmount -e 192.168.0.100 Export list for 192.168.0.100: /tmp 192.168.0.* /home/nfs (everyone) /home/upload 192.168.0.* /home/andy 192.168.0.50 2. 创建挂载点: [root@linux ~]# mkdir -p /home/zzz/tmp [root@linux ~]# mkdir -p /home/zzz/nfs [root@linux ~]# mkdir -p /home/zzz/upload [root@linux ~]# mkdir -p /home/zzz/andy 3. 实际挂载: [root@linux ~]# mount -t nfs 192.168.0.100:/tmp /home/zzz/tmp [root@linux ~]# mount -t nfs 192.168.0.100:/home/nfs /home/zzz/nfs [root@linux ~]# mount -t nfs 192.168.0.100:/home/upload /home/zzz/upload [root@linux ~]# mount -t nfs 192.168.0.100:/home/andy /home/zzz/andy |