FreeBSD で NFS (3) 【/etc/exports 詳解】
公開日:
:
最終更新日:2014/02/03
FreeBSD, FreeBSD くらいあんと, NFS
Seichan です.こんばんわ.
前回「FreeBSD で NFS (2)」で書いたとおり,/etc/exports 詳解の続編です.
以前 FreeBSD 5.0-RELEASE あたりで Pukiwiki の「FreeBSD で NFS(Network File System) サーバ & クライアント」に纏めていましたが,時代も変わってきてますので再まとめしています.よろしければ Pukiwiki 側もご覧ください.
/etc/exports 詳解
読み取り専用でマウント
読み取り専用で共有をかけたいシチュエーションはとても多いと思います.ISO イメージの共有等ですね.そういう場合は -ro オプションで設定することが可能です.
次の例は,/usr は読み取り専用,/pub は読み書き可能な共有を設定しています.
/usr -ro -network 192.168.241.0 -mask 255.255.255.0 /pub -network 192.168.241.0 -mask 255.255.255.0
指定したディレクトリ以下を任意にマウント
「FreeBSD で NFS (2)」で書いた「複数のディレクトリの共有」の場合,次のように 1行に共有をかけたいディレクトリを纏める書き方を紹介しました.
/usr/src /usr/obj -network 192.168.241.0 -mask 255.255.255.0
あまりおすすめは出来ませんが,指定したディレクトリ以下のサブディレクトリの全てを任意にマウントポイントとする方法があります.次のように -alldirs オプションをつける事で実現出来ます.
/usr -alldirs -network 192.168.241.0 -mask 255.255.255.0
この場合,/usr 以下の任意の場所を指定してマウントが可能になります.指定したディレクトリ以下全てを公開可能,NFS を提供するネットワークにセキュリティ上の懸念が少ない事等を判断して利用してください.
ちなみに,RedHat Enterprise Linux の NFS はこの動きがデフォルトのようです.
root ユーザアクセスの制御
オプションを指定しない場合,NFS クライアント上の root(UID: 0) ユーザのアクセスは UID/GID は -2:-2 という扱いになり,通常は nobody:nobody にマップされます.その為,NFS クライアント側で root 権限を持っていても NFS サーバ上の root が所有者のファイルは編集できません.これは NFS v2/v3 での認証機能が殆どない事によるセキュリティ担保の意味も含まれています.
信頼できるネットワークやホストからの root アクセスを許可する場合,-maproot オプションを使って明示的に許可する必要があります.
次の例は,/pub に対する 192.168.241.0/24 のネットワークからの root アクセスは,root ユーザで処理する設定となります.ただし,/usr には -maproot オプションをつけていない為,root アクセスは nobody にマップされたままとなります.
/usr -network 192.168.241.0 -mask 255.255.255.0 /pub -maproot=root -network 192.168.241.0 -mask 255.255.255.0
-maproot オプションに個別のユーザアカウントを指定する事で,root アクセスの変換先を指定可能です.指定の方法によって,NFS アクセス時のマッピングが変化しますので注意してください.
- -maproot=[user]
このようにユーザ名のみを指定した場合,指定されたユーザが所属するプライマリグループが含まれます.ユーザが所属するグループのいずれかが読み書きの権限を付与されたファイルはアクセスが可能となります.
ドキュメント上はユーザが所属する全てのグループが含まれると記載があるのですが,9.2-RELESAE ではそのような動作はしませんでした.
- -maproot=[user]:[group1]:[group2]
このようにユーザ名とグループを指定した場合,ここで明記されたグループのみが含まれます.ユーザおよび,指定されたグループに対する権限を付与されたファイルに対してのアクセスが可能となります.
- -maproot=[user]:
このように,ユーザ名のみ指定で最後をコロンで終えた場合,UID 変換は行われますが,GID の変換は行われません.その為,指定したユーザの UID に変換されるのですが,GID は 0(wheel) のままとなります.
ドキュメントでは,指定したユーザに関する完全な資格と区別する為に利用すると記載されており,その場合,ユーザ名のみ変換され,グループは一切含まれない挙動になるべきなのですが,そのような動作とはなりませんでした.
例として,次のような環境での挙動を確認してみます.
# id seichan<br />uid=1000(seichan) gid=1000(seichan) groups=1000(seichan),10000(users) # ls -l /pub drwxrwxr-x 2 root operator 512 Jan 6 10:56 .snap -rw-r----- 1 root wheel 0 Jan 6 10:57 file1 -rw-r----- 1 seichan seichan 0 Jan 6 10:57 file2 -rw-r----- 1 seichan wheel 0 Jan 6 10:57 file3 -rw-r----- 1 root seichan 0 Jan 6 10:57 file4 -rw-r----- 1 root users 0 Jan 6 10:58 file5
パターン1: -maproot が存在しない場合
/pub -network 192.168.241.0 -mask 255.255.255.0
-maproot が存在しない場合,root アクセスは nobody ユーザの権限行われますので,NFS クライアント上の root ユーザアクセスは次のように全てのファイルが Permission denied で読み取りに失敗します.
# cat file1 cat: file1: Permission denied # cat file2 cat: file2: Permission denied # cat file3 cat: file3: Permission denied # cat file4 cat: file4: Permission denied # cat file5 cat: file5: Permission denied
パターン2: -maproot=seichan の場合,NFS サーバ上の seichan ユーザ及び seichan が所属するプライマリグループがマッピングされますので,ファイルオーナが seichan のものもしくはグループオーナが seichan のファイルの読み取りは可能となります.
/pub -maproot=seichan -network 192.168.241.0 -mask 255.255.255.0
# cat file1 cat: file1: Permission denied # cat file2 # cat file3 # cat file4 # cat file5 cat: file5: Permission denied
パターン3: -maproot=seichan: の場合,NFS サーバ上の seichan ユーザにマッピングされ,GID はそのままわたってしまいます.その為,ファイルオーナが seichan のもの,もしくはグループオーナが wheel のファイルの読み取りが可能となります.
/pub -maproot=seichan: -network 192.168.241.0 -mask 255.255.255.0
# cat file1 # cat file2 # cat file3 # cat file4 cat: file4: Permission denied # cat file5 cat: file5: Permission denied
パターン4: -maproot=seichan:seichan:users の場合,NFS サーバ上の seichan ユーザが所有するファイル,グループが seichan 及び users のファイルの読み取りが可能となります.
/pub -maproot=seichan:seichan:users -network 192.168.241.0 -mask 255.255.255.0
# cat file1 cat: file1: Permission denied # cat file2 # cat file3 # cat file4 # cat file5
-maproot オプションはこのように指定する値によって挙動が変わりますので,もし個別のユーザアカウントにマップさせたい場合等の場合,挙動をあらかじめ確認してからサービスリリースするように心がけましょう.
全てのユーザアクセスの制御
先のオプションは -maproot と,root アクセス時の制御を行いましたが,NFS クライアント側のユーザアカウント及び UID にとらわれず,全てのアクセスを特定の ID にマップさせることも可能です.-mapall オプションがその機能を実現します.
-mapall オプションは -maproot オプションと同じ形式の指定が可能で,動作も同様の動作となります.
以上,駆け足ではありますが,/etc/exports 詳解でした.これは NFSv2/NFSv3 の基本的な場合となりますので,今後はセキュリティや NFSv4 等を改めて纏めてみたいとおもいます.


関連記事
-
-
データは何処に旅立った?
さて,でーたがとんだ?で報告した PostreSQL のデータですが,どうやら彼方へ旅立っていたよう
-
-
PHPki で簡単証明書運用 (1) 【PHPki の修正と導入 (修正版)】
Seichan です.こんばんわ. 先日「PHPki で簡単証明書運用 (1)」を書いたのですが、
-
-
PHPki で簡単証明書運用 (5) 【管理ユーザのメンテナンスとCRLの取得】
Seichanです.こんばんわ. いつものとおり,だいぶ日が経ってしまいました... 先日の「P
-
-
仕事中ですが臨時のカキコです
本日,仕事中にも関わらず,某社勤務の Seichan が Blog に記事を投稿するという暴挙に打っ
-
-
pukiwiki を PHP 5.4 に対応させる方法 (2)
Seichan です.こんばんわ. pukiwiki を PHP 5.4 に対応させる方法 (1)
-
-
FreeBSD は / から ZFS 化出来るらしいよ
Seichan です.とりあえずよさげなサイトを見つけたので,めもめも.http://www.ish
-
-
やっぱ HDD は壊れてた…
もうね.駄目 orz 手持ちの 40GB と交換する事も考えたが… 時間がねー