がらくたネット


NFSの利用

NFSの利用

nfsは便利で利用シーンがある
けれどもセキュリティ面を考える必要がある
そして設定内容をよく忘れる8-o

サーバー側

動作させるサービス

  • portmap
  • nfslock
  • nfs

順番に動作させる必要あり

設定ファイル

  • /etc/exports
  • /etc/hosts.allow
  • /etc/hosts.deny

エクスポート設定

<エクスポートディレクトリ名> <エクスポート先>(エクスポートオプション)

エクスポート先

single hostIPアドレスかFQDN
netgroupNISのグループを@groupのように指定できる
wildcard*と?を利用できる
ip networkIPセグメントを指定できる

エクスポートオプション

rw書き込み読み込み許可
no_root_squashrootユーザでの操作許可
all_squash全てのuidとgidをanonymousにマッピング
timeoデフォルトは7(0.7秒)。再送を行う時間。
retrans=nマイナータイムアウトと再送の合計がこの値を超えるとメジャータイムアウトとなる。デフォルトは3。

デフォルトではrootユーザ(UID 0)での操作に関しては許可していなくて nfsdがnobodyユーザに置き換える(root_squashオプション) サーバーの重要なファイルはrootのみが読み書きできるのが普通であり リモートホストのrootからの操作を全て拒否するのがlinux流儀だそうな(By JF)

squashとは排他との意味だそうな…

セキュリティ設定? hosts.allowとhosts.denyでportmap利用可能な範囲を明示的に指定しておく
これで明示的に指定された端末やネットワークからのみportmapが利用可能

  • /etc/hosts.allow

portmap: 192.168.0.1 192.168.0.2 192.168.1

  • /etc/hosts.deny

portmap: ALL

クライアント側

動作させるサービス

  • portmap
  • nfslock

順番に動作させる必要あり

マウント

# mount -t nfs -o <マウントオプション> <NFSサーバー名>:<exportディレクトリ> <マウントポイント>

マウントオプション

rsize=8192,wsize=8192デフォルトは4096.バッファサイズ、あまり大きすぎると通信できない
hardマウントされたファイルシステムにアクセスしているプログラムはハングする。intrを指定指定していないとkillできない。
softNFSの反応が無くなったらタイムアウト動作する。timeo=timeで指定できる。デフォルトはファイル操作を無制限に繰り返す
intrNFS接続がメジャータイムアウトになりNFSマウントがhard接続されている場合、シグナルによるファイル操作中断を許可し、中断された場合はプログラムにEINTRを返す。デフォルトは許可しない

最適化?

NFSはよく最適化について言われる

実際は難しい問題だ…

ブロックサイズでの最適化

マウントオプションでwsize=XXXX、rsize=XXXXと指定することでデータの転送サイズを指定できる

v3ではカーネルソースの./include/linux/nfsd/const.hにあるカーネル定数NFSSVC_MAXBLKSIZEで上限が決まる

ちなみにCentOS5.2の2.6.18-92.1.22.el5PAEでは#define NFSSVC_MAXBLKSIZE (32*1024)となっている

ブロックサイズは1024の倍数で上限値までの間で指定できる

デフォルトは4096となっている