NFSサーバーとは
NFS(Network File System)は、ネットワーク上のコンピューター間でリソースを共有できるようにするネットワークファイルシステムです。NFSアプリケーションでは、ローカルNFSクライアントアプリケーションは、ローカルファイルにアクセスするのと同じように、リモートNFSサーバー上のファイルを透過的に読み書きできます。簡単に言えば、それは共有サービスです。ftpプロトコルとは異なり、ftpは、変更する前にすべてのファイルをローカルにダウンロードする必要があり、ローカルスペースを占有します。また、nsfはサーバー上のファイルを直接変更できます。
動作原理
VFSの簡単な紹介
Linuxには、ext4、ext2、nfsなどの数十のファイルシステムがあります。lsコマンドを使用する場合、ファイルシステムごとにlsコマンドを設計することはできません。そしてvfsは、すべてのファイルシステムインターフェイスを1つのインターフェイス(API)に要約することです。ファイルシステムにアクセスする場合、実際のファイルシステムにはvfs抽象化レイヤーを介してアクセスします。
NFS作業ロジック
上の写真を説明してください:
-
ユーザーがローカルファイルにアクセスすると、ローカルディスクを介してアクセスできます。ローカルディスク上のファイルは、ユーザーが使用できるように、vfs関数を介して統合システムインターフェイスから抽出されます。
-
NFSの場合、ネットワークベースです。ユーザーがNFSファイルシステム
NFS很早以前都是UDP协议,而现在基本上都是用TCP协议
にアクセスすると、ソケットTCP / UDP IPプロトコル()を介してNFSサーバーにアクセスします。サーバーがメッセージプロトコルを受信した後、サーバーは関連する操作を通じて結果をユーザーに返します。そして、これらはを通じて達成されRPC
ます。`(サーバー上のディスクにはさまざまなファイルシステムをインストールできますが、VFSを使用して、クライアントがアクセスするファイルをNFSシステムに変換し、クライアントに返します。) -
NFSは多くの機能を提供し、各機能はポートを提供する必要があります。その結果、NFSのポートが固定されることはありません。では、クライアントはどのようにしてNFSポートを認識しているのでしょうか。RPCは、統合された外部ポート111を提供します。NFSが何らかの機能を提供する必要がある場合、NFSはポートをRPCに登録し、RPCはNFSによって登録されたポートを記録します。そして、クライアントに接続を許可するようにクライアントに指示します。
rpc.bind
機能もあります -
注:ユーザーがNFSにアクセスする場合、それはユーザー自身のIDです。サーバー側でも同じことが言えます。クライアントのユーザーIDが1001の場合、ユーザー名がcentosである場合に問題が発生します。サーバー上のユーザーIDも1001ですが、ユーザーはkunです。2つの名前は異なりますが、同じユーザーです。ユーザーはID番号を持って存在するためです。表示されるユーザー名は、逆分析後にのみ表示されます。このように、サーバーは自身のファイルをkunとして認識し、クライアントから認識されるファイルはcentosであり、centosにすべての機能がある場合、nfsサーバー上で悪意のあるものになる可能性があります。この種のエラーを回避するには、ユーザー名を保存する場所を作成する必要があります。ldap、nisなど...
NFSアクセシビリティ
RPC:簡単に言えば、クライアントはサーバー上の関数をリモートで呼び出して、システムコールを実装します。
mountd:NFSサービス認証機能を提供します。
説明:内核中的nfs模块监听套接字,需要用户空间内的进程向内核注册进行代为监听套接字,但是为了数据安全性,不是所有人都可以随便访问的。这时就需要一个认证功能mountd,当用户去访问nfs时,它通过mountd的认证,就可以进行访问。反之拒绝。这里mountd的端口是半随机的,也就是不确定。客户怎么mountd的端口?客户的nfs在连接服务器时,需要先跟rpc-server进行连接。由rpc-server来告知mountd的端口,然后进行连接。
rpc.lockd:ロック;
説明:用户在访问文件时,会对文件进行一个暂时加锁的状态,别的用户想访问同一个文件时,会访问不了,这样为防止数据在修改时出现混乱的状态。
rpc.statd:ステータス;
説明:用户修改文件时出现不可抗力因素,导致nfs出现故障,nfs重新启动之后,故障前访问的文件会有状态通知。
NFSの使用
NFSを使用する前に、カーネルにNFSモジュールがあるかどうかを確認してください。
[root@bogon mysql]# lsmod | grep nfs
nfsd 302418 13
auth_rpcgss 59343 2 nfsd,rpcsec_gss_krb5
nfs_acl 12837 1 nfsd
lockd 93600 1 nfsd
grace 13295 2 nfsd,lockd
sunrpc 300464 23 nfsd,rpcsec_gss_krb5,auth_rpcgss,lockd,nfs_acl
nfs-utilsのインストールnfs
モジュールはカーネル内にあり、ソケットを監視できないため、nfs-utilsが代わりに監視する必要があります。
[root@bogon mysql]# yum info nfs-utils
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.huaweicloud.com
* epel: mirror01.idc.hinet.net
* extras: mirrors.huaweicloud.com
* updates: mirrors.huaweicloud.com
已安装的软件包
名称 :nfs-utils
架构 :x86_64
时期 :1
版本 :1.3.0
发布 :0.61.el7
大小 :1.0 M
源 :installed
構成ファイル/ etc / exports
は共有されるため、共有するユーザーと共有するファイルを定義する必要があります。manexports
形式を使用できます。/PATH/TO/SOME_DIR clients1(export_options, ...) clients2(export_options, ...)
-
/PATH/TO/SOME_DIR
:共有するディレクトリ、できれば別のパーティション -
client
:Singalhost:ipv4、ipv6、FQDN;
ネットワーク:アドレス/ネットマスク、長い形式と短い形式のマスクをサポート;
ワイルドカード:ホスト名のワイルドカード、例:*。magedu.com;
ネットグループ:NISドメインのホストグループ; @group_name ;
匿名:*を使用してすべてのホストをワイルドカード化します
。2つのクライアントはスペースで直接区切る必要があり、クライアントの後の括弧内にスペースを入れないでください。 -
export_options
:- 一般的なオプション:
ro:只读
rw:读写
sync:同步
async:异步;一般都用异步,同步会影响性能
secure:客户端端口小于1024,否则就要使用insecure选项
- ユーザーIDマッピング:
root_squash:压缩root用户,一般指将其映射为nfsnobody; 就是来宾用户
no_root_squash:不压缩root用户;
危険!!
all_squash:压缩所有用户;
anonuid and anongid:将压缩的用户映射为此处指定的用户;
- 一般的なオプション:
NFSクライアントの一般的なコマンド:
NFSはファイルシステムであるため、マウント後に使用する必要があります
mount -t nfs servername:/path/to/share /path/to/mount_point [-rvVwfnsh ] [-o options]
NFSサーバーへのマウントに関する情報を表示する
showmount -e NFS_SERVER_IP: 查看指定的nfs server上导出的所有文件系统;
NFS構成ファイルを変更した後、NFSをリロードします
exportfs:
-r:重新导出;
-a:所有文件系统;
-v:详细信息;
-u:取消导出文件系统;
例
クライアントがnfsサービスをマウントすると、クライアントのrootユーザー権限がデフォルトで圧縮され、nfsnobodyユーザーとしてアクセスされます。普通のユーザーはまだ普通のユーザーです。
1)/ data / shareディレクトリを共有します
[root@localhost ~]# cat /etc/exports
/data/share/ *(rw)
2)クライアントで共有しているファイルを変更します
[root@localhost ~]# mount 11.2.1.205:/data/share /mnt/share1
3)ファイルに書き込めないことがわかりました
5 dshadskajidsnkjada
6 dsjakljdslka
"/mnt/share1/f1"
"/mnt/share1/f1" E212: 无法打开并写入文件
请按 ENTER 或其它命令继续
4)サーバー上のフォルダーのアクセス許可を777に設定して、他のユーザーが書き込みアクセス許可を持つようにします
[root@localhost ~]# chmod 777 /data/share
5)クライアントでf1を再度編集します
[root@localhost ~]# cat /mnt/share1/f1
a
b
c
6)サーバー側のf1ファイルの所有者とグループを確認し、nfsnobody権限になっていることを確認します。
[root@localhost ~]# ll /data/share
总用量 4
-rw-r--r-- 1 nfsnobody nfsnobody 6 3月 21 15:24 f1
7)クライアントをydongユーザーに切り替え、/ mnt / share1の下に自分の部屋を再作成します。
[ydong@localhost ~]$ echo "ydong" > /mnt/share1/f2
8)サーバー上のf2ファイルを確認し、所有者とグループの両方がydongであることを確認します
[root@localhost ~]# ll /data/share
总用量 8
-rw-r--r-- 1 nfsnobody nfsnobody 6 3月 21 15:24 f1
-rw-rw-r-- 1 ydong ydong 6 3月 21 15:26 f2
これは、ルート権限が大きすぎてルート権限が絞られているのに対し、一般ユーザーの権限は比較的小さいため、圧縮されていないためです。
nfsクライアントのユーザーがnfsサーバーに存在しない場合、nfsクライアントの通常のユーザーによって作成されたファイルは、サーバー上の同じIDのグループと所有者にマップされます。
nfsクライアントとnfsサーバーのID番号が同じである場合、nfsクライアントとサーバーには所有権グループと所有者が異なる2つのファイルがあります。
NFS自動マウント
起動時の自動マウント
1)nfs共有ディレクトリ
[root@localhost ~]# cat /etc/exports
/data/share/ *(rw)
2)クライアントのfstabファイルにマウントオプションを書き込みます
[root@localhost ~]# cat /etc/fstab
11.2.1.205:/data/share /mnt/share1 nfs defaults 0 0
3)取り付け効果を確認する
[root@localhost ~]# mount -a
[root@localhost ~]# mount | grep 11
11.2.1.205:/data/share on /mnt/share1 type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=11.2.3.46,local_lock=none,addr=11.2.1.205)
autofs自動マウント
起動せずにマウントされたファイルは、autofsを使用して実装できます。ディレクトリを直接入力して自動マウントを実現
たとえば、ディスクを通常どおりマウントする場合、/ dev / cdromをマウントポイントにマウントする必要があります。
[root@localhost ~]# mount /dev/cdrom /media/cdrom/
mount: /dev/sr0 写保护,将以只读方式挂载
autofsを使用すると、ディレクトリに直接入力して、手動マウントではなく自動マウントを実現できます。
[root@localhost ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 1001816 0 1001816 0% /dev
tmpfs 1018848 0 1018848 0% /dev/shm
tmpfs 1018848 9984 1008864 1% /run
tmpfs 1018848 0 1018848 0% /sys/fs/cgroup
/dev/mapper/centos_bogon-root 20961280 4062668 16898612 20% /
/dev/sda1 508580 167020 341560 33% /boot
/dev/mapper/centos_bogon-data 20961280 65760 20895520 1% /data
/dev/mapper/centos_bogon-home 10475520 70212 10405308 1% /home
/dev/mapper/centos_bogon-var 20961280 711844 20249436 4% /var
tmpfs 203772 0 203772 0% /run/user/0
11.2.1.205:/data/share 20961280 65792 20895488 1% /mnt/share1
1)autofs機能を開始します
[root@localhost ~]# systemctl start autofs
2)/ misc / cdディレクトリに入り、自動マウントを実現します
[root@localhost ~]# cd /misc/cd
[root@localhost cd]# df
/dev/sr0 10767514 10767514 0 100% /misc/cd
これらの機能は、autofsの設定ファイルによって実現されます。
[root@localhost ~]# cat /etc/auto.master
/misc /etc/auto.misc # 定义了挂载点父目录以及挂载配置文件
[root@localhost ~]# cat /etc/auto.misc
cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom # 挂载点子目录,以及挂载选项及挂载的磁盘
nfs自動マウントを実現する
1)共有する必要のあるディレクトリを/ etc / exportsに書き込む
[root@server ~]# cat /etc/exports
/data/share/ *(rw)
2)クライアントのauto / miscで親ディレクトリとマウントオプションを定義します。フォルダがd1 / d2 / d3の場合、その親ディレクトリはd1 / d2です。相対パスの親ディレクトリです
[root@client ~]# cat /etc/auto.master
/mnt /etc/nfs.misc
3)nfs.miscの設定ファイルを書き込みます
[root@client share1]# cat /etc/nfs.misc
share1 -fstype=nfs,rw,nosuid,vers=3 11.2.1.205:/data/share
4)nfsを再起動します
[root@client ~]# systemctl restart autofs
[root@client ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 1001816 0 1001816 0% /dev
tmpfs 1018848 0 1018848 0% /dev/shm
tmpfs 1018848 9988 1008860 1% /run
tmpfs 1018848 0 1018848 0% /sys/fs/cgroup
/dev/mapper/centos_bogon-root 20961280 4062696 16898584 20% /
/dev/sda1 508580 167020 341560 33% /boot
/dev/mapper/centos_bogon-data 20961280 65760 20895520 1% /data
/dev/mapper/centos_bogon-home 10475520 70212 10405308 1% /home
/dev/mapper/centos_bogon-var 20961280 710996 20250284 4% /var
tmpfs 203772 0 203772 0% /run/user/0
5)クライアントで/ mnt / shareに移動します
[root@client ~]# cd /mnt/share1
[root@client share1]# df
11.2.1.205:/data/share 20961280 65792 20895488 1% /mnt/share1
絶対パスマウント
2人のユーザーが見たい共有コンテンツが異なるため、絶対パス方式を使用して
1)2つの共有ファイルを提供する必要があります。
[root@server ~]# cat /etc/exports
/data/wang *(rw)
/data/ydong *(ro)
2)クライアントに自動構成ファイルを設定します
[root@client ~]# cat /etc/auto.master
/- /etc/nfs.misc #表示使用绝对路径
3)/etc/nfs.miscを書き込みます
[root@client ~]# cat /etc/nfs.misc
/home/ydong -fstype=nfs,ro,nosuid,vers=3 11.2.1.205:/data/ydong
/home/wang -fstype=nfs,rw,nosuid,vers=3 11.2.1.205:/data/wang
4)テスト
[root@client ~]# su - ydong
上一次登录:六 3月 21 15:25:41 CST 2020pts/0 上
-bash-4.2$ ls
ydong.home
-bash-4.2$ exit
登出
[root@client ~]# su - wang
-bash-4.2$ ls
wang.home
-bash-4.2$
上記の状況は、nfsサーバーがydongとwangのホームディレクトリを直接占有しているために発生します。そのため、ホスト名はありません。