NFS�� Network FileSystem ��²�١A�̦����e�O�� Sun �o�a���q�ҵo�i�X�Ӫ��A�L���ت��N�O�Q�����P�������B���P���@�~�t�Υi�H�������ɭӧO���ɮװաI�ثe�b Unix Like �����ΨӰ��� file server �O�۷��������@�Ӥ�׳�I�W�A Unix Like �D���s����t�@�� Unix Like �D���Ӥ��ɩ������ɮɡA�ϥ� NFS �n�� SAMBA �ֳt�B��K���h�F�I���~�A NFS ���]�w�u����²��A�X�G�u�n�O�o�Ұ� Remote Procedure Call �o�өN�N ( �N�O portmap �o�ӮM��աI ) �N�@�w�i�H�[�]���_�ӡI�u�O�����ڡI���L�A�p�G�n�F�� Windows �P Linux ���������q�A�����٬O�H SAMBA ����e���ڡI�L�צp��A NFS �٬O�i�H�����p���q�ξǮճ�줺�� Unix Like �����@�� file ���@�� Server ��I |
���D�G
�аݧڪ��D���O�H RPM ���M��z�� Linux distribution �A�Ҧp Red Hat, Mandrake �P OpenLinux �������A����ڭn�p�D�ڪ��D���̭��O�_�w�g�w�ˤF portmap �P nfs �������M��O�H ���G ²�檺�ϥ� rpm -qa | grep nfs �P rpm -qa | grep portmap �Y�i���D�աI |
[root@test
root]# vi /etc/exports
[�����ɪ��ؿ�] [�D���W��1��IP1(�Ѽ�1,�Ѽ�2)] [�D���W��2��IP2(�Ѽ�3,�Ѽ�4)] |
[root@test
root]# vi /etc/exports
/tmp *(rw,no_root_squash) |
[root@test
root]# vi /etc/exports
/tmp�@�@�@�@�@*(rw,no_root_squash) /home/public�@192.168.0.*(rw)�@�@ *(ro) /home/public�@192.168.0.0/24(rw)�@*(ro) |
[root@test
root]# vi /etc/exports
/tmp�@�@�@�@�@*(rw,no_root_squash) /home/public�@192.168.0.*(rw)�@�@ *(ro) /home/test�@�@192.168.0.100(rw) |
[root@test
root]# vi /etc/exports
/tmp�@�@�@�@�@*(rw,no_root_squash) /home/public�@192.168.0.*(rw)�@�@ *(ro) /home/test�@�@192.168.0.100(rw) /home/linux�@ *.linux.org(rw,all_squash,anonuid=40,anongid=40) |
[root@test
root]# vi /etc/exports
/tmp�@�@�@�@�@*(rw,no_root_squash) /home/public�@192.168.0.*(rw)�@�@ *(ro) /home/test�@�@192.168.0.100(rw) /home/linux�@ *.linux.org(rw,all_squash,anonuid=40,anongid=40) |
[root@test
root]# /etc/rc.d/init.d/portmap start<==�Ұ�
portmap �I
[root@test root]# /etc/rc.d/init.d/nfs start�@�@ <==�Ұ� NFS |
[root@test
root]# vi /var/log/messages
Nov 16 15:04:45 test portmap: portmap startup succeeded Nov 16 15:04:53 test nfs: Starting NFS services: succeeded Nov 16 15:04:54 test nfs: rpc.rquotad startup succeeded Nov 16 15:04:54 test nfs: rpc.mountd startup succeeded Nov 16 15:04:54 test nfs: rpc.nfsd startup succeeded |
�y�k�G
[root@test root]# exportfs [-aruv] �Ѽƻ����G -a �G��������(�Ψ���) /etc/exports �ɮפ����]�w -r �G���s���� /etc/exports �̭����]�w�A���~�A��P�B��s /etc/exports �@�@ �� /var/lib/nfs/xtab �����e�I -u �G�����Y�@�ؿ� -v �G�b export ���ɭԡA�N���ɪ��ؿ���ܨ�ù��W�I �d�ҡG [root@test root]# exportfs -rv <==�������s export �@���I exporting 192.168.0.100:/home/test exporting 192.168.0.*:/home/public exporting *.linux.org:/home/linux exporting *:/home/public exporting *:/tmp reexporting 192.168.0.100:/home/test to kernel [root@test root]# exportfs -au <==�����������F�I |
[root@test
root]# vi /var/lib/nfs/xtab
/home/test 192.168.0.100(rw,sync,wdelay,hide,secure,root_squash, no_all_squash,subtree_check,secure_locks,mapping=identity,anonuid=-2, anongid=-2) |
�y�k�G
[root@test root]# showmount [-ae] hostname -a �G�b�ù��W��ܥثe�D���P Client �ҳs�W�Ӫ��ϥΥؿ����A -e �G��� hostname �o�������� /etc/exports �̭������ɥؿ��I �d�ҡG [root@test root]# showmount -e localhost Export list for localhost: /tmp * /home/linux *.linux.org /home/public (everyone) /home/test 192.168.0.100 |
[root@test
root]# netstat -utln
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN <==�Ӧ� portmap tcp 0 0 0.0.0.0:817 0.0.0.0:* LISTEN <==�Ӧ� rpc.xxxx tcp 0 0 0.0.0.0:1266 0.0.0.0:* LISTEN <==�Ӧ� rpc.xxxx udp 0 0 0.0.0.0:2049 0.0.0.0:*�@�@�@�@�@�@�@�@�@�@�@<==�N�O nfs �� port udp 0 0 0.0.0.0:814 0.0.0.0:*�@�@�@�@�@�@�@�@�@�@�@<==�Ӧ� rpc.xxxx udp 0 0 0.0.0.0:1327 0.0.0.0:*�@�@�@�@�@�@�@�@�@�@�@<==�Ӧ� rpc.xxxx udp 0 0 0.0.0.0:111 0.0.0.0:*�@�@�@�@�@�@�@�@�@�@�@<==�Ӧ� portmap |
�y�k�G
[root@test root]# rpcinfo [-p] hostname(orIP) -p �G��ܩҦ��� port �P program ����T�I �d�ҡG [root@test root]# rpcinfo -p test.linux.org program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100011 1 udp 1014 rquotad 100011 2 udp 1014 rquotad 100011 1 tcp 1017 rquotad 100011 2 tcp 1017 rquotad 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100021 1 udp 1339 nlockmgr 100021 3 udp 1339 nlockmgr 100021 4 udp 1339 nlockmgr 100005 1 udp 1340 mountd 100005 1 tcp 1271 mountd 100005 2 udp 1340 mountd 100005 2 tcp 1271 mountd 100005 3 udp 1340 mountd 100005 3 tcp 1271 mountd |
OK�աI�ҥH�ڭ̱o�����D�@�U�ڭ̪��D���̭�������H���]�ڪ��D���W�٬O test.linux.org �A����ڭn���D���Y���Ǥ����ǥ� NFS ���ɥX�Ӫ��ؿ��A�N���L showmount �@�U�o�I
�@�@
[root@test root]# showmount -e test.linux.org
Export list for localhost:
/tmp *
/home/linux *.linux.org
/home/public (everyone)
/home/test 192.168.0.100
�M��O�H���]�ڭn�N /home/public �����b�ڪ� /home/nfs/public ���U�A����ڴN�o�����o�ӥؿ��~��r�I�M��A�Q�� mount �o�ӫ��O�ӱ��� /home/public �o�ӥؿ��I���I���o�ˡG
�@�@
[root@test root]# mkdir -p /home/nfs/public <==�إ� public �o�ӥؿ��A�[ -p �i�H����W�[�ؿ�
[root@test root]# mount -t nfs test.linux.org:/home/public /home/nfs/public
�������榡�G
[root@test root]# mount -t nfs hostname(orIP):/directory /mount/point
[root@test root]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda1 1904920 1235380 572776 69% /
/dev/hdb1 976344 115212 810736 13% /backup
test.linux.org:/home/public
1904920 1235376 572776 69% /home/nfs/public <==�o�ӬO���ݥD�����e�q
���`�N�@�U���� NFS �ɮת��榡�d�ҳ�I�����I�o�˴N�i�H�N��Ʊ����i�ӰաI�Ъ`�N��I�H��A�u�n�z�i�J�z���ؿ� /home/nfs/public �N�����F test.linux.org �������ݥD���� /home/public ���ӥؿ����o�I�ܤ����a�I����p��N������ NFS �ؿ������O�H�N�ϥ� umount �ڡI
�@�@
[root@test root]# umount /home/nfs/public
�i��o�ͪ����D�G
�q�`�L�k��������]�����U�o�X�ӡG
- �ϥΪ̪��v�������G�H�W�����Ҥl�ӻ����A�ڪ� /home/test �u�ണ�� 192.168.0.0/24 �o�Ӻ���A�ҥH�A�p�G�ڦb test.linux.org �o���������A�H localhost �ӱ����ɡA�N�|�L�k�����W�A�o���v�������S���D�a�I����z�i�H�ոլݡG
�ҥH�o�I�p�G�z�o�{�W������ܪ��T���ɡA�N���ܱz���D���v��������i�J�ӥؿ��o�I�p�G�T�w�z�� IP �S�����~�A����Ц^�� /etc/exports �o���ɮפ��A�w��z�ۤv�� IP �Ӷi��ץ��a�I
[root @test root]# mount -t nfs localhost:/home/test /home/nfs
mount: localhost:/home/test failed, reason given by server: Permission denied
�@- �ѰO�Ұ� portmap �G
�o�ӳ̮e���Q�ѰO�F�I�N�O�ѰO�F�Ұ� portmap �o�ӪA�ȰաI�p�G�z�o�{�z�� mount ���T���O�o�ˡG�Ϊ̬O�G
[root@test root]# mount -t nfs localhost:/home/test /home/nfs
mount: RPC: Port mapper failure - RPC: Unable to receive����N����N portmap �Ұʧa�I�I�åB�]�ݭn�N nfs ���s�Ұʳ�I
[root@test root]# mount -t nfs localhost:/home/test /home/nfs
mount: RPC: Program not registered�@
[root@test root]# /etc/rc.d/init.d/portmap start
[root@test root]# /etc/rc.d/init.d/nfs restart- �Q������ױ��F�G
�o�Ӥ]�ܮe���ѰO�F�I���N�O���s�]�w�@�U�z��������A�o�]�t�F�ⳡ���A�]�A iptables �P TCP_Wrappers �I�]���ڭ̱ҰʤF portmap �A�o�ӪF�観��Ӹ�ƻݭn���ɥX�ӡA�@�ӬO port 111 �ݭn���ѥX�h�A�]���z�� iptables �W�h�����A�ݭn�}��o�� port ��I���I���o�˪��X��r�n�[�J�z�� iptables rules �����G�p�G�z�w�g�}��F�o�� port ���s���v���A�o�٬O�L�k�s�����\�A�������ӴN�O TCP_Wrappers �����D�F�I�ˬd�@�U�z�� /etc/hosts.deny ���Y�O�_���o��G
iptables -A INPUT -p TCP --dport 111 -j ACCEPT
iptables -A INPUT -p UDP --dport 111 -j ACCEPT�G�u�p�����ܡA�ѩ� portmap �O�� portmap �o�� daemon �ұҰʪ��A�ҥH�z�N�����n�b /etc/hosts.allow �̭��[�J�o�@��G
[root@test root]# vi /etc/hosts.deny
ALL: ALL�Ϊ̬O�N ALL �令�z�ҷQ�n���L�ϥ� NFS ������Y�i�I�o�˻��i�H�A�ѤF�ܡH�Y�Q�i�@�B�A�Ѥ@�U������A�аѦҫe�����`���L���G²��������ظm�C
[root@test root]# vi /etc/hosts.allow
portmap: ALL
�ݭn�`�N���O�A�ѩ� NFS �ϥΪ��o�� RPC �b client �ݳs�W�D���ɡA����z���D���Q�n�����A���i�N�|�����y���i����ȡz�I�p�G�z�� Server �W���٦� Client �b�s�u�A����z�n�����A�i��o�n����ƭ����Y�~������`���������\�I�ӡI�u�������I���۫H�ܡH���M�z�ۭӨ�ոլݡI ^_^�I�ҥH�o�A��ij�z�� NFS Server �Q�n�������e�A����y���� portmap �P nfs �z�o��ӪF��I�p�G�L�k���T���N�o��� daemons �����A������H netstat -utlp ��X PID �A�M��H kill �N�L�������I�o�ˤ~����k���`���������\��I�o�ӽЯS�O�S�O���`�N�O�I
�n�F�I�@�Ǫ`�N�ƶ������F����A�A�өO�H��F�I�S�O�̭��n���w���]�w�譱�����D�F�I���� NFS �i�H�]�w�w�����a�観���̩O�H����٤��֩O�H�ѥ~�Ӥ��i�H�o�ˬݡG�����𪺰����аѦҡy²��������ظm�z�@��A�̦n��N�ӽg�峹���L�ݧ��A�_�h�ٯu���A�ѩ��U�b�F�����I���]�z�w�g�ݧ��ӽg�u��F�A���ۤU�ӧڭ̴N�o�n�@�B�@�B�����۫إߨ������o�I
- iptables ������]�w�F
- TCP_Wrappers ������]�w�F
- /etc/exports �v���]�w�C
- �ϥ� iptables ����j�d��s�u�G
���]�ڭ̪� NFS �D�n�O�w�鷺�������}��Ӥw�A�ӹ��~�������u����dzN�����}��A��Y�O 140.0.0.0/8 �A����z�i�H�ϥγo�˪��y�k�G�o�ˤj�P�W�N�i�H�� 192.168.0.0/24 �o�� C Class ������P 140.0.0.0/8 �o�� A Class �������z���D���̭��ӡA�Ө�L���s�u�N���z���쥻�� iptables �����A�өw��I
iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0/8 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0/8 --dport 111 -j ACCEPT
�@- �ϥ� TCP_Wrappers �����Ӫ��d��G
�ƹ�W�A�p�G�z�����o�p��]�w iptables ���ܡA���]�S���Y�A�ڭ̥i�H�ϥ� TCP_Wrappers ���I�]���n�ϥ� NFS �N�����n�q�L portmap �o�@��( �]���n�ϥ� RPC �աI )�A�ӳo�� portmap �i�H�ǥ� TCP_Wrappers �Ӻz�I�����I�Ӧn�F�I����N�N�L�s�u���d���p�o�I�ڭ̥i�H�b /etc/hosts.allow �̭��W�w�s�W NFS �D�����D�� IP �P�W�١A���]������D���u�� 192.168.0.0/24 �o�� C class �� 140.116.44.125 �o�ӥD���A�H�Ϋ᭱�����O ncku.edu.tw ������i�H�s�W�ڪ� NFS �D���A����ڥi�H�g���o�ˡG�����I�o�˥i�N�]�w�n�o�I��²�檺�a�I
[root@test root]# vi /etc/hosts.allow
portmap: 192.168.0.0/255.255.255.0
portmap: 140.116.44.125
portmap: .ncku.edu.tw[root@test root]# vi /etc/hosts.deny
portmap: ALL
�@- �ϥ� /etc/exports �]�w��w�����v���G
�o�N�o�A��z�����ҤF�I���]�w���S�����Y�A���O�b�y�K�Q�z�P�y�w���z�����A�n���z�������I�o�I���� root_squash �� all_squash ���\��A�A�Q�� anonuid �������]�w�ӳW�d�n�J�z�D�����ϥΪ̨����I�����٬O����k���Ѥ@�Ӹ����w���� NFS �D�����I�q�`�ڭ̳��|��������ij�A���n�Ұ� NFS Server �A�Y�ϭn�ҰʡA�̦n�]�O�w��Y�ӽd��Ӷi��ؿ������ɡI�åB�A�y�n���ϥΪ̼h�ŨӺz�z�|����n�@�dz�I���U�ڭ̴N�ӹ�ڪ��b�z�������W���d�@��²�檺 NFS server �a�I
- Client �ݱ��������D�G
�W�A�b Client �ݱ������ɭԡA���F��߷|���p�߭� NFS �ݱ��i�Ӫ��㦳 SUID �v���ɮת��{������I�o�ӫܥi��|�M�`��t�Ϊ��w���O�I�]�� SUID ���ӴN���O�ܦw�������I�ҥH�O�A�z�o�� root �]�i�H�N NFS �Ҥ��ɪ��ؿ��H�����w�������p�����i�ӡI�Ҧp�G��� nosuid �]�O�@�ӫܤ�������ܳ�I
[root@test root]# mount -t nfs -o nosuid,ro hostname:/directory /mount/point
���]���ҡG��a�t�m�G
- ���]�ڪ� Linux �D���� 192.168.0.100 �o�@���F
- �w�p�N /tmp �H�iŪ�g�A�åB������ϥΪ̨������覡���ɵ��Ҧ� 192.168.0.0/24 �o�Ӻ��줤���Ҧ� Linux �u�@���F
- �w�p�}�� /home/nfs �o�ӥؿ��A�ϥΪ��ݩʬ���Ū�A�i���Ѱ��F���줺���u�@���~�A�V�~�紣�Ѹ�Ƥ��e�F
- �w�p�}�� /home/upload ���� 192.168.0.0/24 �o�Ӻ��쪺��ƤW�ǥؿ��A�䤤�A�o�� /home/upload ���ϥΪ̤Ω��ݸs�լ� nfs-upload �o�ӦW�r�A�L�� UID �P GID ���� 210�F
- �w�p�N /home/andy �o�ӥؿ��Ȥ��ɵ� 192.168.0.50 �o�� Linux �D���A�H���ѸӥD���W�� andy �o�ӨϥΪ̨ӨϥΡA�]�N�O���A andy �b 192.168.0.50 �� 192.168.0.100 �����b���A�B�b������ andy �A�ҥH�w�p�}�� /home/andy �� andy �ϥΥL���a�ؿ��աI
�n�F�A����бz�����n�ݩ��U�����סA���ۤv�ʵ��Ϊ̪����b�ۤv�������W���ʤ�@�@�ݡA����o��z�n�����פ���A�b�ݩ��U�������a�I��ӨB�J�j�P�W�N�O�o�˧o�I�[�o��I
- �����A�N�O�n�إ� /etc/exports �o���ɮת����e�o�A�z�i�H�o�˼g�a�I
�j���N�O�o�ˤl�a�I�z�i�H�ۦ���լݬݡI
[root @test root]# vi /etc/exports
/tmp�@�@�@�@�@192.168.0.*(rw,no_root_squash)
/home/nfs�@ �@192.168.0.*(ro) *(ro,all_squash)
/home/upload�@192.168.0.*(rw,all_squash,anonuid=210,anongid=210)
/home/andy�@�@192.168.0.50(rw)
�@- �A�ӡA�N�O�n�إߨC�ӹ������ؿ������ Linux �v���F�I�ڭ̤@�Ӥ@�ӨӬݡG
�o�ˤl�@�ӡA�v�������D�j���N�i�H�ѨM�o�I
1. /tmp
[root @test root]# ll /
drwxrwxrwt 6 root root 4096 Nov 16 09:07 tmp2. /home/nfs
[root @test root]# mkdir -p /home/nfs <==�إߩһݭn���ؿ�
[root @test root]# chmod 755 -R /home/nfs <==�ק�����Y�檺�ɮ��v��
�N�ؿ��P�ɮ׳]�w����Ū�I����g�J�����A�A�|��O�I�@�I�I3. /home/upload
[root @test root]# groupadd -g 210 nfs-upload <==���إߩһݭn�� 210 �o�Ӹs��
[root @test root]# useradd -g 210 -u 210 -M nfs-upload <==�إݭn���ϥΪ̦W��
[root @test root]# mkdir -p /home/upload <==�إ߰_�ؿ��F�I
[root @test root]# chown -R nfs-upload:nfs-upload /home/upload <==�ק�֦��̡I
�p���A�h�ϥΪ̻P�ؿ����v�����]�w�����o�I4. /home/andy
[root @test root]# ll /home
drwx------ 3 andy andy 4096 Oct 28 13:37 andy
�@- �Ұ� portmap �P nfs �A�ȡG
�@
[root @test root]# /etc/rc.d/init.d/portmap start
[root @test root]# /etc/rc.d/init.d/nfs start- �b 192.168.0.50 �o�������W���t�m�@�U�G
1. �T�{�i�Υؿ�
[andy @linux50 andy]$ 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.502. �إ߱����I�G
[andy @linux50 andy]$ mkdir -p /home/zzz/tmp
[andy @linux50 andy]$ mkdir -p /home/zzz/nfs
[andy @linux50 andy]$ mkdir -p /home/zzz/upload
[andy @linux50 andy]$ mkdir -p /home/zzz/andy3. ��ڱ����G
[andy @linux50 andy]$ su <==�q�` Linux �u���\ root �ӱ����I
[root @linux50 andy]# mount -t nfs 192.168.0.100:/tmp /home/zzz/tmp
[root @linux50 andy]# mount -t nfs 192.168.0.100:/home/nfs /home/zzz/nfs
[root @linux50 andy]# mount -t nfs 192.168.0.100:/home/upload /home/zzz/upload
[root @linux50 andy]# mount -t nfs 192.168.0.100:/home/andy /home/zzz/andy
[root @linux50 andy]# exit
�b LPI ���� http://www.lpi.org �̭����쪺�A���� NFS ���Ҹ��D�w���a��A�u���b LPI level 1 �� 102 �A�̭��� topic 113 Networking Services �A�ĥ|�I�����A²���� NFS �]�w�C�j�ժ��O�y���ժ̻��A�� NFS ���]�w�B�ҰʻP���������Y�z�ܩ�|�Ҫ��ɮP���O�i��o�ǡG
- /etc/exports
- /etc/fstab
- mount
- umount