- 论坛徽章:
- 0
|
以下文章为转载转载
一、NFS服务和RPC1、NFS启动的时候会启用未被使用的小于 1024 的端口作为监听传输使用,,并主动的向 RPC 注册,因此RPC知道NFS对应使用的端口。2、RPC使用固定的port 111端口来监听用户端的需求并且回报给用户端正确的NFS端口。让用户端可以连结到正确的NFS端口上。所以:NFS服务必须启动RPC服务 二、NFS的安装 [color="#0000ff"][root@linux ~]# rpm -qa | grep portmapportmap-4.0-65.2.2.1[root@linux ~]# rpm -qa | grep nfssystem-config-nfs-1.3.23-1.el5nfs-utils-lib-1.0.8-7.2.z2nfs-utils-1.0.9-33.el5如果没有以上的文件。则通过
[color="#0000ff"]yum
install nfs-utils 安装 三、NFS的档案存取权限 当 用户dmtsai 进入去访问到NFS共享目录后,所以可能就会发现几个情况∶ [color="#000088"]NFS server/NFS client 刚好有相同的帐号与群组则此时使用者可以直接以 dmtsai 的身份进行伺服器所提供的档案系统之存取。[color="#000088"]NFS server 的 501 这个 UID 帐号对应为 vbird若 NFS 伺服器上的 /etc/passwd 里面 UID 501 的使用者名称为 vbird 时, 则用户端的 dmtsai 可以存取伺服器端的 vbird 这个使用者的档案喔![color="#000088"]只因为两者具有相同的 UID 而已。这就造成很大的问题了!因为没有人可以保证用户端的 UID 所对应的帐号会与伺服器端相同, 那伺服器所提供的资料不就可能会被错误的使用者乱改?[color="#000088"]NFS server 并没有 501 这个 UID另一个极端的情况是,在伺服器端并没有 501 这个 UID 的存在,则此时 dmtsai 的身份在该目录下会被压缩成匿名者, 一般 NFS 的匿名者会以 UID 为 65534 为其使用者,早期的 Linux distributions 这个 65534 的帐号名称通常是 nobody ,我们的 CentOS 则取名为 nfsnobody 。[color="#000088"]如果使用者身份是 root 时有个比较特殊的使用者,那就是每个 Linux 主机都有的 UID 为 0 的 root 。 想一想,如果用户端可以用 root 的身份去存取伺服器端的档案系统时,那伺服器端的资料哪有什么保护性? 所以[color="#000088"]在预设的情况下, root 的身份会被主动的压缩成为匿名者。 四、NFS服务的配置文档[color="#0000ff"][root@linux ~]# vi /etc/exports[color="#0000ff"] [color="#0000ff"]/tmp *(rw,no_root_squash,sync)/home/public 192.168.1.0/24(rw,sync) *(ro,sync)/home/test 192.168.1.100(rw,sync)/home/linux *.zwt.com(rw,all_squash,anonuid=502,anongid=502,sync)[color="#0000ff"] [color="#990000"]权限参数说明∶[color="#990000"]rw∶read-write,可读写的权限;[color="#990000"]ro∶read-only,只读的权限;[color="#990000"]sync∶资料同步写入到记忆体与硬盘当中;[color="#990000"]async∶资料会先暂存于记忆体当中,而非直接写入硬盘![color="#990000"]no_root_squash∶如果登录NFS 主机使用分享目录的用户是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限! 这个项目不安全,不建议使用![color="#990000"]root_squash∶在如果登录NFS 主机使用分享目录的用户是 root 的,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody(nfsnobody) 那个系统帐号的身份;[color="#990000"]all_squash∶不论登录 NFS 的用户身份为何, 他的身份都会被压缩成为匿名使用者,通常也就是 nobody(nfsnobody)[color="#990000"]anonuid∶anon 意指 anonymous (匿名者) 前面关于 *_squash 提到的匿名使用者的 UID 设定值,通常为 nobody(nfsnobody),但是您可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于您的 /etc/passwd 当中![color="#990000"]anongid∶同 anonuid ,但是变成 group ID 就是了! [color="#990000"] [color="#990000"] [color="#990000"]依照上文编辑的exports后,权限会是什么情况呢?让我们来检查一下∶[color="#000088"]用户端与主机端具有相同的 UID 与帐号∶假设我在 192.168.1.100 登入这部 NFS (IP 假设为 192.168.1.2) 主机,并且我在 192.168.1.100 的帐号为 dmtsai 这个身份,同时,在这部 NFS 上面也有 dmtsai 这个帐号, 并具有相同的 UID ,果真如此的话,那么∶由于 192.168.1.2 这部 NFS 主机的 /tmp 权限为 -rwxrwxrwt ,所以我 (dmtsai 在 192.168.1.100 上面) 在 /tmp 底下具有存取的权限,并且写入的档案所有人为 dmtsai ;在 /home/public 当中,由于我有读写的权限,所以如果在 /home/public 这个目录的权限对于 dmtsai 有开放写入的话,那么我就可以读写,并且我写入的档案所有人是 dmtsai 。但是万一 /home/public 对于 dmtsai 这个使用者并没有开放可以写入的权限时, 那么我还是没有办法写入档案喔!这点请特别留意!在 /home/test 当中,我的权限与 /home/public 相同的状态!还需要 NFS 主机的 /home/test 对于 dmtsai 有开放权限;在 /home/linux 当中就比较麻烦!因为不论您是何种 user ,您的身份一定会被变成 UID=40 这个帐号!所以,这个目录就必需要针对 UID = 40 的那个帐号名称,修改他的权限才行![color="#000088"]用户端与主机端的帐号并未相同时∶假如我在 192.168.1.100 的身份为 vbird ,但是 192.168.1.2 这部 NFS 主机却没有 vbird 这个帐号时,情况会变成怎样呢?我在 /tmp 底下还是可以写入,但是写入的档案所有人变成 nobody 了;我在 /home/public 里面是否可以写入,还需要视 /home/public 的权限而定,不过,反正我的身份就被变成 nobody 了就是;/home/test 的观点与 /home/public 相同!/home/linux 底下,我的身份就被变成 UID = 40 那个使用者就是了![color="#000088"]当用户端的身份为 root 时∶假如我在 192.168.1.100 的身份为 root 呢? root 这个帐号每个系统都会有呀!权限变成怎样呢?我在 /tmp 里面可以写入,并且由于 no_root_squash 的参数,改变了预设的 root_squash 设定值,所以在 /tmp 写入的档案所有人为 root 喔!我在 /home/public 底下的身份还是被压缩成为 nobody 了!因为预设属性里面都具有 root_squash 呢!所以,如果 /home/public 有针对 nobody 开放写入权限时,那么我就可以写入,但是档案所有人变成 nobody 就是了!/home/test 与 /home/public 相同;/home/linux 的情况中,我 root 的身份也被压缩成为 UID = 40 的那个使用者了![color="#990000"][root@linux ~]# /etc/init.d/portmap start# portmap 根本就不需要设定!只要直接启动他就可以啦![color="#000000"]启动之后,会出现一个 port 111 的 sunrpc 的服务,那就是 portmap 啦!也就是RPC服务。[color="#0000ff"][root@linux ~]# /etc/init.d/nfs start[color="#0000ff"][root@linux ~]# /etc/init.d/nfslock start(增加一些 NFS 伺服器的资料一致性功能)[color="#0000ff"][root@linux nfs]# /etc/init.d/nfslock restartStopping NFS locking: [ OK ]Stopping NFS statd: [ OK ]Starting NFS statd: [ OK ] 五、NFS应用的相关命令 1、[color="#0000ff"]查看下RPC服务的注册状态[color="#0000ff"][root@linux nfs]# rpcinfo -p localhost(查看下RPC服务的注册状态) program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 868 status 100024 1 tcp 871 status 100011 1 udp 796 rquotad 100011 2 udp 796 rquotad 100011 1 tcp 799 rquotad 100011 2 tcp 799 rquotad 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100021 1 udp 32771 nlockmgr 100021 3 udp 32771 nlockmgr 100021 4 udp 32771 nlockmgr 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100021 1 tcp 33250 nlockmgr 100021 3 tcp 33250 nlockmgr 100021 4 tcp 33250 nlockmgr 100005 1 udp 823 mountd 100005 1 tcp 826 mountd 100005 2 udp 823 mountd 100005 2 tcp 826 mountd 100005 3 udp 823 mountd 100005 3 tcp 826 mountd[color="#0000ff"]可以发现
[color="#0000ff"]- portmap 启动的 port 在 111;
- [color="#990000"]NFS 启动的 port 在 2049;
- [color="#990000"]其他 rpc.daemons 启动的 port 则是随机产生的,因此需向 port 111 注册。
2、查看NFS服务关于目录权限设定的资料(可以看到一些默认的权限参数。比如root_squash,no_all_squash,anonuid=65534等。) [color="#0000ff"][root@linux nfs]# tail /var/lib/nfs/etab/home/public 192.168.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)/home/test 192.168.1.100(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)/home/linux *.zwt.com(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,mapping=identity,anonuid=502,anongid=502)/home/public *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)/tmp *(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)3、显示设定的NFS共享(exports资料内容)
[color="#0000ff"][root@linux nfs]# showmount -e localhostExport list for localhost:/tmp */home/linux *.zwt.com/home/test 192.168.1.100/home/public (everyone)
4、重新挂载一次 /etc/exports 的设定[color="#0000ff"][root@linux ~]# exportfs -arvexporting 192.168.0.100:/home/testexporting 192.168.0.0/24:/home/publicexporting *.linux.org:/home/linuxexporting *:/home/publicexporting *:/tmp六、NFS用户端使用。
你要如何挂载 NFS 伺服器所提供的档案系统呢?基本上,可以这样做∶
确认本地端已经启动了 portmap 服务!扫瞄 NFS 伺服器分享的目录有哪些,并了解我们是否可以使用 (
[color="#0000ff"]showmount
);在本地端建立预计要挂载的挂载点目录 (mkdir);利用 mount 将远端主机直接挂载到相关目录。[[color="#0000ff"]root@linux ~]# /etc/init.d/portmap start[color="#0000ff"][root@linux ~]# /etc/init.d/nfslock start# 一般来说,系统预设会启动 portmap ,不过鸟哥之前关闭过,所以要启动。# 另外,如果伺服器端有启动 nfslock 的话,用户端也要启动才能生效! [color="#0000ff"][root@linux ~]# showmount -e NFSserver的IP[color="#0000ff"] [color="#0000ff"][root@linux ~]# mkdir -p /home/nfs/public[color="#0000ff"] [color="#0000ff"][root@linux ~]# mount -t nfs 192.168.1.2:/home/public /home/nfs/public# 注意一下挂载的语法!『 -t nfs 』指定档案系统类型,# IP:/dir 则是指定某一部主机的某个提供的目录! [color="#0000ff"][root@linux ~]# dfFilesystem 1K-blocks Used Available Use% Mounted on....中间省略....192.168.1.2:/home/public 1984032 36800 1844800 2% /home/nfs/public[root@linux ~]# umount /home/nfs/public 此外。除了 NFS 服务器需要保护之外,我们取用人家的 NFS 档案系统也需要自我保护才行啊! 那要如何自我保护啊?可以透过 mount 的指令参数来做。 [color="#0000ff"][root@linux nfs]# umount /home/nfs/public[root@linux nfs]# dfFilesystem 1K-blocks Used Available Use% Mounted on/dev/sda7 10371664 3385124 6451176 35% //dev/sda5 1984016 36812 1844792 2% /home/dev/sda3 4956316 204208 4496276 5% /var/dev/sda2 4956316 141220 4559264 4% /opt/dev/sda1 101086 12512 83355 14% /boottmpfs 237656 0 237656 0% /dev/shm[root@linux nfs]# mount -t nfs -o nosuid,noexec,nodev,rw \> 192.168.1.2:/home/public /home/nfs/public[color="#0000ff"]# 通常这样你所挂载的这个档案系统就只能作为资料存取之用了[color="#0000ff"][root@linux nfs]# mount[color="#0000ff"][color="#0000ff"]省略...192.168.1.2:/home/public on /home/nfs/public type nfs (rw,noexec,nosuid,nodev,addr=192.168.1.2)更多的参数可以参考 man nfs 。[color="#000000"]* 将 NFS设置 开机即挂载[color="#0000ff"][root@linux ~]# vi /etc/fstab192.168.0.2:/home/public /home/nfs/public nfs nosuid,noexec,nodev,rw,bg,soft,rsize=32768,wsize=32768 0 0[color="#0000ff"] [color="#0000ff"] [color="#000000"]七、使用将NFS自动挂载卸载功能。 [color="#000000"]当有客户端数据包需求的时候,则自动挂载NFS服务端得共享目录,超过一定时间后,客户端则主动卸载。[color="#000000"]可以使用autonfs功能。 1、首先在用户端编辑/etc/auto.master[color="#0000ff"][root@linux ~]# vi /etc/auto.master/home/nfs /etc/auto.nfs[color="#0000ff"] [color="#0000ff"]# [color="#000000"]内容很简单,只要有用户端的用来提供挂载的主目录和 一个挂载内容的文件即可。 这个文件名可以自行设定的,通常可使用 /etc/auto.nfs 来命名 2、建立并编辑这个 提供挂载内容信息的文件。 [color="#0000ff"][root@linux ~]# vi /etc/auto.nfspublic -rw,bg,soft,rsize=32768,wsize=32768 192.168.1.2:/home/publictest -rw,bg,soft,rsize=32768,wsize=32768 192.168.1.2:/home/testtemp -rw,bg,soft,rsize=32768,wsize=32768 192.168.1.2:/tmp /home/nfs/public /home/nfs/test /home/nfs/temp可以不需要提前建立的3、启动服务并使用 [color="#0000ff"][root@linux ~]# /etc/init.d/autofs start[color="#0000ff"] [color="#0000ff"][root@linux ~]# cd /home/nfs/public[color="#0000ff"][root@linux ~]# mount; df不会有跟192.168.1.2有关的NFS挂载信息[color="#0000ff"][root@linux public]# pwd/home/nfs/public #这个目录产生了,如果mount;df一下的话,也能看到跟192.168.1.2有关挂载信息了。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/76272/showart_2071013.html |
|