LPIC level2 リベンジ!! 第4日 『NFSサーバの設定』
ちょっと日にちが空いてしまいました。すいません。
本日から「主題209:ファイルとサービスの共有」対策をお送りします。
今回を入れて多分4回くらい(NFSサーバ2回、Sambaサーバ2回)になると思います。
まず今回は「NFSサーバの設定」についてです。
NFS(Network File System)はネットワーク越しにファイルのマウントを実現する仕組みです。
NFSクライアント(NFSサーバを利用する側)はNFSサーバ上のディスクリソースを、あたかもローカルシステムかのように扱うことができます。
NFSはもともとサン・マイクロシステムズが開発した技術であり、性能の安定性という点ではSolarisが優位な気がしますが、LinuxのNFSサーバも十分利用できると思います。
◇NFSサーバの導入◇
CentOSでNFSサーバを利用する場合はyumコマンドでnfs-utilsをインストールします。
インストールが完了したらサービスを開始します。同時にchkconfigから自動起動もONにしておくと、次回からOS起動と同時にサービスが立ち上がってくれます。また、NFSサーバを立ち上げるためにはportmapサービスが起動している必要があるようですので、合わせて起動しておきます。
◇NFSサーバの設定◇
NFSサーバの設定ファイルは/etc/exportsです。
/etc/exportsには公開するディレクトリ名、公開するクライアント、(オプション)の順で記述します。
以下は今回作成した設定ファイルの内容です。
/etc/exports
どの行も192.168.19.0のネットワークにあるクライアントからの接続に対して読み書きの許可を与える設定です。/etc/exportsを修正したらexportfsコマンドを実行して、設定を反映させます。
またエクスポートさせるディレクトリの権限・所有者は以下のようになっています。
さて、この状態でNFSクライアントからの接続を行ってみます。(今回はNFSサーバとNFSクライアントを同一マシンとして作業を行いました。)
NFSサーバがどのディレクトリをエクスポートしているかは、showmountコマンドを使用して確認することができます。
NFSリソースのマウントは通常のマウントと同様にmountコマンドで行います。オプションは「-t nfs」とします。(/etc/fstabに記述すれば、OS起動時に自動でマウントしてくれます)
コマンド実行後、dfコマンドでマウントしていることを確認します。
マウントが完了したので、実際にマウントしたディレクトリに読み書きの操作を行ってみます。
都合上、ユーザをkyontoraに切り替えておきます。
さて、ここで問題です。ユーザkyontoraで/mnt1、/mnt2、/mnt3へファイル作成操作を行った場合に失敗するディレクトリが一つあります。それはどれでしょうか?
正解は/mnt1です。解説をする前にまずはコマンドの結果を載せておきます。
エラー内容からわかるように、失敗の原因は権限です。では、権限のどこに問題があるかを見てみましょう。
作成に成功したものについて、作成されたファイルの権限はつぎのようになっています。
今回、NFSサーバとNFSクライアントが同じホスト上であったのでわかりずらいかも知れませんが、NFSクライアント上のユーザkyontoraがファイルを作成したのはNFSサーバ上のディレクトリです。にもかかわらず、作成されたファイルのオーナーはNFSクライアントのユーザです。
次回以降で紹介するSambaは作成されたファイルのオーナーはSambaサーバ上のユーザになりますが、NFSではNFSクライアントのユーザ(UID)で作成されることに注意してください。つまり、NFSサーバでリソースをエクスポートする場合、エクスポートするディレクトリにはNFSクライアントが使用するユーザ(UID)に対して権限をつけてやる必要があります。
今回の例では/mnt3はディレクトリの権限を777にしてあるのですべてのユーザ(UID)に対して書き込み権限があり、/mnt2は権限は755ですが、ディレクトリのオーナーをkyontora(NFSクライアントのユーザと同じUID)にしていたので書き込みが可能でした。
さて、ではNFSクライアントがrootユーザで接続してきた場合にはNFSサーバ上でもrootユーザとしてファイル操作が行われるのでしょうか?
NFSクライアントのユーザをrootとして、再度マウントしたディレクトリに書き込みテストをしてみます。
なんと、/mnt3しか書き込みに成功しませんでした。/mnt1も/mnt2もrootユーザに対して書き込み権限があるのですが、なぜ失敗したのでしょうか?
作成に成功したファイルの属性を確認すると、実はrootユーザとして作成していなかったことがわかります。
実はNFSクライアントがrootユーザとしてNFSサーバへアクセスした場合、root権限を許可することはセキュリティ上危険であるという考えの下、匿名ユーザ権限として操作を行っていたのです。(これはNFSサーバのオプションの規定値であり、オプションによってはroot権限のまま操作を行うことも可能です。)
/etc/exportsのオプションの一部を紹介しておきます。
/etc/exportsのオプションは複数設定することができます。また、ひとつの公開ディレクトリに対して異なるクライアントに対して別々のオプションを設定することも可能です。
次回はNFSクライアントのマウントオプションについてちょこっと紹介してから、LPICオリジナル練習問題を掲載します。
それから、やっぱり試験日を延期しました。。
1月は都合がつかなそうなので2月予定です。
本日から「主題209:ファイルとサービスの共有」対策をお送りします。
今回を入れて多分4回くらい(NFSサーバ2回、Sambaサーバ2回)になると思います。
まず今回は「NFSサーバの設定」についてです。
NFS(Network File System)はネットワーク越しにファイルのマウントを実現する仕組みです。
NFSクライアント(NFSサーバを利用する側)はNFSサーバ上のディスクリソースを、あたかもローカルシステムかのように扱うことができます。
NFSはもともとサン・マイクロシステムズが開発した技術であり、性能の安定性という点ではSolarisが優位な気がしますが、LinuxのNFSサーバも十分利用できると思います。
◇NFSサーバの導入◇
CentOSでNFSサーバを利用する場合はyumコマンドでnfs-utilsをインストールします。
# yum install nfs-utils |
インストールが完了したらサービスを開始します。同時にchkconfigから自動起動もONにしておくと、次回からOS起動と同時にサービスが立ち上がってくれます。また、NFSサーバを立ち上げるためにはportmapサービスが起動している必要があるようですので、合わせて起動しておきます。
# chkconfig portmap on |
◇NFSサーバの設定◇
NFSサーバの設定ファイルは/etc/exportsです。
/etc/exportsには公開するディレクトリ名、公開するクライアント、(オプション)の順で記述します。
以下は今回作成した設定ファイルの内容です。
/etc/exports
/share1 192.168.19.0/255.255.255.0(rw) |
# exportfs -ar |
またエクスポートさせるディレクトリの権限・所有者は以下のようになっています。
# ls -Ald /share* |
さて、この状態でNFSクライアントからの接続を行ってみます。(今回はNFSサーバとNFSクライアントを同一マシンとして作業を行いました。)
NFSサーバがどのディレクトリをエクスポートしているかは、showmountコマンドを使用して確認することができます。
# showmount -e 192.168.19.219 |
NFSリソースのマウントは通常のマウントと同様にmountコマンドで行います。オプションは「-t nfs」とします。(/etc/fstabに記述すれば、OS起動時に自動でマウントしてくれます)
# mount -t nfs 192.168.19.219:/share1 /mnt1 |
コマンド実行後、dfコマンドでマウントしていることを確認します。
# df |
マウントが完了したので、実際にマウントしたディレクトリに読み書きの操作を行ってみます。
都合上、ユーザをkyontoraに切り替えておきます。
# su - kyontorar |
さて、ここで問題です。ユーザkyontoraで/mnt1、/mnt2、/mnt3へファイル作成操作を行った場合に失敗するディレクトリが一つあります。それはどれでしょうか?
正解は/mnt1です。解説をする前にまずはコマンドの結果を載せておきます。
$ touch /mnt1/test1.txt |
エラー内容からわかるように、失敗の原因は権限です。では、権限のどこに問題があるかを見てみましょう。
作成に成功したものについて、作成されたファイルの権限はつぎのようになっています。
-rw-rw-r-- 1 kyontora kyontora 0 1月 18 22:18 /mnt2/test2.txt |
今回、NFSサーバとNFSクライアントが同じホスト上であったのでわかりずらいかも知れませんが、NFSクライアント上のユーザkyontoraがファイルを作成したのはNFSサーバ上のディレクトリです。にもかかわらず、作成されたファイルのオーナーはNFSクライアントのユーザです。
次回以降で紹介するSambaは作成されたファイルのオーナーはSambaサーバ上のユーザになりますが、NFSではNFSクライアントのユーザ(UID)で作成されることに注意してください。つまり、NFSサーバでリソースをエクスポートする場合、エクスポートするディレクトリにはNFSクライアントが使用するユーザ(UID)に対して権限をつけてやる必要があります。
今回の例では/mnt3はディレクトリの権限を777にしてあるのですべてのユーザ(UID)に対して書き込み権限があり、/mnt2は権限は755ですが、ディレクトリのオーナーをkyontora(NFSクライアントのユーザと同じUID)にしていたので書き込みが可能でした。
さて、ではNFSクライアントがrootユーザで接続してきた場合にはNFSサーバ上でもrootユーザとしてファイル操作が行われるのでしょうか?
NFSクライアントのユーザをrootとして、再度マウントしたディレクトリに書き込みテストをしてみます。
# touch /mnt1/test1_2.txt |
なんと、/mnt3しか書き込みに成功しませんでした。/mnt1も/mnt2もrootユーザに対して書き込み権限があるのですが、なぜ失敗したのでしょうか?
作成に成功したファイルの属性を確認すると、実はrootユーザとして作成していなかったことがわかります。
-rw-r--r-- 1 nfsnobody nfsnobody 0 1月 18 22:46 /mnt3/test3_2.txt |
実はNFSクライアントがrootユーザとしてNFSサーバへアクセスした場合、root権限を許可することはセキュリティ上危険であるという考えの下、匿名ユーザ権限として操作を行っていたのです。(これはNFSサーバのオプションの規定値であり、オプションによってはroot権限のまま操作を行うことも可能です。)
/etc/exportsのオプションの一部を紹介しておきます。
オプション | 説明 |
ro | 読み込み専用でエクスポートします。(規定値設定) |
rw | 読み書き許可を与えエクスポートします。 |
root_squash | NFSクライアントからrootでアクセスされた場合に匿名ユーザとしてファイル操作を行います。(規定値設定) |
no_root_squash | NFSクライアントからrootでアクセスされた場合にrootとしてファイル操作を行います。 |
all_squash | すべてのユーザでのアクセスを匿名ユーザとしてファイル操作を行います。 |
no_all_squash | すべてのユーザのアクセスをそのままのユーザ(UID)としてファイル操作を行います。 |
anonuid=nn | すべてのユーザのアクセスをUID=nnとしてファイル操作を行います。 |
anongid=nn | すべてのユーザのアクセスをGID=nnとしてファイル操作を行います。 |
/etc/exportsのオプションは複数設定することができます。また、ひとつの公開ディレクトリに対して異なるクライアントに対して別々のオプションを設定することも可能です。
/share1 192.168.19.0/255.255.255.0(rw) |
次回はNFSクライアントのマウントオプションについてちょこっと紹介してから、LPICオリジナル練習問題を掲載します。
それから、やっぱり試験日を延期しました。。
1月は都合がつかなそうなので2月予定です。