今まで学生用のパソコンには特に大きな制限をせずに運用してきたが様々な問題が生じてきた. そのため,以下のことを主眼として設定の大きな変更を行った.
授業を行う際,デスクトップ環境が同じでないと支障が起きる. このため,デスクトップ環境の統一は重要である. これは,ユーザープロファイルという機能で実現できる.
これはデスクトップ環境にも通じることであるが,ユーザーの権限を制限しないと勝手な変更を加えられてしまう. これは,システムポリシーを利用することで実現できる.
Windowsでは,ある程度使用していると動作が不安定になったり,ウィルスに感染しやすいことなどから,再インストールをしなければならない場合がある. このため,再インストール作業を簡素化することは重要である. これは,PicoBSDによるバックアップ,リストアで解決した.
以下では,考慮すべき点と実際の作業手順でつまずきやすい部分についてまとめたものである.
なお,後半のバックアップとリストアについては,クライアントは DHCP により IP アドレスを取得でき,自由に使える FTP サーバーが存在することを前提としているが,必ずしもその必要はない. また,前半の部分だけでユーザーに勝手なことをさせないという目的は達成できる.
Sambaを用いれば,以下と同じことがより簡単にできる.
元になる Windows 9x のひな形マシンを準備する. 必要なソフトウェアをインストールして設定を全て行っておく. 必要があればパッチなども当てておき,セキュリティホールなどを塞ぐ. 特に,デスクトップやスタートメニューの内容を調整しておく.
準備が出来た段階で,コントロールパネルのパスワードの「ユーザーごとの設定をする」にチェックを入れる. この際,デスクトップとスタートメニューを含めるようにする.
ユーザープロファイルについては,Windows 95 リソースキットに記述があるが,いくつかの点を理解していないと勘違いを起こしやすいと思われる.
クライアントが Windows 9x の場合,ユーザープロファイルで保持されるのは,基本的にショートカットアイコンとフォルダである.
保持される場所は,ユーザーのホームディレクトリである. Windows NT のユーザープロファイルが格納される場所(通常は,%SystemRoot%¥Profiles)では無いことに注意する.
上記のことを理解した上で作業に移る.
以下の手順については,Windows NT Server 4.0 オフィシャルマニュアルが参考になる.
Windows NT Server でホームディレクトリとなるフォルダの設定を行う.
例えば,share という名前のフォルダを作成し,共有名を share$ としておく.
このとき,$をつけた隠し共有としておく.
隠し共有にしないとユーザーに勝手に変更されてしまう危険性がある.
権限は Administrator とログオンする DomainUser が変更できるように設定しておく.
ドメインユーザーマネージャーを用いてホームディレクトリを作成した場合,UNIX などとは異なり,Administrator であってもユーザーのホームディレクトリを変更する権限が与えられない. このため,Administrator がユーザーのホームディレクトリを変更できるようにしておかないと苦労することになる.
Windows NT Server でドメインユーザーマネージャーを使用してユーザーの設定を行う.
この際,ホームディレクトリを指定することを忘れないようにする.
複数のユーザーを設定する場合,複数のユーザーを選択しておいて,ホームディレクトリのパスに,¥¥SERVER_NAME¥SHARE_DIRECTORY¥%USERNAME% と指定することで一括処理ができる.
用意した Windows 9x ひな形マシンを使って,ドメインに登録してあるユーザーでログオンし,ログアウトする.
ログオンしたユーザーのホームディレクトリにユーザーの環境(ユーザープロファイル)が保存されているはずである. ここで,ユーザーのレジストリファイル USER.DAT を USER.MAN に変更すると,固定ユーザープロファイルになり,ユーザーのスタートメニューやデスクトップの変更は反映されなくなる. ただし,通常のファイルなどはローカルマシンに作れてしまう.
全てのユーザー環境を同じにする場合,作成されたユーザープロファイルを全てのユーザーのホームディレクトリにコピーする.
この際,xcopy コマンドを使うと簡単である.
xcopy /e /h hinagata user_name などとすると,hinagata ディレクトリを user_name にコピーしてくれる.
ログオンスクリプトを用いると,ログオン時にユーザー環境の調整が出来る.
ログオンスクリプトは,%SystemRoot%¥system32¥Repl¥Imports¥Scripts に置く.
Windows 9x がクライアントの場合,単なるバッチファイルを用意すればよい.
例えば,以下のようなバッチファイルを作成して,ログオンスクリプトとすることができる.
これは,¥¥SERVER¥SHARE を D: ドライブとして貸出し,ログオンしたユーザー student01 のデスクトップとスタートメニューを初期化(削除)する.
この他にも,net コマンドを用いるといろいろ出来る.
@ECHO OFF
ECHO ログオンスクリプトの実行中
NET USE D: ¥¥SERVER¥SHARE > NULL
DELTREE /Y "C:¥WINDOWS¥Profiles¥student01¥デスクトップ" > NUL
DELTREE /Y "C:¥WINDOWS¥Profiles¥student01¥スタート メニュー" > NUL
ECHO 終了しました
ドメインユーザーマネージャーを用いて,ユーザーに実行させたいログオンスクリプトを指定する.
この際,%SystemRoot%¥system32¥Repl¥Imports¥Scripts¥start.bat という名前だった場合,start.bat とだけ書けばよい.
システムポリシーエディタを用いることで,ユーザーの権限を制限できる. Windows 9x 用のシステムポリシーエディタはWindowsのCD-ROMからインストールしておく.
新規作成を選び,必要な設定を行う.
設定が終わったら,config.pol という名前で保存する.
これを,%SystemRoot%¥system32¥Repl¥Imports¥Scripts¥config.pol として置いておくと,ユーザーがログオンした際にシステムポリシーが適用される.
ユーザーがログオンしない場合(最初のログオンでキャンセルボタンを押した場合)に備えて,クライアントコンピュータの制限を強くしておくというのも一つの方法である. 例えば,デスクトップアイコンの表示をしない,プログラムを使えなくするなどの方法も考えられる.
FreeBSD をフロッピー1枚で動かす試みとして PicoBSD がある. これを用いれば,フロッピー1枚で起動しバックアップとリストアを行うシステムが簡単に構築できる.
すでに UNIX のコマンドに関しては一通り理解していることを前提にしているので,細かい点の説明は省く. かなりの部分を フロッピーディスク1枚で行うシステムバックアップ を参考としている.
PicoBSD は,現在の FreeBSD のソースツリーに取り込まれている. また,ソースのほとんどが必要になるため,全てのソースを展開しておく. PC-9801 用の PicoBSD(98) もオフィシャルではないがパッチがあるため,簡単に作成できるようになっている. ここでは,FreeBSD 3.5.1-RELEASE を元に話を進める.
/usr/src/release/picobsd に元になるものが用意されている.
ここでは,net を custom にコピー (cp -pR net custom) して使うことにする.
一度うまく動くか試すために,/usr/src/release/picobsd/build に移動し,./build custom として実行してみる.
ダイアログボックスが出てくるので質問に答える.
うまく動くことが確認できたら,実際に必要な環境に応じて変更を加える.
/usr/src/release/picobsd/custom 内の修正するファイルを挙げておく.
PICOBSD
kernel 構築用のファイルなので,使いたいデバイスなどに漏れが無いように設定する.
コメント内の以下の部分が様々な値を決めているので注意すること.
#PicoBSD 4096 init 4096 32768
crunch1/crunch.conf
組み込むコマンドを指定するファイル. 必要に応じて,ライブラリの指定も行う. また,SSH のような標準でないコマンドの場合は注意が必要である.
Makefile.mfs
デバイスファイルの作成や必要なファイルのコピーなどに用いる.
floppy.tree/etc のファイル
起動時に実行される rc などのファイルを設定する.
詳しく知りたい場合は,/usr/src/release/picobsd/mfs_tree/etc/rc も参照のこと.
以下に例を示す. ここでは,ネットワークカードとして DEC と Intel のもの,DHCP, SSH, fetch などを組み込んだ. また,日本語に対応させるための MSDOS_LC_JAPAN も指定してある.
PICOBSD
#Line starting with #PicoBSD contains PicoBSD build parameters
#marker def_sz init MFS_inodes floppy_inodes
#PicoBSD 4096 init 4096 32768
machine "i386"
cpu "I586_CPU"
cpu "I686_CPU"
ident PICOBSD
maxusers 10
options INET #InterNETworking
options FFS #Berkeley Fast Filesystem
options FFS_ROOT #FFS usable as root device [keep this!]
options MFS #Memory Filesystem
options MFS_ROOT #MFS as root
options MSDOSFS #MSDOS Filesystem
options MSDOSFS_LC_JAPAN #MSDOS Filesystem
options "CD9660" #ISO 9660 Filesystem
options "COMPAT_43" #Compatible with BSD 4.3 [KEEP THIS!]
options USERCONFIG #boot -c editor
options VISUAL_USERCONFIG #visual boot -c editor
options PCI_QUIET
options NO_LKM
config kernel root on fd0a
controller isa0
controller pci0
controller fdc0 at isa? port "IO_FD1" bio irq 6 drq 2
disk fd0 at fdc0 drive 0
options "CMD640" # work around CMD640 chip deficiency
controller wdc0 at isa? port "IO_WD1" bio irq 14
disk wd0 at wdc0 drive 0
disk wd1 at wdc0 drive 1
controller wdc1 at isa? port "IO_WD2" bio irq 15
disk wd2 at wdc1 drive 0
disk wd3 at wdc1 drive 1
options ATAPI #Enable ATAPI support for IDE bus
options ATAPI_STATIC #Don't do it as an LKM
device acd0 #IDE CD-ROM
controller atkbdc0 at isa? port IO_KBD tty
device atkbd0 at isa? tty irq 1
device vga0 at isa? port ? conflicts
device sc0 at isa? tty
device npx0 at isa? port IO_NPX irq 13
device de0 # DEC/Intel DC21x4x (``Tulip'')
device fxp0 # Intel EtherExpress PRO/100B (82557, 82558)
device vr0
device rl0
pseudo-device loop
pseudo-device ether
pseudo-device pty 16
pseudo-device bpf 4
crunch1/crunch.conf
srcdirs /usr/src/bin
srcdirs /usr/src/sbin/i386
srcdirs /usr/src/sbin
srcdirs /usr/src/usr.bin
srcdirs /usr/src/gnu/usr.bin
srcdirs /usr/src/usr.sbin
srcdirs /usr/src/libexec
srcdirs ../../tinyware
srcdirs /usr/ports/security/ssh/work
progs sh test echo hostname ln login getty stty
progs w msg kget reboot
progs init ifconfig df sps ns vm cat
progs cp rm mknod chmod chown mkdir ls
progs sysctl pwd_mkdb dev_mkdb
progs mount mount_msdos umount
progs dd disklabel fdisk newfs newfs_msdos
progs kill mount_std
progs pwd more
progs passwd date dhclient route
progs mount_cd9660 ping traceroute
progs ssh tar grep sed find fetch
progs minigzip
ln minigzip gzip
ln test [
ln sh -sh
ln sps ps
ln msg dmesg
ln ns netstat
ln chown chgrp
libs -lncurses -lmytinfo -lipx -lz -lpcap -lalias -lwrap
libs -ledit -lutil -lmd -lcrypt -lmp -lgmp -lm -lkvm
libs -lgnuregex -lftpio
Makefile.mfs
MY_DEVS= std tun2 cuaa0 cuaa1 cuaa2 vty10 fd0 wd0 pty0 bpf0 bpf1 bpf2 bpf3
.include "../build/Makefile.mfs"
all: copy
copy:
cp /sbin/dhclient-script ${DESTDIR}/stand/
ports を利用する方法が簡単なので紹介しておく.
/usr/ports/security/ssh に移動し,make を実行する.
/usr/ports/security/ssh/work に移動し,ln -s ssh-1.2.27 ssh を実行する.
/usr/ports/security/ssh/work/ssh に移動し,Makefile を修正する.
OBJS = $(SSH_OBJS) を SSH_OBJS の後ろの行に加えておく.
念のため,/usr/ports/security/ssh/work/ssh/gmp-2.0.2-ssh-2 に移動し,configure と make を実行する.
同様に,/usr/ports/security/ssh/work/ssh/zlib-1.0.4 でも,make をしておく.
crunch1/crunch.conf に progs ssh を加えて,./build customをする.
Windows では日本語のファイル名が使われているため,MSDOSFS にパッチ(MSDOSFS japanese patch for FreeBSD)をあてることが必要である.
ひな形マシンを PicoBSD のフロッピーで起動し,以下のようにしてバックアップを取った.
mount_msdos -L ja_JP.EUC -l /dev/wd0s1 /mnt cd /mnt tar -zcvf - -T /tmp/list | ssh -l user_name host_name "cat > backup_file"
ここで,/tmp/list にバックアップするファイル名を列挙(WIN386.SWP などをバックアップするのは無駄)しておいた.
/tmp/listの中身
IO.SYS MSDOS.SYS WINDOWS Program Files …
また,バックアップする際に SSH を用いている.
おおよそ,20分程度でバックアップは終了したが,これは環境によるので一概には言えない.
レストアの際,マシンごとの固有の設定をどのようにするかが問題となる. 基本的には,レジストリに格納されているので,必要な部分をマシン名などで検索し,レジストリエディタ (regedit.exe) で書き出しておく.
以下に示すのは,レジストリエディタから書き出したものの例. この中で,@HOGEHOGE@ の部分をマシン固有の情報で置き換えればよい.
REGEDIT4
[HKEY_LOCAL_MACHINE¥System¥CurrentControlSet¥Services¥MSNP32¥NetworkProvider]
"AuthenticatingAgent"="@DOMAIN@"
[HKEY_LOCAL_MACHINE¥Network¥Logon]
"username"="@NAME@"
[HKEY_LOCAL_MACHINE¥System¥CurrentControlSet¥control¥ComputerName¥ComputerName]
"ComputerName"="@NAME@"
[HKEY_LOCAL_MACHINE¥System¥CurrentControlSet¥control¥Print¥Printers¥Canon LASER
SHOT LBP-430]
"Port"="@PRINTER@"
[HKEY_LOCAL_MACHINE¥System¥CurrentControlSet¥Services¥VxD¥VNETSUP]
"ComputerName"="@NAME@"
"Workgroup"="@DOMAIN@"
次に,以下のようなファイルを用意しておく.
192.168.1.1 pc01 ¥¥SERVER¥PRINTER01
192.168.1.2 pc02 ¥¥SERVER¥PRINTER01
192.168.1.3 pc03 ¥¥SERVER¥PRINTER02
192.168.1.4 pc04 ¥¥SERVER¥PRINTER02
192.168.1.5 pc05 ¥¥SERVER¥PRINTER03
…
このファイルをもとに,レストアの際に書き換える方法を採用した.
このためのシェルスクリプトを作成しておくと便利.
grep や sed などを利用すれば簡単だろう.
環境により異なるので手順の説明だけをする.
DHCP で動いているため,/var/db/dhclient.leases に情報がある.
この中から IP アドレスを抜き出す.
dhclient のオプション -D を用いるともっと簡単な気がする.
設定を書いておいたファイルを読み込み,IP アドレスが一致する行を抽出する.
書かれている情報に従ってレジストリの変更を行ったものをファイルとして書き出す.
ここでは,C:¥WINDOWS¥REGIST.REG という名前で保存したことにする.
場合によるが,C:¥WINDOWS¥WIN.INI の内容も書き換えが必要である.
これも同様の方法で出来るだろう.
手間を減らすためにはネットワーク共有をするものは全てログオンスクリプトで処理する方がよいだろう. ログオンスクリプトを用いると変更があった場合でもサーバーに置いてあるスクリプトを変更するだけで済む.
実際のレジストリ変更のタイミングは,regedit.exe にバグがある Windows 95 とバグが修正されていると思われる Windows 95 OSR2 以降では異なるため注意が必要である.
本来ならば,DOSコマンドとして,REGEDIT REGIST.REG などとすれば読み込んでくれるはずであるが,Windows 95 の初期バージョンにはバグがあるらしく上手くいかない.
そこで,GUIモードで処理を行う. 手作業で読み込ませてもよい(作成したレジストリファイルをダブルクリックして再起動)が面倒なので,バックアップを取る前に以下のような細工をしておくと便利かも.
システムポリシーエディタでレジストリを開く.
「ローカルコンピュータ」をダブルクリックし,「システム」の中の「一度だけ実行」にチェックを入れ「表示」ボタンをクリックする.
出てきたダイアロブボックスの「追加」をクリックする.
追加するアイテムに regist などの適当な名前を付ける. 追加するアイテムの値には,C:¥WINDOWS¥REGEDIT.EXE C:¥WINDOWS¥REGIST.REG のように読み込むファイル名とともに記述する.
これで起動時に自動的にレジストリの内容が読み込まれ,再起動すれば変更が反映される.
こちらは簡単である.
AUTOEXEC.BAT に以下のように書き加えた後でバックアップする.
IF NOT EXIST C:¥WINDOWS¥REGIST.REG GOTO NEXT
C:¥WINDOWS¥REGEDIT.EXE C:¥WINDOWS¥REGIST.REG
DEL C:¥WINDOWS¥REGIST.REG
:NEXT
これで,Windows が起動する前にレジストリの内容を反映させられるので,再起動の必要はなくなる.
PicoBSD のフロッピーで起動し,以下のように実行した. URL は FTP サーバーに置いたバックアップファイルのものである.
mount_msdos -L ja_JP.EUC -l /dev/wd0s1 /mnt fetch -q -o - URL | tar -zxvf - -C /mnt
当然,一斉に行えばネットワークのスピードが落ちるので,適当な台数で行った方がよい.
ファイルの展開が終わったら,前記のレジストリ更新用ファイル(C:¥WINDOWS¥REGIST.REG)の作成を行う.
再起動を行い,Windows を起動し,設定が上手くいったかを確かめる.
50台程度の再インストールでは,ファイルの転送時間が一番かかるが,それでも1台が20分程度(約300MB程度のファイル転送)で終わるため,同時に5台ずつ実行して約3時間といったところである. 以前,4人で作業して丸一日かかっていたことを思えば相当の時間節約である.
Windows 95 リソースキットは,Windows 95 の CD-ROM 内の ¥ADMIN¥RESKIT¥HELPFILE¥WIN95RK.HLP にある.
Windows NT Server 4.0 オフィシャルマニュアル,Charlie Russel and Sharon Crawford,アスキー出版局,ISBN4-7561-2090-3
フロッピー1枚でバックアップする方法については,フロッピーディスク1枚で行うシステムバックアップ (吉川 宏之,高橋 治道) を参照.
[戻る]