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コードの方がはるかに楽。

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

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

googleqr

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

gAuth

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

 

google-authenticatorの設定

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

 

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

 

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

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

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

 

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

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

 

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にする。

 

認証方法の変更

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

 

sshdの再起動

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

 

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から。

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

ezjail.confへの追記。

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

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

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

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

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

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

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

 

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

 

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

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

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

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

 

そして起動

 

コンソールへ

 

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

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

 

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

 

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

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

 

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

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

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

 

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

No tags for this post.

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

Pocket

 

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

pw(8)

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

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

 

pwでのグループ追加

書式は以下の通り

 

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

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

 

pwでのユーザ追加

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

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

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

 

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

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

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

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

 

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

 

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

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

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

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

 

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

 

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

以上

 

No tags for this post.

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

Pocket

 

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

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

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

MD5からSHA512へ

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

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

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

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

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

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

 

Opensslコマンドのつかいかた

openssl passwdという書式で使う。

 

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

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

 

SHA512は…いまならperlとかpython

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

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

perl

python

 

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

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

おしまい。

No tags for this post.

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

Pocket

 

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

silverdragon

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

nakatomi

 

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は捨ててしまおう。

 

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

 

No tags for this post.