↑ホームへ戻る

最早1年に何件更新があるかという状況なので、何かあったら折に触れて更新しようと思います。


04年04月08日(Thu)

 計算機群のNISによるユーザ管理

研究室に計算機が増えてきたのと、利用するユーザが増えてきたため一括してユーザ管理できるようにしたいと思います。そこで、NISを使ったユーザ管理環境を構築することにします。環境・状況・目的は以下のとおり。

  1. 複数台の計算機が存在し、ユーザ管理を一元化したい。
  2. 各計算機は、既にIPmasqueradeによってネットワーク接続されている。
  3. ついでなので、現在のgatewayサーバをNISサーバで兼用してしまう。
  4. 各ユーザは大サイズのファイル出力をするので、NISサーバへのファイル共有と書き戻しをせず、各NISクライアントのローカルにホームディレクトリを確保する。

幸いなことに、怠惰な管理人により全ての計算機(とサーバ)がVineLinux2.5(or6)で統一されているため、各計算機ごとの環境に大きな違いがありませんでしたが、そうでなくても基本的に大きく作業手順が異なることは無いでしょう。

さて、各計算機は既にIPmasqueradeによってネットワーク接続されており、それぞれ固有のプライベートアドレスとマシン名を持っています。gateway下の計算機群は、キーボード・マウス・モニタを取り払ってサーバからしかアクセスできなくしてあるので、今回はそのサーバにNISサーバも兼任させます。

passwd/shellの変更についてはgatewayがNISを兼任しているので、NISサーバ上で変更してもらうことにして、今回はyppasswdはサービスしません。fingerは元々全てのマシンでサービスしていません。

基本的な作業の流れとしては、

  1. NISサーバの構築
  2. NISクライアントの設定
  3. a: ユーザの追加
  4. b: 計算機の追加

という流れになります。今回はこちらのサイトを見ながら、ほぼ書いてあるそのままの手順で作業しました。少し変わっているのは、クライアントごとにローカルなホームディレクトリを確保している点ですが、その方法についてはユーザの追加計算機の追加で解説しています。


 NISサーバの設定
NISサーバ構築の手順は、

  1. portmapperの起動
  2. (ypserv・yptoolsのインストール)
  3. NISドメイン名設定
  4. サーバの起動とデータベース作成
  5. (ユーザ追加とデータベース更新)

という流れになります。

Vine2.5においては既に起動していましたが、まずは、portmapが起動しているか確認し、動いていなければ起動します。

[確認]
$ rpcinfo -p
[起動していれば以下のように出力されます]
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
[起動してなければ以下を実行]
$ service portmap start

次にNISドメイン名を決めて、その設定と確認。設定したら再起動後も自動設定されるようにします。NIS関係のパッケージがインストールされてなければ、apt-get installなどを利用してypserv,ypbind,yp-toolsを適宜インストールしておきます。

[設定]
$ ypdomainname NISドメイン名
[確認]
$ ypdomainname 
NISドメイン名

[確認できたら/etc/sysconfig/network に以下の行を追加] NISDOMAIN="NISドメイン名"

それがすんだら、NISサーバを起動して、NISデータベースを作成します。ユーザを追加した都度、NISデータベースは作成しなおします。

$ service ypserv start 
Starting YP server services: [  OK  ]

[起動できたらNISデータベースの作成]
$ /usr/lib/yp/ypinit -m

At this point, we have to construct a list of the hosts which will run NIS
servers.  kohaku.biology.tohoku.ac.jp is in the list of NIS server hosts.  Please continue to add
the names for the other hosts, one per line.  When you are done with the
list, type a .
        next host to add:  サーバのドメイン名
        next host to add:  [特に追加するサーバが無ければCtrl+D]
The current list of NIS servers looks like this:
サーバのドメイン名
Is this correct?  [y/n: y]  y [正しければy]

We need some  minutes to build the databases...
Building /var/yp/NISドメイン名/ypservers...
Running /var/yp/Makefile...
gmake[1]: 入ります ディレクトリ `/var/yp/NISドメイン名'
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating rpc.byname...
Updating rpc.bynumber...
Updating services.byname...
Updating services.byservicename...
Updating netid.byname...
Updating protocols.bynumber...
Updating protocols.byname...
Updating mail.aliases...
gmake[1]: 出ます ディレクトリ `/var/yp/NISドメイン名'


$ cd /var/yp
$ make


gmake[1]: 入ります ディレクトリ `/var/yp/NISドメイン名'
Updating netid.byname..


 NISクライアントのセットアップ
NISクライアント構築の手順は、

  1. portmapperの起動
  2. (ypbind・yptoolsのインストール)
  3. NISドメイン名設定
  4. (NISサーバの指定IPアドレス指定)
  5. (ホスト名の解決)

という流れになります。

portmapperの起動はNISサーバの設定のときとまったく同じです。

NISサーバで決めたNISドメイン名の設定と確認。設定したら再起動後も自動設定されるようにします。NIS関係のパッケージがインストールされてなければ、apt-get installなどを利用してypbind,yp-toolsを適宜インストールしておきます。

[設定]
$ ypdomainname NISドメイン名

[確認]
$ ypdomainname 
NISドメイン名

[確認できたら/etc/sysconfig/network に以下の行を追加]
NISDOMAIN="NISドメイン名"

NISサーバのIPアドレスを設定しなかった場合、ブロードキャストで拾いに行きますが、サーバのIPアドレスが決まっているなら指定しておきます。またホスト名の解決にNISを利用するなら、解決順番の指定をします。

[/etc/yp.conf に以下の行を追加]
ypserver NISサーバのIPアドレス

[/etc/host.conf の書き換え]
order nis,hosts,bind

[/etc/nsswitch.conf の書き換え]
passwd:    db files nisplus nis
shadow:    db files nisplus nis
group:     db files nisplus nis

#passwd:     files
#shadow:     files
#group:      files

hosts:     db files nisplus nis dns
#hosts:      files dns

設定が終わったらypbindを起動します。再起動後に自動で起動するための設定もしておきます。

[起動]
$ service ypbind start 

[確認]
$ ypcat passwd 
order NISサーバのパスワードの一覧が参照できればOK。

[自動起動の設定 (runlevel=3で起動するとき)]
$ ln -s /etc/init.d/ypbind /etc/rc3.d/S96ypbind 


 ユーザの追加

NISのユーザ追加の手順は、

  1. NISサーバ上でadduser
  2. NISデータベースの更新
  3. NISクライアント上のホームディレクトリ作成
という手順になります。

NISサーバ上でadduserしてユーザを追加したあとは、NISサーバ構築と同じ手順でNISデータベースの更新を行います。

$ cd /var/yp
$ make

NISクライアント上にホームディレクトリを作成する際には、ローカルに同名のユーザやグループが登録されていないことに注意が必要です。NISサーバとクライアントでUID/GIDがずれていると、ファイルへのアクセス違反等のトラブルが生じます。クライアント上に同名のユーザ/グループが存在するときには、クライアントの/etc/passwdや/etc/groupから該当するエントリを削除しておきます。

NISクライアント上にホームディレクトリを作成した後、NISサーバに登録されているUID:GIDに所有権を変更する必要があります。そのため、かならずypbindが起動していなければなりません。全計算機に対して処理するので、以下のようなスクリプトを利用してやると作業が効率化できるでしょう。

#!/usr/bin/perl
#
# 計算機全部にユーザのホームディレクトリの作成(mknishome.pl)

if(@ARGV != 1) { die print "ユーザ名を引数に指定\n\n"; }
else { $USR = @ARGV[0]; }
# 計算機リスト
@IPS = 
    (
     "計算機1",
     "計算機2"
     );
# 各マシンに実行
#
foreach (@IPS){
  system("echo [ $_ ];
          ssh -l sudoが利用できるユーザ $_ \"
                           sudo cp -ru /etc/skel /home/$USR;
                           sudo chown -R $USR:$USR /home/$USR/
                         \" ;
  ");

}
#End of Script

[実行]
$ ./mknishome.pl ユーザ名 


 計算機の追加(NISクライアントの追加)
NISの計算機の追加手順は、

  1. NISクライアントのセットアップ
  2. NISユーザのホームディレクトリ作成
という手順になります。

NISクライアントのセットアップは上記「NISクライアントの設定」を参照してください。

ユーザの追加のときと同様に、NISクライアント上にホームディレクトリを作成した後、NISサーバに登録されているUID:GIDに所有権を変更する必要があります。そのため、かならずypbindが起動していなければなりません。全ユーザに対して処理するので、以下のようなスクリプトを利用してやると作業が効率化できるでしょう。

#!/usr/bin/perl
#
# 計算機全部にユーザのホームディレクトリの作成(mknishome.pl)

if(@ARGV != 1) { die print "計算機名を引数に指定\n\n"; }
else { $MACHINE = @ARGV[0]; }
# 計算機リスト
@USR = 
    (
     "ユーザ1",
     "ユーザ2"
     );
# 全ユーザを追加
#
foreach (@USR){
  system("echo [ $_ ];
          ssh -l sudoが利用できるユーザ $MACHINE \"
                           sudo cp -ru /etc/skel /home/$_;
                           sudo chown -R $_\:$_ /home/$_/
                         \" ;
  ");

}
#End of Script

[実行]
$ ./mknishome.pl 計算機名 




↑ホームへ戻る