NFSノート

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のホームディレクトリを直接占有しているために発生します。そのため、ホスト名はありません。

おすすめ

転載: blog.csdn.net/qq_44564366/article/details/91181203