nfsは便利で利用シーンがある
けれどもセキュリティ面を考える必要がある
そして設定内容をよく忘れる
動作させるサービス
順番に動作させる必要あり
設定ファイル
<エクスポートディレクトリ名> <エクスポート先>(エクスポートオプション)
エクスポート先
single host | IPアドレスかFQDN |
netgroup | NISのグループを@groupのように指定できる |
wildcard | *と?を利用できる |
ip network | IPセグメントを指定できる |
エクスポートオプション
rw | 書き込み読み込み許可 |
no_root_squash | rootユーザでの操作許可 |
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が利用可能
portmap: 192.168.0.1 192.168.0.2 192.168.1
portmap: ALL
動作させるサービス
順番に動作させる必要あり
マウント
# mount -t nfs -o <マウントオプション> <NFSサーバー名>:<exportディレクトリ> <マウントポイント>
マウントオプション
rsize=8192,wsize=8192 | デフォルトは4096.バッファサイズ、あまり大きすぎると通信できない |
hard | マウントされたファイルシステムにアクセスしているプログラムはハングする。intrを指定指定していないとkillできない。 |
soft | NFSの反応が無くなったらタイムアウト動作する。timeo=timeで指定できる。デフォルトはファイル操作を無制限に繰り返す |
intr | NFS接続がメジャータイムアウトになり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となっている