夜更かし日記

夜更かし日記 第2夜
夜更かし日記第3夜

2008-01-05 [長年日記]

_ [gentoo][linux]pam_usb その1 バージョン0.3.2

まずは、pam_usbのパッケージをemaerge。

 # emerge -Dv pam_usb

バージョンは、0.3.2が導入されます。

バージョン0.3.2の導入方法ですが、インストールされるドキュメントは、公式サイトのクイックスタートを見て下さいとありますが、既に0.4.2のドキュメントに切り替わっていてわかりませんTT

探してみますと、昨日の日記で書いたLinux: PAM USBを使ってみるがバージョン0.3.2で参考になりました。

後で気づきましたが、HOWTO: pam_usb login with USB memory stickの方も参考になりますね。

以下は、Linux: PAM USBを使ってみるを参考にして作業しています。

とりあえず、USBメモリがあれば、USBメモリで認証。無ければパスワード認証をするようにしてみましょう。

/etc/pam.d/system-authの中を以下のように修正しました。4行目を挿入してみました。

3 auth       required     pam_env.so
4 auth       sufficient   /lib/security/pam_usb.so fs=vfat !check_device
5 auth       sufficient   pam_unix.so try_first_pass likeauth nullok
6 auth       required     pam_deny.so

次に、USBメモリに鍵を生成します。 まずは、鍵を置くUSBメモリをマウントします。

#mkdir -p /mnt/GH_PicoBoost
#mount -t vfat /dev/disk/by-id/usb-GH_PicoBoost_07751E80008D-0:0-part1 /mnt/GH_PicoBoost

鍵を生成します。

# usbadm keygen /mnt/GH_PicoBoost <ユーザ名> 2048
[!] Directory /home/<ユーザ名>/.auth/ not found, creating one...
[!] Directory /mnt/GH_PicoBoost/.auth/ not found, creating one...
[!] Generating 2048 DSA key pair for <ユーザ名>@<マシン名>
[!] Extracting private key...
[+] Private key extracted.
[+] Private key successfully written.
[!] Writing public key...
[+] Public key successfully written.

これでUSBメモリを接続している状態でログインユーザ名を入力すると図のように自動でログインができます。

USBメモリでのログイン

USBメモリが接続されていない場合は、図のようにパスワード入力となります。 パスワードでログイン

ユーザ名を入れないと駄目なのが、思ってたのと違いました。

_ [gentoo][linux]pam_usb その2 バージョン0.4.2 その1

さて、ではマスクされていますバージョン0.4.2を行ってみましょう。 参考になるのは、昨日も紹介しました以下の記事です。

インストール

# echo "sys-auth/pam_usb" >> /etc/portage/package.keywords
# emerge -Dpv pam_usb

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N    ] sys-fs/sysfsutils-2.1.0  771 kB
[ebuild  N    ] sys-apps/eject-2.1.5-r1  USE="nls" 121 kB
[ebuild  N    ] sys-apps/dmidecode-2.9  48 kB
[ebuild  N    ] sys-apps/pmount-0.9.16  USE="-crypt -hal" 425 kB
[ebuild     U ] dev-libs/libxml2-2.6.30 [2.6.27] USE="readline -debug -doc -ipv6 -python -test" 4,616 kB
[ebuild  N    ] dev-python/setuptools-0.6_rc7-r1  244 kB
[ebuild  N    ] dev-python/pyrex-0.9.4.1  178 kB
[ebuild  N    ] dev-python/elementtree-1.2.6-r2  41 kB
[ebuild  N    ] dev-python/celementtree-1.0.2  USE="-doc" 90 kB
[ebuild  N    ] dev-perl/XML-Parser-2.34-r1  225 kB
[ebuild  N    ] dev-util/intltool-0.35.5  132 kB
[ebuild  N    ] sys-apps/dbus-1.0.2-r2  USE="-X -debug -doc (-selinux)" 1,368 kB
[ebuild  N    ] dev-python/pygobject-2.14.0  USE="-debug -doc -examples" 353 kB
[ebuild  N    ] dev-libs/dbus-glib-0.73  USE="-debug -doc (-selinux)" 630 kB
[ebuild  N    ] dev-python/dbus-python-0.80.2  USE="-test" 443 kB
[ebuild  N    ] sys-apps/hal-0.5.9.1-r3  USE="-acpi -crypt -debug -dell -disk-partition -doc -pcmcia (-selinux)" 1,564 kB
[ebuild  N    ] app-misc/hal-info-20070618  117 kB
[ebuild     U ] sys-auth/pam_usb-0.4.2 [0.3.2] USE="(-ssl%*)" 34 kB

Total: 18 packages (2 upgrades, 16 new), Size of downloads: 11,390 kB

インストールするパッケージが多いなぁ。まぁ、入れてみましょう。

pmountのビルドでエラーが出ました。

checking for intltool >= 0.21... 0.35.5 found
checking for perl... /usr/bin/perl
checking for XML::Parser... configure: error: XML::Parser perl module is required for intltool

このエラーの通り、intltoolが無いのが悪い見たい。それじゃ、依存関係に指定しておいてよTT

ちなみに、intltoolというのがあるんですね。

# eix intltool
* dev-util/intltool
    Available versions:  0.35.5
    Homepage:            http://www.gnome.org/
    Description:         Tools for extracting translatable strings from various sourcefiles

それでは、導入しましょう。

# emerge -Dpv intltool

These are the packages that would be merged, in order:

Calculating dependencies... done!

 [ebuild N ] dev-perl/XML-Parser-2.34-r1 0 kB

 [ebuild  N    ] dev-util/intltool-0.35.5  0 kB

Total: 2 packages (2 new), Size of downloads: 0 kB
# emerge -Dv intltool

でゴー。

・・・・

はい。無事にintltoolは導入されました。それでは、続きをゴー!

# emerge -Dv pam_usb

はい。こちらも無事にインストールできました。

設定

まずは、D-Busの設定から。

* You MUST run 'revdep-rebuild' after emerging this package

と警告がでていますので、素直に実行

# revdep-rebuild

おおお。expat関係のアップデートをしていませんでしたので、ぼろくそに出てきました。

さて、revdep-rebuild関係の問題は、たぶん解消できたと思えますので、D-Busを有効にします。

# rc-update add dbus default
 * dbus added to runlevel default

次にhaldを有効にします。

# rc-update add hald default
 * hald added to runlevel default

最後にpam_usbの設定を行います。einfoで以下のメッセージが出ていますので、それに従います。

 * Messages for package sys-auth/pam_usb-0.4.2:

 * There are major between 0.3* and 0.4*. Here are the steps from
 * /usr/share/doc/pam_usb-0.4.2/UPGRADING that apply on Gentoo:
 * 1. Remove .auth directories from home directories
 * 2. rm -rf /etc/pam_usb (now as /etc/pamusb.conf)
 * 3. now you can use pamusb.conf to disable pamusb for individual
 *    services so check how you want to implement your pam config.
 *    (/usr/share/doc/pam_usb-0.4.2/CONFIGURATION)
 * GNU info directory index is up-to-date.

とりあえず、起動できないと怖いので、上記の1,2を実施しましょう。

# rm -rf /home/<ユーザ名>/.auth/
# rm -rf /etc//pam
pam.d/       pamusb.conf

あら。/etc/pam_usb/は自動で削除されたようですね。

また、バージョン0.3.2の導入/etc/pam.d/system-authの変更も元に戻しておきます。

3 auth       required     pam_env.so
4 #auth      sufficient   /lib/security/pam_usb.so fs=vfat !check_device debug
5 auth       sufficient   pam_unix.so try_first_pass likeauth nullok
6 auth       required     pam_deny.so

4行目をコメントアウトして無効化。

ついでに、USBメモリの中の鍵も削除しておきます。

# mount /mnt/GH_PicoBoost/
# rm -rf /mnt/GH_PicoBoost/.auth/
# umount /mnt/GH_PicoBoost/

いろいろつっこんだし、設定も削除しているので、きちんとログインできるか再起動して試してみましょう。

・・・・・再起動中・・・・・・

はい。無事に起動でて、パスワードでログインができました。それでは続けましょう。

まずは、認証で使用するUSBメモリをシステムに登録します。以前の0.3.2では、極論すれば鍵ファイルが入っていればOKでしたので、不正にコピーされたファイルでも認証が可能でした。しかし、0.4.2ではUSBメモリ自身も登録するようです。

登録するには、USBメモリをPCに接続した状態で以下のコマンドを実行します。

# pamusb-conf --add-device=GH-PicoBoost
Please select the device you wish to add.
* Using "GH PicoBoost (GH_PicoBoost_07751E80008D-0:0)" (only option)

Which volume would you like to use for storing data ?
* Using "/dev/sdb1 (UUID: 0191-E541)" (only option)

Name            : GH-PicoBoost
Vendor          : GH
Model           : PicoBoost
Serial          : GH_PicoBoost_07751E80008D-0:0
UUID            : 0191-E541

Save to /etc/pamusb.conf ?
[Y/n] Y
Done.

これで、/etc/pamusb.confに上記の情報がXML形式で登録されました。 ちなみに、以下が登録された情報部分を抜粋したものです。

25 <device id="GH-PicoBoost">
26 <vendor>
27   GH
28 </vendor>
29 <model>
30   PicoBoost
31 </model>
32 <serial>
33  GH_PicoBoost_07751E80008D-0:0
34 </serial>
35 <volume_uuid>
36  0191-E541
37 </volume_uuid>
38 </device>

次は、認証に使用できるUSBメモリとユーザとを関連づける作業になります。

# pamusb-conf --add-user idani
Which device would you like to use for authentication ?
* Using "GH-PicoBoost" (only option)

User            : idani
Device          : GH-PicoBoost

Save to /etc/pamusb.conf ?
[Y/n] y
Done.

これでUSBメモリの登録と同様に/etc/pamusb.confに上記の情報がXML形式で登録されました。

ちなみに、/etc/pamusb.confにXML形式で以下のように追加されています。

65 <user id="idani">
66 <device>
67   GH-PicoBoost
68 </device>
69 </user>

動作確認 その1

ここまでできた場合は、実際に認証ができるかシミュレーションをしてみましょう。

# pamusb-check idani
* Authentication request for user "idani" (pamusb-check)
* Device "GH-PicoBoost" is connected (good).
* Performing one time pad verification...
* Regenerating new pads...
* Access granted.

良好のようですね。

pamに適用

最後に、/etc/pam.d/system-authを以下のように修正します。バージョン0.3.2と同様にに4行目を追加しています。

 1 #%PAM-1.0
 2
 3 auth       required     pam_env.so
 4 auth       sufficient   pam_usb.so
 5 auth       sufficient   pam_unix.so try_first_pass likeauth nullok
 6 auth       required     pam_deny.so
 7
 8 account    required     pam_unix.so
 9
10 password   sufficient   pam_unix.so try_first_pass nullok md5  shadow
11 password   required     pam_deny.so
12
13 session    required     pam_limits.so
14 session    required     pam_unix.so

動作確認 その2

これでログイン時にUSBメモリを挿入しているだけでログインができるようになりました。

図はUSBメモリで認証してログインした場合です。

USBメモリで認証してログイン

図はUSBメモリがなくてパスワード認証してログインした場合です。

USBメモリが無くてパスワードログイン

どちらも無事にログインができました。

_ [gentoo]LiveCDのカスタマイズ

偶然、興味のある記事を見つけたのでメモ http://d.hatena.ne.jp/hideden/20070828

_ [linux][gentoo]swap以外の暗号化その後8~自動起動の設定 その5 USBメモリの中のキーファイルのタイムアウト設定

USBメモリの中に入れたキーファイルで暗号化ファイルを復元できるようになりましたが、タイムアウトが効かなくなりました。

そうですよね。USBメモリの挿入待ちのスクリプトは/lib/rcscripts/addons/dm-crypt-start.shで定義されており、cryptsetupとは無縁なんですから。

それでは再度/lib/rcscripts/addons/dm-crypt-start.shを読んでみましょう。

83   einfo "Cannot find ${key} on removable media."
84   echo -n -e " ${green}*${off}  Abort?(${red}yes${off}/${green}no${off})" >/dev/console
85   read ${read_timeout} ans </dev/console
86   echo    >/dev/console

84行目のメッセージでAbort? yes/noと聞いてきます。そして85行目でユーザからの入力待ちをしていますが、${read_timeoutでタイムアウト指定されています。

それでは、${read_timeoutはどこで設定されているのでしょうか? はい。検索すればすぐに見つかりました。ブート時の起動パラメータからもらっていますね。

231 CMDLINE="`cat /proc/cmdline`"
232 for x in ${CMDLINE}
233 do
234         case "${x}" in
235                 key_timeout\=*)
236                         KEY_TIMEOUT=`parse_opt "${x}"`
237                         if [ ${KEY_TIMEOUT} -gt 0 ]; then
238                                 read_timeout="-t ${KEY_TIMEOUT}"
239                         fi
240                 ;;
241         esac
242 done

そういえば、crypsetupの導入時のeinfoに記載がありましたね。再掲すると以下になります。

This version introduces a command line arguement 'key_timeout'.
If you want the search for the removable key device to timeout
after 10 seconds add the following to your bootloader config:
key_timeout=10
A timeout of 0 will mean it will wait indefinitely

ということで、起動パラメータにkey_timeout=20を追加しました。これで図のようにタイムアウト処理が実現できました。 見るべきところは、Abort? yes/noで、何も入力せずに処理が進んでいるところです。

タイムアウトでの起動

_ [gentoo][linux]pam_usb その3 バージョン0.4.2 その2

pamusb-agent

今のところテストはコンソールのみのLinuxでしていますが、UI付きだとUSBメモリを抜いてログアウト(オフ?)とかしてみたいと思います。それをサポートするのがpamusb-agentになります。

公式サイトのクイックスタートガイドでは、USBメモリを抜いて、スクリーンロックを実行。USBを挿入してスクリーンロック解除というサンプルが用意されています。

ログ

pam_usbのログはsyslogのfacility:authenticationで送られていますので、gentooだと/var/log/auth.log辺りに出ています。

ちなみに、私はsyslog-ngです。

one time padで失敗

pamusb-checkをしていて気づきましたが、one time padで失敗することがありました。

さて、one time padってなんでしょうか? ウィキペディアに書かれていますが、ウィキペディアの内容以上に簡単に説明するために咀嚼できなかったので、そのまま参照して下さい。

さて、本題の部分ですが、悩んで試行錯誤している内に、再生成されてしまって原因を追えなくなってしまいました。

後日遭遇すれば、また原因を追いましょう。

One Time Padの仕組み?(推測)

ホントはソースを読めば早いけど、外側から推測

pam_usbに追加したユーザのhomeに.pamusbというディレクトリを作成し、その中にpam_usbに登録したUSBメモリのプロファイル名.padのファイルを作成しています。

同じくUSBメモリのルートに.pamusbディレクトリを作成し、その中に<ユーザ名>.<マシン名>.padを作成します。

この2つのファイルは全く同一でした。これが関係するのかな?

ちなみに、ワンタイムパッドは、設定で無効にすることも可能ですが、セキュリティ的にも安全で面白い機能なのでもう少しこのまま使ってみようと思います。


2005|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2016|10|

  • 本日:回
  • 昨日:回
  • トータル回
Since 2002/10/26(Sat) Restart 2005/04/05(Tue)

カテゴリ一覧


コメント


Trackback

??