Monthly Archives: 9月 2013

自前サーバのSSHログインにgoogleの2段階認証が使えて秋の夜長に感動した(追記あり)。

Pocket

 

タイトルそのままである。
たぶんGoogle様あたりが始めたのだと思うけど、何かの認証の際にスマートフォンをトークンキーとして使う仕組みはとても便利である。

二要素認証、つまりパスワード/パスフレーズに加えトークンキーも必須にすることで、セキュリティは段違いに向上する。
しかし、ちょっと前までトークンキーと言えばRSAのハードウェアで、手軽に使えるとは言えない代物だった。
それがスマートフォンで出来るんだから問答無用で便利なんである。

そんなgoogleの2段階認証を、自分のサーバのログインにも使えると聞いて驚愕して試して感動したので下記に顛末を記す。

なお、FreeBSDで試しているが、Linuxでも大丈夫。Mintでの結果を末尾に追記。

 

事前準備(スマートフォン側)

Android、あるいはiOSにgoogle authenticatorをインストールし、2段階認証プロセスの準備をしておく。

2段階認証プロセスについて
https://support.google.com/accounts/answer/180744?hl=ja

 

事前準備(サーバ側)

googleの2段階認証プロセス用のソフトウェアをインストールする。

graphics/libqrencode
security/pam_google_authenticator

以上二つ。
けっこう依存がありそうなのでpkgでインストールした方がよいかも。

2段階認証の設定…の前に。

さて今度はスマートフォンとサーバの括り付けを行う段。
なお、以下の作業はマシンの目の前で行うこと。
認証の設定を変えるわけだから、遠隔で作業して失敗した日にはログインできなくなって詰む。

 

2段階認証の設定

google-authenticatorを実行する。
あらかじめ書いておくと、実行したらいきなり画面いっぱいにQRコードが表示される。
その巨大さに動揺しないで、手元のスマートフォンでgoogle authenticatorを起動し、QRコードを読み取ること。

QRコードではなく手入力でももちろん出来るけれど、QRコードの方がはるかに楽。

また、初回起動時にはいろいろと質問される。
以下に私訳も併記する。

$ google-authenticator

Do you want authentication tokens to be time-based (y/n) y
(俺訳: 認証トークンを時間ベースにしますか?他にはカウンタベースがあります。)

このあと、どーんと以下のようなQRコードが。

googleqr

QRコードを、以下はiOSでの例だが、右上のペンをクリックしてから読み取ると、以下のようにコードが追加される。

gAuth

Your new secret key is: xxxxxxxxxxxx
Your verification code is xxxx
Your emergency scratch codes are:
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx

スマートフォンで読み取ったら、続いて細かな設定。
質問に答えるだけでよい。

 

google-authenticatorの設定

私訳を併記。
私の場合、有効時間を延ばすかどうかにだけNoと答えた。
なお、以下の最初の質問でyと答えて初めて先ほどのキーがサーバに登録される = ~/.google_authenticatorに登録される。
nと答えてしまったら、QRコード読み取りからやり直し。

Do you want me to update your "/home/vanilla/.google_authenticator" file (y/n) y
(俺訳: google認証の設定を更新しますか?)

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y
(俺訳: トークンを同時に使えるユーザの数を制限しますか?
「あなた」も30秒に1回しかログインできなくなりますが、攻撃に
気づいたり、防ぐことが出来るようになるでしょう。)

By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n) n
(俺訳: デフォルトではトークンの有効時間は30秒ですが、サーバとクライアントの
時刻ずれを考慮して、さらにその前後30秒の猶予を設けています。
時刻ずれがひどいようであれば4分まで延長することができます。
そうしますか?)

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n) y
(俺訳: もしあなたのコンピュータが、ログインのブルートフォース攻撃に対して
十分な防御が出来ないなら、時間当たりのログイン試行数を制限できます。
デフォルトでは30秒につき3回までしかログイン試行できません。
制限を有効にしますか?)

 

終わると~/.google-authenticatorというファイルができるはず。
パーミッションは400。まあ当然ですな。

 

sshdで二段階認証を有効にする

/etc/pam.d/sshdの一番下に以下の行を追加する。
一番下だと、認証の際にパスワードを訊かれてからトークンキーの入力。
一番上にすると、トークンキーが先になる。

auth    required    /usr/local/lib/pam_google_authenticator.so

sshdを再起動。
これ以降、sshログインで2段階認証が有効になるので注意。
くれぐれもマシンの目の前ですること。

$ sudo service sshd restart
Performing sanity check on sshd configuration.
Stopping sshd.
Performing sanity check on sshd configuration.
Starting sshd.
$

 

2段階認証を試してみよう

さっそく試してみると、パスワード認証のあとにトークンの入力を求められるようになった。
ああ…。なんだろうこの守られてる感。素敵だ。

login as: vanilla
Using keyboard-interactive authentication.
Password for vanilla@fireelement:
Using keyboard-interactive authentication.
Verification code:

 

LinuxでもOK

結局のところ、googleの2段階認証は、pamモジュールとして公開されているので、Linuxでだって動く。

以下はlinux mint 15 Oliviaで試した結果。

authenticatorのインストール

libpam-google-authenticatorをインストールする。ソフトウェアマネジャーでもapt-getでも。
設定方法は上で述べたものと変わりないので割愛。

sshdの設定変更

Linux Mintではsshdの設定に変更が必要だった。
/etc/ssh/sshd_configでChallengeResponseAuthenticationをyesにする。

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication yes

 

認証方法の変更

これもFreeBSDと同じ。/etc/pam.d/sshdを修正する。

auth       required     pam_google_authenticator.so

 

sshdの再起動

Linux mintではsshdではなくsshなんだなあ。

sudo service ssh restart

 

No tags for this post.

メモ: FreeBSD 10の新機能

Pocket

 

FreeBSD 10が年明けあたりにリリースされる。
今回のメジャーバージョンアップは、普段と比べて大きな変更があって、とても注目している。
その変更点を以下にまとめる。あくまでも本日時点。

なお元ネタはhttps://wiki.freebsd.org/WhatsNew/FreeBSD10

 

FreeBSD 10での変更点

システム

GCCアウト。CLANGに入れ替え。
また、デフォルトのコンパイラもclangに。
[コメント]GPLv3問題のためですな。
そしてシステム全部がclangでコンパイルされている、というのは大きなこと。
ある意味、オープンソース・ソフトウェアを支えてきたgccと決別したわけだから。

pkg

pkg_*アウト。pkgngイン。
[コメント]FreeBSD 10-ALPHAでpkg_*の無いことに驚いた。
しかしpkgngのオフィシャルリポジトリはまだ復活していない。
10-RELEASEの暁にはpkg-test.freebsd.orgが本格運用されるであろう。

サーバソフトウェア

(作業中)BINDアウト。UnboundとLNDSがイン。
[コメント]BINDちゃんセキュリティホール多かったしのう。

仮想化

bhyveイン。 LinuxのKVMのようなもの
[コメント]bhyveってなんぞや。ここで概要つかめるかも。

ファイルシステム

インストーラでのZFS on root対応
ZFSでTRIMサポート
ZFSでLZ4圧縮のサポート
L2ARC圧縮もサポート
FUSEがベースシステムでサポートされる。
UFSのライブリサイズがサポートされる。つまりサービス断なくディスクを増加させられる。
[コメント]LZ4については手前味噌ですがこちらを。
ZFSがばんばん更新されるのは嬉しいのだが、ZFS自体のアップデートはすごく緊張する。

起動

UEFIブートローダのサポート
ブート時のアニメーションsplashスクリーンサポート

その他

ログインIDが32文字までに延長
CVS終了。portsのアップデートに{csup|cvsup}使ってる奴はsvnliteかsvnupを使え。
svnliteはベースシステムに、svnupはportsにある。
10以降で作られたUFSはfsckが早い。
[コメント]ログインIDの文字数は地味に助かる。FreeBSDでメールサーバ立てた時、苦労した覚えが。

No tags for this post.

[FreeBSD] ezjailを試そう

Pocket

 

Jail

FreeBSDにはJailという技術がある。

Jailとは、OSレベルの仮想化技術だ。
Jailを使うと、FreeBSDマシン上にいくつもの独立したシステムを構築できる。

たとえば、一つのFreeBSDのうえに、Samba, Apacheをそれぞれ独立させて構築させることができる。
独立、というのは、Apache側のシステムで何が起こっても、Samba側のシステム、ホストのFreeBSDには何の影響もないということ。

もっと深いところで仮想化するESXiやらXenやらと比べると、オーバーヘッドが小さいという利点がある(と思ってます)。
これらの方法だと、各サービスを独立させたいときには、OSごとインストールする必要があるから。
(仮にあるマシン上でDHCPサーバ, DNS, Samba, Apacheを動かすとして、それぞれ向けにOSをインストール、というのはさすがに辛い。)

詳しくは下記。

http://ja.wikipedia.org/wiki/FreeBSD_jail

Jailの利点
仮想化: 各jailはホストマシン上で動く仮想機械であり、独自のファイルシステムやプロセス空間、ユーザーアカウントを持つ。jailの中のプロセスからは実際のシステムなのかjailの中なのかはほぼ区別できない。
安全性: 各jailは他のjailにアクセスできないようになっており、安全性が高まっている。
権限委譲の簡素化: 管理者権限のスコープがjail内に制限されているため、システムの管理者は本来管理者権限が必要な仕事を、計算機全体を操作する権限を渡すことなく行わせることが出来る。

Jail…でなくezjailにしよう。

FreeBSD Handbookより抜粋する。

Jailのセットアップには、FreeBSDとその使用方法についての高度な経験が必要である。
下記に示す手順が複雑と感じるならば、sysutils/ezjailなどの、より簡単なシステムを検討せよ
16.6.1.1. Design
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/jails-application.html

ひとめ見てウンザリしたのでezjailにする。

ezjailたったこれだけ(インストールと設定)。

チュートリアルはここにある。
http://erdgeist.org/arts/software/ezjail/

インストールはpkgから。

# pkg_add ezjail

そして最低限の前準備。
/etc/rc.confへの追加。

# ezjail
ezjail_enable="YES"

ezjail.confへの追記。

ezjail_ftphost=ftp2.jp.freebsd.org

ezjailはFreeBSDの各種データをftpサーバからダウンロードする。
デフォルトだと本家のftpサーバに繋がってしまうので、最寄りのftpサーバを指定する。

Jailたったこれだけ(Jail環境の構築)

ここまで来たら、Jail環境そのものの初期設定をする。

ezjail-admin installが初回設定用のコマンドで、使用するのは原則、一回だけでよい。
このコマンドで、Jail関連のディレクトリやらベース環境が作られる。

$ sudo ezjail-admin install
Your system is 9.2-RC3. Normally FTP-servers don't provide non-RELEASE-builds.
Querying your ftp-server... The ftp server you specified (ftp2.jp.freebsd.org) seems to provide the following builds:
drwxr-xr-x 2 ftp ftp 4096 Sep 13 15:43 10.0-ALPHA1
lrwxrwxrwx 1 ftp ftp 14 Feb 16 2013 8.3-RELEASE -> ../8.3-RELEASE
drwxr-xr-x 2 ftp ftp 4096 May 22 12:59 9.1-RELEASE
drwxr-xr-x 2 ftp ftp 4096 Aug 16 20:47 9.2-RC2
drwxr-xr-x 2 ftp ftp 4096 Sep 11 22:14 9.2-RC4
drwxr-xr-x 6 ftp ftp 4096 Sep 13 16:35 ISO-IMAGES
Release [ 9.2-RC3 ]:

ezjailはホストOSと同じバージョンで環境を作ろうとする。
しかしホストOSがRELEASEビルドでない場合、言い換えるとホストOSのバージョンがftpサーバに存在しない場合には、上記の通り自分で指定をしなければならない。

この状態なら9.2-RC4でしょうなあ。

なお、バージョンをどのように判定しているかというと、ホストOSでuname -rを実行したときの出力と、ftpサーバのディレクトリとのマッチングである。

Release [ 9.2-RC3 ]:9.2-RC4
(中略)
/usr/jails/basejail/usr/lib32/libalias_pptp.a
/usr/jails/basejail/usr/lib32/libusb_p.a
/usr/jails/basejail/usr/lib32/libalias_ftp.so
110276 blocks
Note: a non-standard /etc/make.conf was copied to the template jail in order to get the ports collection running inside jails.
$

 

デフォルト設定では、/usr/jailsに各種ファイルが作られる。

$ ls /usr/jails/
basejail flavours newjail

 

Jailたったこれだけ(Jailホストの構築と起動)

たったこれだけと言いつつJailホストの構築までが長かった。
ezjail-admin createでjailホストを作り、ezjail-admin startでjailホストを起動する。
ezjail-admin consoleでjailホストのコンソールにアクセスする。
と言う流れ。

Jailホストに192.168.1.199というIPアドレスを付与するとし、また、ホストマシンのネットワークIFがem0であるとして、以下のように。

$ sudo ezjail-admin create example 'em0|192.168.1.199'
(中略)
/usr/jails/example/./sys
/usr/jails/example/./basejail
3146 blocks
Warning: IP em0|192.168.100.201 not configured on a local interface.
$

/usr/jailsの下にexampleとして作られたことが分かる。

$ ls /usr/jails
basejail example flavours newjail

 

そして起動

$ sudo ezjail-admin start example
Configuring jails:.
Starting jails: example.
$

 

コンソールへ

$ sudo ezjail-admin console example
FreeBSD 9.2-RC3 (GENERIC) #0 r254795: Sat Aug 24 20:25:04 UTC 2013
Welcome to FreeBSD!
(中略)
root@example:~ #
root@example:~# uname -a
FreeBSD example 9.2-RC3 FreeBSD 9.2-RC3 #0 r254795: Sat Aug 24 20:25:04 UTC 2013 root@bake.isc.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64

 

Jailたったこれだけ、とは言うけれど。

jailホストは起動したけれども、ご覧のようにネットには出ていけない。これはresolv.confがないから。
時刻もUTCになっている。
また、驚くことにrc.confもない。

root@example:~ # ftp ftp2.jp.freebsd.org
ftp: Can't lookup `ftp2.jp.freebsd.org:ftp': hostname nor servname provided, or not known
ftp> bye
root@example:~ # date
Sun Sep 15 13:51:21 UTC 2013
root@example:~ # cat /etc/rc.conf
cat: /etc/rc.conf: No such file or directory
root@example:~ #

 

Listenポートを調べてみると、あーあ、sendmailやsyslogdがListenしてしまっている。

root@example:~ # sockstat -l4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root sendmail 1322 3 tcp4 192.168.100.201:25 *:*
root syslogd 1268 6 udp4 192.168.100.201:514 *:*
root@example:~ #

 

先述のチュートリアルにあるQuickStartは早いものの、かように設定が足りません。
そのため、けっこう基本的なところから自分で構築していかなければならない。
ということで、ezjailの設定を詰めることにして、試しに作ったjailホストは消してしまおう。

jailホストからlogoutし、ezjail-adminでstopし、deleteすればOK。

root@example:~ # logout
$ sudo ezjail-admin stop example
パスワード:
Stopping jails: example.
$ sudo ezjail-admin delete -w example
$ ls /usr/jails
basejail flavours newjail
$

 

deleteのときに-wを付け忘れると、/usr/jails/exampleが残る。
もちろん手動で消すこともできるが、schgフラグが立っているので簡単には消せない。

$ sudo ezjail-admin delete example
$ ls
basejail example flavours newjail
$ sudo rm -Rf ./example
rm: ./example/var/empty: Operation not permitted
rm: ./example/var: Directory not empty
rm: ./example: Directory not empty
$

こういう場合には、schgフラグを消してからrmすること。

$ sudo chflags -R noschg ./example
$ sudo rm -Rf ./example
$ ls
basejail flavours newjail
$

また、deleteの際に-wfとすると、jailを止めてから削除してくれる。

 ezjail-admin delete -wf example

 

ezjailの設定は記事を改めてまとめる。

No tags for this post.

[FreeBSD] 無人でのユーザ追加

Pocket

 

仮想化全盛のこの世の中、OSインストール直後の各種設定はなるだけ無人化したい。
そこでFreeBSDでのユーザ設定の無人化について。

pw(8)

pwを使う。
man pwすると画面いっぱいに広がるSYNOPSISにまずのけぞる。
そのくらい、たくさんのことができるpwコマンドであるが、使うのは二つだけ。

pw groupadd
pw useradd

グループ追加とユーザ追加ですな。

 

pwでのグループ追加

書式は以下の通り

pw groupadd -q -n <グループ名> -g <GID>

 

-qはエラーメッセージの抑制。
じゃ実際にエラーが発生したらどうすんだ、って話になるが、そこはステータスコードを使う。

グループ:testgをgroup ID:10010で追加するなら、以下の通り。

pw groupadd -q -n testg -g 10010

 

pwでのユーザ追加

グループ追加に比べ、こちらはちょっと複雑。
書式は以下の通り。

pw useradd -n <ユーザ名> -u <UID> -s <シェル> \
-m -d <ホームディレクトリ> -G <グループ名> \
-c <コメント>

特に-mを除いて説明の必要はないと思う。
-mはホームディレクトリを新規に作る、という意味。

しかしこれだけだとパスワードを訊かれてしまう。

 

パスワード設定も無人でしたい。

パスワード設定も自動化するには、以下のようにする。

echo -n '<パスワード>' |\
pw useradd -n <ユーザ名> -u <UID> -s <シェル> \
-m -d <ホームディレクトリ> -G <グループ名> \
-c <コメント> \
-h 0

-h 0をオプションとして与えると、pw はパスワード設定を標準入力から受け付けてくれる。
つまり、パスワードをechoし、その標準入力を-h 0オプションを与えたpw useraddにパイプすればよい。

パスワードにtest, uidに10010, シェルに/bin/sh, ホームディレクトリは/home/test, グループ:testに所属するユーザtestを作成するには、以下のように。

echo -n 'test' |\
pw useradd -n test -u 10010 -s /bin/sh \
-m -d /home/test -G test -c 'test user' \
-h 0

 

いや、でもさあ、パスワード丸見えじゃないか。
そう思ったあなたは正しい。
上記のスクリプトは使うべきでない。

 

暗号化済みのパスワードを無人で設定するには。

前章で追加した-hオプションを-Hにすれば、pwは暗号化済みのパスワードを受け付けてくれる。
こうしておけば、仮にスクリプトを覗かれたって、パスワードを平文で書いてあるよりははるかに危険度は少ない。

パスワードにtest, uidに10010, シェルに/bin/sh, ホームディレクトリは/home/test, グループ:testに所属するユーザtestを作成するケースを考える。

この記事で触れた方法でパスワードを暗号化する。この例ではsaltは”SALTsalt”。

$ perl -e 'print crypt("test", "\$6\$SALTsalt");'
$6$SALTsalt$gH47I0mRGadJVVlIpeTxVlYw.SjkPOZ7lJoGkqOyhyeUJ7PV5QWuYpIG6D5ggew6RXLpl1eA72TpgX5pGDpr/.

 

得た文字列をechoしてpwに渡す。※文字列長いので省略してます。

echo -n '<暗号化済みパスワード>' |\
pw useradd -n test -u 10010 -s /bin/sh \
-m -d /home/test -G test -c 'test user' \
-H 0

 

自分のシステムがどの方法でパスワードを暗号化しているか、確認するのを忘れないこと。
MD5ならまずどのシステムでも大丈夫だが、MD5は今じゃちょっと危ないからね。

以上

 

No tags for this post.

sha512でハッシュされたsaltつきパスワードを生成するには

Pocket

 

バッチファイルにパスワードを書くときの悩み

ユーザの追加や、属性の変更をバッチファイルで処理したいことがある。
しかしこういった作業には、しばしばパスワードの操作が含まれる。
しかしパスワードを平文のまま扱うわけにもいかない。
パスワードの設定・変更をするコマンドが、暗号化されたパスワードも受け付けるようになっているのは、そのためだ。

たとえばLinuxにはchpasswdというコマンドがある。chpasswdは暗号化されたパスワードを受け付ける。
もしバッチファイルを覗かれても、パスワードが暗号化されていれば、まあ大丈夫と言える。

MD5からSHA512へ

ところで、こちらの記事でも触れたとおり、MD5は今そこにある危機であるからして、パスワードのハッシュ方法をSHA512に変えるOSもぼちぼち出てきた。
そういったOSにおいて、暗号化したパスワードでユーザ情報の操作をするには、とうぜんパスワードをSHA512で暗号化しなければならない。

ということで、ある文字列をSHA512暗号化する方法を示す。

パスワードの書式での暗号化

SHA512で暗号化だなんていうのは簡単なのだが、しかし、パスワードファイルで使われる形式での暗号化となると、ちょっと工夫が必要だ。

パスワードファイルの形式は以下の通り。

$<ハッシュ方式>$<salt>$<ハッシュ後のパスワード>

要するにこういう形式での出力をしてくれるコマンドなりスクリプトでなければならない。
代表的なものでは、opensslコマンド。

 

Opensslコマンドのつかいかた

openssl passwdという書式で使う。

$ openssl version
OpenSSL 0.9.8y 5 Feb 2013
<中略>
Usage: passwd [options] [passwords]
where options are
-crypt             standard Unix password algorithm (default)
-1                 MD5-based password algorithm
-apr1              MD5-based password algorithm, Apache variant
-salt string       use provided salt
-in file           read passwords from file
-stdin             read passwords from stdin
-noverify          never verify when reading password from terminal
-quiet             no warnings
-table             format output as table
-reverse           switch table columns

 

だからたとえば、MD5形式で、saltを”SALTsalt”とし、パスワードを”test”とするならば、 以下のようにする。

$ openssl passwd -1 -salt "SALTsalt" "test"
$1$SALTsalt$CEvzkj.qgOcLTyU2B5Kg3.

しかし上述のオプション一覧を見ると分かるのだが、sha512形式には対応していない。

 

SHA512は…いまならperlとかpython

ここまで引っ張ってナニだが、一発でSHA512ハッシュしてくれるコマンドは見つけられなかった。
Linuxのmkpasswdも新しければ対応しているようなのだがまだ一般的ではない。
そこでperl, pythonを使う。
以下のようにする。

saltを”SALTsalt”とし、パスワードを”test”とする。

perl

$ perl -e 'print crypt("test", "\$6\$SALTsalt");'
$6$SALTsalt$gH47I0mRGadJVVlIpeTxVlYw.SjkPOZ7lJoGkqOyhyeUJ7PV5QWuYpIG6D5ggew6RXLpl1eA72TpgX5pGDpr/.

python

$ python -c "import crypt, getpass, pwd; print crypt.crypt('test','\$6\$SALTsalt\$')"
$6$SALTsalt$gH47I0mRGadJVVlIpeTxVlYw.SjkPOZ7lJoGkqOyhyeUJ7PV5QWuYpIG6D5ggew6RXLpl1eA72TpgX5pGDpr/.

 

FreeBSDにおける実際の使いどころは以下の記事にて。

[FreeBSD] 無人でのユーザ追加

おしまい。

No tags for this post.

[FreeBSD] 9.2-RC3のブート時ロゴがダイ・ハードに。

Pocket

 

あちこちで話題になっておりますが、FreeBSDを9.2-RC3に上げたらブート時のロゴがこうなりました。

silverdragon

元ネタはダイ・ハードですな。

nakatomi

 

FreeBSD fireelement 9.2-RC3 FreeBSD 9.2-RC3 #0 r254795: Sat Aug 24 20:25:04 UTC 2013     root@bake.isc.freebsd.org:/usr/obj/usr/src/sys/GENERIC  amd64
No tags for this post.

Windows xpのntbackup.exeで作ったバックアップをWindows 7でリストアする

Pocket

 

Windows xpには標準でバックアップツールが付属している。
ntbackup.exeというツールである。

使い方は以下のサイトに詳しい。

差分バックアップと増分バックアップの違い
http://www.atmarkit.co.jp/fwin2k/win2ktips/305butype/butype.html

しかし、ntbackup.exeには大きな穴がある。
それは、ntbackup.exeで作成したバックアップファイル(拡張子.bkf。以降.bkfファイル)をWindows 7で読めないこと。
これは大ダメージ。

なんでも、ntbackup.exeが標準装備だったのはxp, server 2003が最後だったそうである。
さてどうやってリストアするか。
結論として、Windows 7 home editionしか持っていないのだったら、xpを抹殺してはいけない。
すくなくともライセンスは持っておくこと。

以下、詳細。

対策1: MSのツールを使う。

Microsoftから.bkfリストア専用のツールが公開されているので、それを使えばよい。
もともと、.bkfファイルを読めるツールは、Vista, Server 2008用には公開されていた。
xpから7に、Vistaを飛び越してアップグレードするユーザが多いため、7, Server 2008R2用にも公開された、という経緯がある。

NT Backup Restore Utility

しかし。

MSツールの制限(Enterprise edition以上じゃないとダメ)

そのツールは以下から入手できる。

Windows 7 および Windows Server 2008 R2 用の Windows NT バックアップ/復元ユーティリティについて

ただし以下のような条件がある。

「この更新プログラムを適用するには、コンピューターに以下のいずれかのオペレーティング システムが搭載されている必要があります。
•英語版の Windows 7 または Windows Server 2008 R2
•EN-US 言語パックがインストールされている、英語版以外の Windows 7 またはWindows Server 2008 R2」

「EN-US 言語パック」が必要なのだが、UltimateかEnterpriseいずれかにしかインストールできないという・・・。

Language packs
Install language packs using Windows Update

  Windows 7言語パックの仕組み

厳密に言うと、言語パックにはMUI (Multi-language User Interface) と LIP (Language Interface Pack)の二つがある。
MUIはUltimate, Enterpriseにしかインストールできない。
LIPにはどのeditionにもインストールできる。

しかしLIPは基本の言語(parent language)を変えることができない。
というのも、LIPは複数言語が使われる国のために作られているものだから。
たとえば、スペインのWindows 7ではLIPでバスク語に変更できる。
こういった目的であるから、日本語版Home editionにEN-USをインストールすることはできない。

MUIがUltimate, Enterpriseにのみ許可されている理由は、複数の国で事業を展開する「ビジネス向け」の機能だから。

詳細(原文)は以下。
Language pack for Windows 7 Home Edition

 

MSツールのさらなる制限(WSUSで許可されてなかったら詰み)

よろしい私のWindows 7はEnterprise版である。
だからインストールしようではないかという方。

しかし仮にWindows 7がEnterprise版だとしても、これらのツールは原則、Windows Update経由で入手する必要がある。

個人使用のPCならともかく、企業内LANで使用しているPCだと、セキュリティポリシーってものがある。
調べた限り、上記の.bkfリストアツール、EN-US 言語パックのうち、少なくとも言語パックはWindows Update経由でしかインストールができない。
企業内からのWindows UpdateがWSUSサービスで管理されている場合、この言語パックがWSUSで許可されていないとインストールができないのである。

Home Editionしか持っていなければ即時、Enterprise Edition以上でも言語パックが入手できなければ詰みである。

対策2: xpからntbackup.exeを持ってきて動かす

こうなったらもうxpを使うしかない。

xpがあればxpで.bkfからリストアして、そのファイルを7に移す。
あるいは、xpからntbackup.exeを持ってきて動かす。

後者の場合、systemフォルダにあるntbackup.exe他、以下のファイルを持ってきて、Windows 7で実行する。
ありがたいことに、何とか動く。
さっさとリストアして.bkfは捨ててしまおう。

ntbackup.exe
ntmsapi.dll
vssapi.dll

 

というわけで、バックアップはリストア出来る事を確認できて初めてバックアップということを改めて思い知らされた次第である。

 

No tags for this post.