ユーザ管理,バックアップ,ホスト監視,トラブルシュートの4つの作業に的をしぼり,UNIX系OSをターゲットにして,その作業内容とそこで用いることのできる基本的なテクニックについて解説します。

Last-Modified: 2003/02/20 15:55

NetworkingTips

はじめに

ネットワーク管理という言葉を聞いて,みなさんはどのような業務内容を想像するでしょうか。中には管理者=トラブルシュータというイメージを持ち,安定したシステムでは管理者は不要であると考える方もおられるかもしれません。

しかし,ネットワーク管理の実際は「トラブルを発生させずに安定して運用する」および「トラブルが発生したときにすばやく現状復帰する」ことを実現するための,地道な作業の積み重ねなのです。

本稿では,ユーザ管理,バックアップ,ホスト監視,トラブルシュートの4つの作業に的をしぼり,UNIX系OSをターゲットにして,その作業内容とそこで用いることのできる基本的なテクニックについて解説していきます。

新規ユーザの登録

新年度など異動シーズンにネットワーク管理者が行わなければならないならない最大の仕事はおそらく新規ユーザの登録でしょう。新規ユーザの登録はOSや認証方式によらず,おおむね次のような作業が必要になります。

  1. 認証用DBへのユーザアカウントの追加
  2. ホームディレクトリなど,ユーザ専用ディレクトリの作成およびアクセス権の設定
  3. ログイン時の処理など,各種設定ファイルの雛型のホームディレクトリへのコピー

認証方式によっては1.〜3.の作業を別々のマシンに対して行う必要があるかもしれませんし,1.の作業を複数のデータベースに対して行う必要がある場合もあります。

ここでは,FreeBSDおよびDebian GNU/Linuxでのユーザ登録について,手動で行う方法,対話式に半自動で行う方法,バッチ処理で行う方法をそれぞれ解説します。

手動でユーザ登録を行う方法

最初に,作業の流れを確認する意味も含めて手動でユーザ登録を行う方法を見ていきましょう。

認証用DBへのユーザアカウントの追加

手動でユーザ登録を行う場合には,まず認証データベースである/etc/passwdファイルへのアカウントの追加を行います。/etc/passwdはテキストファイルですが,作業中にほかのユーザがpasswdコマンドなどを使用しても良いように,必ずvipwコマンドを用いて編集するようにしてください。

/etc/passwdは図1の書式をとり,UIDにはほかのアカウントと重複しない正の整数を,GIDにはアカウントが標準で所属するグループ(プライマリグループ)のIDを,GECOSにはカンマ区切りでユーザのフルネームや連絡先を,それぞれ記入し,ホームディレクトリやシェルはフルパスで記入するようにします。なおシェルは/etc/shellsに記載されているものから選ぶようにしてください。

ログイン名:パスワード:UID:プライマリグループのGID:GECOS:ホームディレクトリ:SHELL

図1 /etc/passwdの書式

パスワード欄には暗号化したパスワードを記入する2)のですが,とりあえずログイン禁止を示す‘*’を記入しておき,後でpasswdコマンドでパスワードを設定するようにすれば良いでしょう。

グループのIDは/etc/groupで定義されています。なお,近年では,プライマリグループには,そのアカウントしか所属しないグループを指定する方法が主流になっています。システムによっては/etc/groupに存在しないGIDを指定するとエラーになる場合がありますので,先に/etc/groupにグループを作成しておくと良いでしょう。図2に/etc/groupの書式を示します。/etc/groupの編集は,システムにvigrがある場合にはそれを,ない場合には通常のエディタ用いて行ってください。

グループ名:パスワード(常に*):GID:このグループに所属するアカウントのリスト

図2 /etc/groupの書式

必要な項目の記入が終わったらvipwを終了させてください。データベースの整合性がチェックされ,問題がなければ/etc/passwd,およびシャドーパスワードを採用しているシステムではシャドーパスワード用のデータベースに今編集した内容が反映されます。
cat /etc/passwd
などでアカウントが追加されていることを確認したら,忘れないうちに
passwd ログイン名
で初期パスワードの設定を行っておきましょう。

以上でワークステーションにログインするためのアカウントの準備は完了しました。システムによってはAPOP用認証データベースやSMB用認証データベースなど,ほかの認証データベースにもアカウントを追加する必要があるかもしれません。各自のシステムで使用しているユーザ認証システムを確認し,洩れなくアカウントを登録するようにしてください。

ホームディレクトリなどの作成

アカウントの作成が完了したら,そのアカウント用のホームディレクトリを作成しましょう。
ホームディレクトリの作成は
mkdir /etc/passwdのホームディレクトリ欄に記入したパス
で行います。ディレクトリ作成後,所有権を変更することを忘れないようにしてください。図3では,アカウント名fooのホームディレクトリをモード0755で作成を試み,作成に成功したら所有権をUID=foo,GID=fooに変更するようにしています。

# mkdir -p 0755 /home/foo && chown foo:foo /home/foo

図3 ホームディレクトリの作成

qmailのMaildirなど,システムによっては,ホームディレクトリの下,あるいは別のディレクトリにユーザごとのディレクトリをあらかじめ作成しておく必要がある場合もあります。ユーザに迷惑をかけないように,作成すべきディレクトリをしっかり確認するようにしましょう。

各種設定ファイルの雛形のコピー

各種設定ファイルの雛型をホームディレクトリにあらかじめ用意しておくことで,新規ユーザの設定作業の負担を大幅に減らすことができます。
雛型となるファイル群は通常/etc/skel以下にありますので,必要なディレクトリの作成が終わったら
cp -r /etc/skel/* /home/foo
でユーザのホームディレクトリへコピーしておきましょう。コピー後は忘れずにchownコマンドで所有権を変更するようにしてください。

対話的にユーザ登録を行う

最近のPC UNIXでは,ユーザ登録を対話的に行うためのツールとして,adduserあるいはuseraddコマンドが用意されています。

FreeBSDのadduserはperlスクリプトであり,図4に示すような用い方をします。

# /usr/sbin/adduser
Use option ``-silent'' if you don't want to see all warnings and questions.

Check /etc/shells
Check /etc/master.passwd
Check /etc/group
Enter your default shell: bash csh date no sh tcsh [bash]: 
Your default shell is: bash -> /usr/local/bin/bash
Enter your default HOME partition: [/home]: 
Copy dotfiles from: /usr/share/skel no [/usr/share/skel]: 
Send message from file: /etc/adduser.message no [no]: 
Do not send message
Use passwords (y/n) [y]: 

Ok, let's go.
Don't worry about mistakes. I will give you the chance later to correct any
 input.

Enter username [a-z0-9_-]: foo
Enter full name []: Sample User
Enter shell bash csh date no sh tcsh [bash]: 
Enter home directory (full path) [/home/foo]: 
Uid [2001]: 
Enter login class: default []: 
Login group foo [foo]: 
Login group is ``foo''. Invite foo into other groups: guest no 
[no]: 
Enter password []: 
Enter password again []: 

Name:     foo
Password: ****
Fullname: Sample User
Uid:      2001
Gid:      2001 (foo)
Class:    
Groups:   foo 
HOME:     /home/foo
Shell:    /usr/local/bin/bash
OK? (y/n) [y]: y
Added user ``foo''
Add another user? (y/n) [y]: n
Goodbye!

図4 FreeBSDのadduserの実行例

adduserコマンドを初めて実行するか,前回までの実行時に-sオプションを付けなかった場合,作成するユーザに関する問い合わせの前に/etc/adduser.confを修正するための問い合わせが行われます。前回作成したadduser.confをそのまま使用したい場合には,-sオプションを付けて起動すれば,次回-vオプションを付けて起動するまで,adduser.confに関する問い合わせがなされなくなります。

Debian GNU/LinuxではCで記述された同名のコマンドがあり,図5のようにして使用します。

# /usr/sbin/adduser foo
Adding user foo...
Adding new group foo (2001).
Adding new user foo (2001) with group foo.
Creating home directory /home/foo.
Copying files from /etc/skel
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for foo
Enter the new value, or press return for the default
        Full Name []: Sample User
        Room Number []: 
        Work Phone []: 
        Home Phone []: 
        Other []: 
Is the information correct? [y/n] y

図5 Debian GNU/Linuxのadduserの実行例

これらのコマンドはわかりやすいインターフェースを提供してくれるだけでなく,前述したユーザ登録に必要な作業を自動的に行ってくれますのでミスが発生しにくくなります。特に理由がない限り,手作業での登録は避けた方が無難でしょう。
ただしこれらのコマンドにも限界があり,たとえばAPOP用認証データベースへのアカウント登録など,標準以外の作業は面倒をみてくれません。このような処理も自動化したい場合には,ラッパースクリプトを作成するか,コマンドをカスタマイズする必要があります。

バッチ処理で行う方法

大量のアカウントの登録をいちいち手作業で行ったり,対話型インターフェースを用いたりしていては,時間を浪費するだけです。
このような場合には,あらかじめユーザ名とパスワードのリストを用意しておき,バッチ処理で一括登録することを検討すべきでしょう。

FreeBSDの場合

FreeBSDでは,適当なスクリプトからpwコマンドを呼び出すことでバッチ処理を実現できます。たとえば,リスト1のようなスクリプトに「ログイン名:パスワード」という形式で書かれたリストをパイプで流し込むと,リストに書かれたユーザのアカウントとホームディレクトリが一括して作成されます。ただし,このスクリプトはエラー処理に若干問題があります。実際に使用する場合には十分にテストを行うようにしてください。

#!/bin/sh

PW=/usr/sbin/pw
UHOME=/home
SKEL=/etc/skel/*

while read LINE
do
	LOGIN=`echo $LINE|cut -f 1 -d :`
	PASSWD=`echo $LINE|cut -f 2 -d :`

	HOMEDIR=$UHOME/$LOGIN
	
	echo -n creating $LOGIN :
	echo $PASSWD|$PW useradd $LOGIN -h0
	RETVAL=$?
	if [ $RETVAL -eq 0 ]; then
		mkdir -p 0755 $HOMEDIR && \
		cp -r $SKEL $HOMEDIR/ && \
		chown -R $LOGIN:$LOGIN $HOMEDIR && \
		echo OK
	else
		echo NG ($RETVAL)
		exit $RETVAL
	fi
done

exit 0

リスト1 pwコマンドを用いた一括ユーザ登録スクリプト

Linuxの場合

Linuxには,newusersというユーザ登録作業をバッチ処理するためのコマンドが用意されおり,
newusers users_list
という書式で実行します。
users_listには登録したいアカウントのリストを/etc/passwdと同じ形式で記述します。ただし,パスワード欄には「暗号化していない」パスワードを書くようにしてください。GID欄に指定したグループやホームディレクトリ欄に指定したディレクトリは,存在しない場合,作成されます。

なお,これらバッチ処理を行うために用意したリストには暗号化されていないパスワードが大量に含まれることになります。登録処理が完了したら,すみやかにこのリストを破棄するとともに,ユーザにパスワードを変更してもらうようにしてください。

1) SoftwareDesign 2003年2月号 pp.14-30, 「ネットワーク管理者必携! ネットワークの基本ワザ」より一部加筆の上,転載

2) 最近のシステムでは,セキュリティ上の理由から,パスワードの管理には/etc/passwdを用いず別の認証DBを用いるシャドーパスワードを採用している場合がほとんどです。この場合/etc/passwdのパスワード欄にはダミーの文字が挿入されます。