■ アカウント管理関係メモ



アカウント管理について

■さて、例えば研究室にクライアントPCが40台近くあって、それぞれのクライアントPCの"/etc/passwd"レベルで管理する環境は、どー考えても大変だろ?それに、個人的なデータをそれぞれのPCに分散して管理をするのは、ユーザー側でも大変だろ?NIS(Network Information Services)を使ってちゃちゃっとアカウントを統一管理し、どのクライアントPCを使用しても同じアカウントでログインできるように構築しようぜ。それにhomeディレクトリを一括管理するためにNFS(Network File System)も導入しちゃえ。ユーザーの個人データをサーバで管理できれば後でなんかあった時に文句も言われないしな。ネットワークレイテンシとかが問題になるかもしれない?んなもんほっとけ。一応これまで運用してきたけど、先の例の規模ぐらいなら特に問題なし。まぁ、これらNIS、NFSの導入がとても簡単だというのが導入する最もな理由であるのはここだけの秘密。



NIS

■さて、NISでアカウントを管理するために、いろいろあるらしいが、今回はYPSERVとYPBINDを用いて管理するよ。だって簡単そうだし、安定しているし。ここじゃサーバ側の設定のみ挙げる。もしクライアント側のYPBIND設定も知りたいって時は、クライアント設定を見てくれや。

■まず、YPSERVをインストール。簡単だぜ〜。次のコマンドでやれ。ちなみにGentooでサーバ組むならWheelユーザーに追加しないとsuコマンドではなれないぜ。その方法は他であたってくれや。


$ su になる     #なんらかの方法で

# emerge -pv ypserv    #依存関係やUSEフラグの確認
# emerge ypserv    #入れろ

これだけや。本当に簡単だろ?このYPSERV、portmapperが必要なんだがGentooではデフォルトで入っていねぇ。だがな、入っていなくても自動的にそれを同時に入れてくれるのが本当にGentooのいいところだ。おぉっとあせんなって。これからの作業をする前に、portmapperを起動しておけよ。あ〜でも、ypservの起動スクリプトにportmapperが要求されているから、大丈夫か。まぁ以下のコマンドはNFSでも必要だから打っとけ。間違いない。


$ su になる     #なんらかの方法で

# rc-update add portmap default    #起動スクリプトをデフォルトランレベルに追加

■念のためにアクセス制限をかける。"/etc/hosts.deny"と"/etc/hosts.allow"を以下のように設定。

#/etc/hosts.deny

portmap: ALL
ypserv: ALL


#/etc/hosts.allow

portmap: 192.168.*.
ypserv: 127.0.0.1 192.168.*.

その他何かサービスがあれば、ここにそれぞれ記述する。

■NISでは、NISドメイン内にデータを流す。Gentooの場合、そのドメイン名は"/etc/conf.d/ypserv"内に次のように指定する。

#/etc/conf.d/ypserv

# そこそこ分かりにくい名前にする

YP_DOMAIN=NISDOMAINNAME

誰にでも見ることができるが、特に誰もみねーだろ。って、誰にも見られないからって変な名前を付けるなよ。

■続けてYPSERVの設定ファイルの設定。"/etc/ypserv.conf"を見てみそ。次のようなもの。

#/etc/ypserv.conf

# 変えるべきところのみ

# ポート制限(1024以下のみ)をかけypcatしても見れなくする(shadowを使う時は注意!)
Host                : Domain    : Map                   : Security
192.168.*.0/24    : *            : passwd.byname     : port
192.168.*.0/24    : *            : passwd.byuid        : port

# shadowファイルにポート制限をかける
192.168.*.0/24    : *            : shadow.byname     : port

みたいに設定を行う。見ての通り、NISデータを流す範囲や制限内容を指定する。

■これで、設定ファイルは完璧だろう。上の設定が終わったら、その内容を反映させるぜ。おぉっとその前にYPSERVのMakefileを編集しないとな。"cd /var/yp/"してカレントを移動。そこでMakefileを修正。まず、shadowパスを流すなら、"merge"しないようにする。"MERGE_PASSWD=false"とかで。マージするようにすると、Ignoreし、うまくシャドウ化できないみたい。さらに、ずーと下のほうに、パスワードやホストなど、どういったデータを流すか編集できる。特に、特別なことをしない限りは"passwd","host","portmap","shadow"等でまったく問題ないので、その他の項目はちゃちゃっとコメントアウトしちゃいましょう。後はそれを反映させるだけ。


$ su になる     #なんらかの方法で

# cd /var/yp
# make    #NISデータ作成

ここで特にエラーはでないはず。でしょ?

■さてここいらで、YPSERVのサービスを開始する。


$ su になる     #なんらかの方法で

# /etc/init.d/ypserv start
# rc-update add ypserv default

■ここで設定は完了。サーバにはYPBINDを入れる必要がないと思うけど、ypcat等のコマンドを検証のため使用したいなら、入れてもいいと思う。んで、他のクライアントPC(当然YPBIND入り)などから"ypcat passwd"してきちんと流れてくるかどうか試してみましょう。以上です。

■これで完璧と思うなよ。って次の設定をしても完璧とは限らないが、やらないよりましだろ。セキュリティのことを考えるなら、やっぱりNISデータをシャドウで流そうぜ。クライアントから"ypcat"ってみろや。内部からは暗号化されたパスワードがユーザーにも丸分かりだろ?ハックされちまえってな感じで。問題だろ?俺の爺さんのまた爺さんに話を聞くと、過去のヴァージョンじゃシャドウ化するとうまくログインできなかったらしい。しかし世の中変わるの早いもんだ。現在のヴァージョンでは問題ないぜ。ホント感謝もんだな。ありがたく設定しようぜ。

(■ちなみに、今のLinuxシステムじゃあ、たいていローカルのパスワードファイルはシャドウ化されてるぜ。気づかなかったのか?"/etc/passwd"見ろや。それぞれの行の2列目が"x"とか"!"とかで隠されているだろ?ならシャドウ化されてるぜ。それに"/etc/shadow"も見ちゃえ。暗号化されたパスワードがたんまり入っているだろ?パスワードの実体がROOTしか参照できない"/etc/shadow"に保存されて他のユーザーは見れないってわけだ。余談だ。閑話休題。)

■んじゃ、実際にNISのパスワードデータをシャドウ化してみるぜ。"/var/yp/Makefile"でpasswd.bynameやgroup.bynameとシャドウファイルをマージさせないようにしろ。ようは40行目あたりのそれぞれの項目を"MERGE=true"から"MERGE=false"にしろ。こうしないと、"make"してもshadow.bynameはpasswd.bynameからマージされ、Ignoredされてしまうぜ。んで作成されない。無視されただけじゃんって思うならクライアントからログイン試してみろ。できねーだろ?おぉっとサーバローカルからは自分のpasswdを見るからログインは当然できるぜ。クライアントから試せ。マージさせないようにすれば、"make"できちんとshadow.bynameが作成されるから安心しろ。それで試すとうまくいくだろ?でも意外に落とし穴があったりする。それが次の症状だ。俺も経験済みだ。

■シャドウ化して"make"した後、実際にクライアントからログインしてみると、何だよこれ!こんな感じにならなかったか?


[ I have no name!@HOSTNAME: ~]$

はい、そこの人!うげぇっと思う前に受けなかったか?これ見て。一応どーなっているのか見てみよーぜ。そのユーザーで"id"コマンドで見てみると、きちんとUIDは取得できてるだろ?じゃあ、"ypcat"してみよーぜ?何にもエコーないだろ?そりゃ名無しになるわな。いろいろネットで調べてみたけど、海外サイトでもあんましねーんだわ、ネタが。あるにはあったけど、ドイツ語みたいので未解決とか。で俺が予想するに多分、"/etc/ypserv.conf"でshadow.bynameをport制限かけてねぇーか?これコメントアウトしてみて"make"かけてみよーぜ。うまくいかねーか?俺はこれが原因だった。そもそもshadow.bynameはユーザーレベルでは"ypcat"できない(みたい)。だから特にPORT制限をかける必要はないと思うわけよ。

■NISについては以上だ。まぁ何とか形になっただろ?後は自分で勉強してくれや。



NFS

■まず、カーネルのNFSサーバ機能が必要なんだわ、NFSには。だから次の項目が無効になっていれば、カーネル再構築をする必要がある。面倒だが仕方ない。やれ。その項目とは

File Systems
       →[*]Network File Systems
             →[*]NFS Server Support

[*]Provide NFSv3 Server Support

だ。これを組み込みか、モジュール化すればいい。面倒だろ?組み込んじまえ。問題ない。んで、インストール。


$ su になる     #なんらかの方法で

# emerge -pv nfs-utils    #依存関係やUSEフラグ確認
# emerge nfs-utils    #入れちゃえ

■次に、"/etc/exports"にNFSで共有するディレクトリとそのネットワーク、さらに同期方法などを指定する。こんな感じだ。

#/etc/exports

# 共有するディレクトリ名                   ネットワーク範囲(オプション)
/SHAREDIRECTORYNAME                   192.168.*.0/24(rw,async)

調べちゃいねーが、オプションは"/etc/fstab"で使用できるものと同じだろう、多分。

■んで、


$ su になる     #なんらかの方法で

# /etc/init.d/nfs start
# rc-update add nfs default

で問題ない。

■後は、クライアント設定に。ただ、今回NFSで集中管理をするのが、homeディレクトリになるので、その注意は必要。だって、クライアントPCがサーバのhomeをそのままマウントすると、ローカルでの物置場所(あくまでhomeという名前にこだわった場合)がなくなってしまう。だから、NFSにしろ、ローカルにしろ、別々にユーザーの物置場所を確保する必要はあると思う。それは、どっちでも問題ないでしょう。ユーザーも使っておけばなれるだろうし。