夜更かし日記

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

2008-01-01 [長年日記]

_ []あけましておめでとうございます。

無事に明けました。 今年も何事も無ければよいですね。

_ [妊娠1]初泣き

昨日、Cちゃんを寝かしつけてから紅白を見ていました。紅白が終わったぐらいに目覚めて大泣き。

TVの部屋から離れている部屋でCちゃんは寝ていたので、気づくのが遅れて、布団が濡れるぐらい泣いていました。

寝かしつけて、除夜を鐘を聞いてCちゃんの部屋に行くと、同じく目覚めて泣いていました。

2度目なので、寝かしつけは難航しました。

私の布団じゃないと寝ないし、枕は自分のでないと寝ないし。大変でした。

初泣きは、パパがきちんと寝かしつけなかったからという不本意な内容でした。

_ [linux][gentoo]swapの暗号化

ノートPCを持ち出す上で情報を暗号化しないと心許なくなってきたので、調べてみました。

よくまとまっているのは、ファイルシステムごと暗号化する方法ファイルとファイルシステムの暗号化になります。

ここでお薦めそうなdm-cryptを試してみます。Gentoo的には、以下のリンクが参考になります。

まず、kernelにdm-cryptサポートを行います。

Device Drivers --> RAID and LVM Support -->
[*] Multiple devices driver support (RAID and LVM)
 <*> Device mapper support
 <*> Crypt target support

次に、AESサポートを追加します。

Cryptographic Options -->
 <*> AES cipher algorithims (i586)

設定を変更したら忘れずにkernelを構築し直します。 私はどちらも組込でなくてモジュールでビルドしていましたので、そのままトライしたら、動作しました。 モジュールだったので、/etc/modules.autoload.d/kernel-2.6に追加しておきます。

dm-crypt
aes

次に、cryptsetupを導入します。

emerge sys-fs/cryptsetup

最後に以下のInfoがでます。

This ebuild introduces a new set of scripts and configuration
then the last version. If you are currently using /etc/conf.d/cryptfs
then you *MUST* copy your old file to:
/etc/conf.d/dmcrypt
Or your encrypted partitions will *NOT* work.
Please see the example for configuring a LUKS mountpoint
in /etc/conf.d/dmcrypt

If you are using baselayout-2 then please do:
rc-update add dmcrypt boot
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.

/etc/init.d/dmcryptファイルが作成されますが、これはbaselayout-2用なので、現在のstableだと1系なので無視でかまいません。baselayoutのバージョンは以下のように確認ができます。

 # eix baselayout
[I] sys-apps/baselayout
     Available versions:  1.11.15-r3 1.12.9-r2 ~1.12.10-r3 ~1.12.10-r4  1.12.10-r5 [M]~2.0.0_rc4 [M]~2.0.0_rc4-r1 [M]~2.0.0_rc6  [M]~2.0.0_rc6-r1 {bootstrap build kernel_FreeBSD kernel_linux pam static unicode}
    Installed versions:  1.12.10-r5(00:06:00 12/31/07)(unicode -bootstrap -build -static)
    Homepage:            http://www.gentoo.org/
    Description:         Filesystem baselayout and init scripts

コンソールでは、1.12.10-r5がハイライトされているので、現在の導入バージョンが確認できます。

次に/etc/fstabを確認し、swapパーティションを確認します。

# grep -e dev.*swap /etc/fstab
/dev/sda2              none            swap            sw              0 0

私の環境では、/dev/sda2がswapパーティションですので、これを暗号化します。

/etc/conf.d/dmcryptの中で、以下の部分のコメントを外します。

swap=crypt-swap
source='/dev/hda2'

source='/dev/sda2'の部分はswapパーティションに合わせます。

最後に、/etc/fstabを書き換えて、暗号化したパーティションを指定します。

#/dev/sda2              none            swap            sw              0 0
/dev/mapper/crypt-swap  none            swap            sw              0 0

/dev/mapper/crypt-swapは、swap=crypt-swapの記述に合わせます。

これで再起動して、swapが暗号化されて有効化されているか確認します。

# cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/mapper/crypt-swap                  partition       498004  0       -1

きちんと、指定した暗号化パーティションを使っていますね。

_ [linux]swapの暗号化(Gentoo以外)

dm-cryptを使用したswapの暗号化として、一般的な手法はAbout Swap Encryption|に書かれています。

swapを有効にする前に、暗号化しちゃうだけで2行を追加するだけなので簡単ですね。

_ [gentoo]本当に暗号化されているのか?

前回の日記でswapを暗号化しましたが、本当にこれって暗号化されているの?という不安があるので、起動スクリプトを読んでみました。

まずは、どこでswaponが実行されているのが見る為に、以下のように探してみます。

# cd /etc/init.d/
# grep swapon *
halt.sh:swap_list=$(swapon -s 2>/dev/null)
localmount:     /sbin/swapon -a

localmountでswaponしていますから、こちらをエディタで開いてみてみます。

59         # We do our swapping here instead of rc so we can get urandom started
60         # before us for people that like an encrypted swap.
61         ebegin "Activating (possible) swap"
62         /sbin/swapon -a
63         eend $?
64
65         # Start dm-crypt mappings, if any
66         start_addon dm-crypt
67 }

swaponにした後に、start_addon dm-cryptが実行されています。これって大丈夫?と少し不安になりますが読み進めてみます。さて、start_addonは、どこで定義してあるのでしょうか?

# grep start_addon *
checkfs:        start_addon dm-crypt
device-mapper:  start_addon dm
functions.sh:# void start_addon(addon)
functions.sh:start_addon() {
localmount:     start_addon dm-crypt

functions.shで定義されていました。 さらに、start_addon dm-cryptは、localmount以外にcheckfsでも実行されていますね。ということは、localmountよりも前にcheckfsで暗号化処理が実行されている可能性がありますね。

さて、functions.shをエディタで開くと以下のような感じです。

687 start_addon() {
688         local addon="$1"
689         (import_addon "${addon}-start.sh")
690         return 0
691 }

import_addonを辿って行くと、つまり、/lib/rcscripts/addons/dm-crypt-start.shが実行されていました。この中身を読むと、

 4 dm_crypt_execute_checkfs() {
 5         dm_crypt_execute_dmcrypt
 6 }
 7
 8 dm_crypt_execute_volumes() {
 9         dm_crypt_execute_dmcrypt
10 }

全てdm_crypt_execute_dmcryptが実行されていて、同じ処理なんですね。さて、その中でswapを処理している処理は下記になります。

22         elif [ -n "$swap" ]; then
23                 local foo
24                 einfo "Checking swap is not LUKS"
25                 cryptsetup isLuks ${source} 2>/dev/null >/dev/console </dev/console
26                 foo="$?"
27                 if [ "${foo}" -eq 0 ]; then
28                 ewarn "The swap you have defined is a LUKS partition. Aborting crypt-swap setup."
29                 return
30                 fi
31                 target=${swap}
32                 # swap contents do not need to be preserved between boots, luks not required.
33                 # suspend2 users should have initramfs's init handling their swap partition either way.
34                 : ${options:='-c aes -h sha1 -d /dev/urandom'}
35                 : ${pre_mount:='mkswap ${dev}'}
36         else

この処理をみますと、きちんと暗号化されていますね。

さて、偶然上記処理が実行されているメッセージを確認できました。カーネルをシングルモードで起動した時です。

以下のように見れました。

シングルモードで起動したログ

はい。先のスクリプトの通り、AES256bitでハッシュにsha1で鍵は/dev/urandomから生成していますね。

_ [gentoo][linux]swap以外の暗号化(失敗)

swapは暗号化ができたので、他のフォルダを暗号化します。

参考にしたのは、SECURITY dmcrypt6 Using dmcrypt with a loopback deviceになります。

パーティション単位だと簡単に暗号化できますが、パーティション以外だと暗号化したファイルをloopbackでマウントして使うようです。

まずは、暗号化ファイルを作成します。 適当なディレクトリで50MBのファイルを作成します。

# dd if=/dev/urandom of=protected bs=1M count=50
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 17.5552 s, 3.0 MB/s

次に、未使用のloopbackデバイスを確認します。

# losetup -f
/dev/loop0

このコマンドで未使用のloopbackデバイスが表示されます。この場合はもちろん/dev/loop0になります。

先ほど作成した空ファイルとloopbackデバイスにマウントします。

# losetup /dev/loop0 /home/protected

そして、暗号化します。

# cryptsetup -y create mycrypt /dev/loop0
Enter passphrase: <-パスワード入れます。
Verify passphrase: <-確認用に再度パスワード入れます。

きちんと動作しているか確認します。

# dmsetup ls
mycrypt (254, 1)
crypt-swap      (254, 0)

先ほど暗号化したswapと一緒に暗号化したmycryptが出てきていますね。 きちんと動作していますので、ファイルシステムを作成します。

# mke2fs -j /dev/mapper/mycrypt
mke2fs 1.40.3 (05-Dec-2007)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
12824 inodes, 51200 blocks
2560 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=52428800
7 block groups
8192 blocks per group, 8192 fragments per group
1832 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

次にマウントポイントを作成します。

# mkdir -p /mnt/crypt/mycrypt

そして、マウントします。

# mount /dev/mapper/mycrypt /mnt/crypt/mycrypt/

適当にファイルを作って、きちんと動作するか確認します。

最後にアンマウント手順です。

# umount /mnt/crypt/mycrypt/
# cryptsetup remove mycrypt
# losetup -d /dev/loop0

さて、この手順ですが、/etc/conf.d/dmcryptで設定したら壊れます。 /etc/conf.d/dmcryptの方は、フォーマットでLUKS形式を希望しているようです。

ということで、この手順は、上記マウントとアンマウントの手順を独自に設定して使用しないと駄目ということがわかりました。


2008-01-02 [長年日記]

_ [gentoo][linux]swap以外の暗号化その後1

まぁ、失敗といいつつ前回の方法でも暗号化できているのですが、Gentoo流儀できちんと起動したいなぁって、更に調査。

なんと、サンプルが間違っていました。 /etc/conf.d/dmcryptに以下のように書いてあって

85 ## Loopback file example
86 #mount='crypt-loop-home'
87 #source='/dev/loop0'
88 #loop_file='/mnt/crypt/home'
これを参考にして書いたのですが、これが間違いでした。

85行目のmounttargetに修正し、以下のようにしたら無事に起動しました。

92 target='crypt-loop-home'
93 source='/dev/loop0'
94 loop_file='/home/protected'

あと、/etc/fstabにマウント先を記述します。

/dev/mapper/crypt-loop-home     /mnt/crypt/mycrypt      ext3            noatime         0 1

これで起動時に下図のようにパスワードの入力を求められました。

パスワード入力画面

パスワード入力後は、無事に起動し、以下のように暗号化されたファイルもきちんとマウントされました。

# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda3              7637400   4863524   2385908  68% /
udev                     10240       180     10060   2% /dev
/dev/mapper/crypt-loop-home
                        49574      4925     42089  11%  /mnt/crypt/mycrypt
shm                     258056         0    258056   0% /dev/shm

_ [gentoo][linux]swap以外の暗号化その後2~LUKS形式のすすめ

LUKS形式のすすめ

よくよく考えると、自分専用のシステムの場合は、パスワード1個でいいですが、複数人で使用する場合は使えませんね。

今回は暗号化にLUKS形式を使用していませんでしたが、LUKS形式だと複数のパスワードを使用できますので、複数人で使用する場合に向いています。

LUKS形式の作成

それでは、実際にやってみます。

まずは、暗号化するファイル(/home/luks)を作成します。以下のように50MBのファイルを作成します。

# cd /home
# dd if=/dev/urandom of=luks bs=1M count=50
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 17.6258 s, 3.0 MB/s

これを以下のようにloopbackでマウントします。

# losetup -f
/dev/loop1
# losetup /dev/loop1 /home/luks

このloopbackデバイスをLUKS形式で暗号化します。

# cryptsetup luksFormat /dev/loop1

WARNING!
========
This will overwrite data on /dev/loop1 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.

Are you sure?で、大文字のYESでないと失敗します。きちんと英語で(Type uppercase yes)と書いてあるのに、英語だと読み飛ばしてしまい、少しはまりました。

作成したLUKSボリュームである/dev/loop1myluksとしてマッピングします。

# cryptsetup luksOpen /dev/loop1 myluks
Enter LUKS passphrase:
key slot 0 unlocked.
Command successful.

マッピングできたか確認します。

# dmsetup ls
myluks  (254, 2)
crypt-loop-home (254, 1)
crypt-swap      (254, 0)
# ls -al /dev/mapper/
合計 0
drwxr-xr-x  2 root root    120 2008-01-02 16:37 .
drwxr-xr-x 14 root root   3200 2008-01-02 16:37 ..
lrwxrwxrwx  1 root root     16 2008-01-02 23:34 control -> ../device-mapper
brw-rw----  1 root disk 254, 1 2008-01-02 23:34 crypt-loop-home
brw-rw----  1 root disk 254, 0 2008-01-02 23:34 crypt-swap
brw-rw----  1 root disk 254, 2 2008-01-02 16:37 myluks

きちんと、myluksが作成されていますね。

実際に使えるマウントポイントを作成し、マウントします。

# mke2fs -j /dev/mapper/myluks
mke2fs 1.40.3 (05-Dec-2007)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
12712 inodes, 50684 blocks
2534 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=51904512
7 block groups
8192 blocks per group, 8192 fragments per group
1816 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

# mkdir /mnt/crypt/myluks
# mount /dev/mapper/myluks /mnt/crypt/myluks/

エラーもなくマウントができました。 書き込んでみましょう。

# echo test > /mnt/crypt/myluks/test.txt
# cat /mnt/crypt/myluks/test.txt
test

きちんと書けていますね。 一度、全部解除してみます。

# umount /mnt/crypt/myluks/
# cryptsetup luksClose myluks
# losetup -d /dev/loop1

再度、マウントまでして書き込んだファイルが保存されているか確認します。

# losetup /dev/loop1 /home/luks
# cryptsetup luksOpen /dev/loop1 myluks
Enter LUKS passphrase:
key slot 0 unlocked.
Command successful.
# mount /dev/mapper/myluks /mnt/crypt/myluks/
# cat /mnt/crypt/myluks/test.txt
test

きちんと保存されていますね。

自動起動の設定

前の記述のLUKS形式でない方法と同じで、/etc/conf.d/dmcrypt

# tail /etc/conf.d/dmcrypt

target='myluks'
source='/dev/loop1'
loop_file='/home/luks'

/etc/fstabに記述したら

/dev/mapper/myluks      /mnt/crypt/myluks       ext3            noatime         0 1

自動起動できました。もちろん、自動起動時に図のようにパスワードを要求されます。

LUKS形式のパスワード要求

パスワードを入力後、自動的にマウントされます。

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3              7637400   4914844   2334588  68% /
udev                     10240       184     10056   2% /dev
/dev/mapper/crypt-loop-home
                        49574      4925     42089  11%  /mnt/crypt/mycrypt
/dev/mapper/myluks       49072      4917     41621  11%  /mnt/crypt/myluks <=これ
shm                     258056         0    258056   0% /dev/shm

複数の鍵を持たせてみる

さて、本題の複数の鍵を持たせてみましょう。 まずは、どういう状態か見る為にダンプしてみましょう。

# cryptsetup luksDump /dev/loop1
LUKS header information for /dev/loop1

Version:        1
Cipher name:    aes
Cipher mode:    cbc-essiv:sha256
Hash spec:      sha1
Payload offset: 1032
MK bits:        128
MK digest:      43 46 4f de 18 bb 7c 45 35 5f 1a ba 0f 1b 18 7a 0a 41 ef b8
MK salt:        b6 51 1b ac 55 c8 95 cf a3 3d de 35 1f 36 d5 5b
                6a a4 ea ff 10 f0 81 38 43 19 d4 3b 52 f8 77 af
MK iterations:  10
UUID:           24f65d7f-9eee-4a4f-b59c-b5a8b93aaed8

Key Slot 0: ENABLED
        Iterations:             132154
        Salt:                   3a 25 46 8c 55 09 f1 78 32 9e d1 bb f4 42 4b b1
                                a8 58 12 43 13 7a d3 e9 4b fb 35 62 12 84 6c 25
        Key material offset:    8
        AF stripes:             4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

key slotが0~7までありますから、8個まで持たせることができますね。slot 0は、もちろん登録済みですね。

では、鍵を追加してみましょう。

# cryptsetup luksAddKey /dev/loop1
Enter any LUKS passphrase: <=始めに登録しているパスワードを入れます。
key slot 0 unlocked. <=slot 0の鍵で解錠されました。
Enter new passphrase for key slot: <=新しい鍵を入力します。
Verify passphrase:
Command successful.

では、鍵が格納されているか、再度ダンプしてみます。

# cryptsetup luksDump /dev/loop1
LUKS header information for /dev/loop1

Version:        1
Cipher name:    aes
Cipher mode:    cbc-essiv:sha256
Hash spec:      sha1
Payload offset: 1032
MK bits:        128
MK digest:      43 46 4f de 18 bb 7c 45 35 5f 1a ba 0f 1b 18 7a 0a 41 ef b8
MK salt:        b6 51 1b ac 55 c8 95 cf a3 3d de 35 1f 36 d5 5b
                6a a4 ea ff 10 f0 81 38 43 19 d4 3b 52 f8 77 af
MK iterations:  10
UUID:           24f65d7f-9eee-4a4f-b59c-b5a8b93aaed8

Key Slot 0: ENABLED
        Iterations:             132154
        Salt:                   3a 25 46 8c 55 09 f1 78 32 9e d1 bb f4 42 4b b1
                                a8 58 12 43 13 7a d3 e9 4b fb 35 62 12 84 6c 25
        Key material offset:    8
        AF stripes:             4000
Key Slot 1: ENABLED
        Iterations:             133483
        Salt:                   cd a0 56 6a 21 a2 91 df bb 9b f6 b1 b8 77 7d 78
                                1a f0 ee 20 e4 33 4f dc f2 e0 a3 58 a1 67 ca 3c
        Key material offset:    136
        AF stripes:             4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

slot 1に格納されました。 では、slot1で解錠ができるか確認します。マウント済みなのでアンマウントして確認してみます。

# umount /mnt/crypt/myluks/
# cryptsetup luksClose myluks

さて、行ってみましょう!

# cryptsetup luksOpen /dev/loop1 myluks
Enter LUKS passphrase:
key slot 1 unlocked.
Command successful.

きちんとslot 1で解錠ができました。 もちろん、中身もそのままです。

# mount /dev/mapper/myluks /mnt/crypt/myluks/
# cat /mnt/crypt/myluks/test.txt
test

鍵を削除してみる その1

それでは鍵を削除してみましょう。

# cryptsetup luksDelKey /dev/loop1 1
Enter any remaining LUKS passphrase:
key slot 0 unlocked.
Command successful.

マッピングにslot 1の鍵をしましたが、その状態でslot 1が削除できました。

ダンプ結果は、先ほどと一緒なので載せません。

鍵を削除してみる その2

鍵が1個しか登録してない状況で、最後の鍵を削除できるのでしょうか?

# cryptsetup luksDelKey /dev/loop1 0

WARNING!
========
This is the last keyslot. Device will become unusable after purging this key.

Are you sure? (Type uppercase yes):
Command failed.

鍵が削除できそうですね。怖いので最後に実行してみましょう。

鍵を削除してみる その3

slot 0と1に鍵を登録してslot 1を削除するとどうなるのでしょう? まずは、鍵を追加してダンプします。

# cryptsetup luksDump /dev/loop1
LUKS header information for /dev/loop1

Version:        1
Cipher name:    aes
Cipher mode:    cbc-essiv:sha256
Hash spec:      sha1
Payload offset: 1032
MK bits:        128
MK digest:      43 46 4f de 18 bb 7c 45 35 5f 1a ba 0f 1b 18 7a 0a 41 ef b8
MK salt:        b6 51 1b ac 55 c8 95 cf a3 3d de 35 1f 36 d5 5b
                6a a4 ea ff 10 f0 81 38 43 19 d4 3b 52 f8 77 af
MK iterations:  10
UUID:           24f65d7f-9eee-4a4f-b59c-b5a8b93aaed8

Key Slot 0: ENABLED
        Iterations:             132154
        Salt:                   3a 25 46 8c 55 09 f1 78 32 9e d1 bb f4 42 4b b1
                                a8 58 12 43 13 7a d3 e9 4b fb 35 62 12 84 6c 25
        Key material offset:    8
        AF stripes:             4000
Key Slot 1: ENABLED
        Iterations:             136811
        Salt:                   97 4a 06 de 91 52 73 14 b6 60 4b df 0f b4 4e 67
                                f0 5d a5 f9 fd d8 2f 22 4b 82 0f 99 84 6c fe 0e
        Key material offset:    136
        AF stripes:             4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

きちんとslot 0と1が登録されていますね。話は変わりますがslot 1の情報は前回登録したものと違いますね。当たり前だけど。

それではslot 0を削除します。

# cryptsetup luksDelKey /dev/loop1 0
Enter any remaining LUKS passphrase:
key slot 0 unlocked.
No remaining key available with this passphrase.
Command failed.

あ、失敗しました。slot 0を削除しますから、slot 0以外のパスワードを入力する必要がありました。Enter any remaining LUKS passphraseときちんと書いてあるのに。。。

では、もう1度slot 0を削除します。

# cryptsetup luksDelKey /dev/loop1 0
Enter any remaining LUKS passphrase:
key slot 1 unlocked.
Command successful.

成功しました。では、ダンプしてみます。

# cryptsetup luksDump /dev/loop1
LUKS header information for /dev/loop1

Version:        1
Cipher name:    aes
Cipher mode:    cbc-essiv:sha256
Hash spec:      sha1
Payload offset: 1032
MK bits:        128
MK digest:      43 46 4f de 18 bb 7c 45 35 5f 1a ba 0f 1b 18 7a 0a 41 ef b8
MK salt:        b6 51 1b ac 55 c8 95 cf a3 3d de 35 1f 36 d5 5b
                6a a4 ea ff 10 f0 81 38 43 19 d4 3b 52 f8 77 af
MK iterations:  10
UUID:           24f65d7f-9eee-4a4f-b59c-b5a8b93aaed8

Key Slot 0: DISABLED
Key Slot 1: ENABLED
        Iterations:             136811
        Salt:                   97 4a 06 de 91 52 73 14 b6 60 4b df 0f b4 4e 67
                                f0 5d a5 f9 fd d8 2f 22 4b 82 0f 99 84 6c fe 0e
        Key material offset:    136
        AF stripes:             4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

きちんとslot 0だけ削除されました。

これで鍵を追加するとslot 0に追加されるかな? まずは、鍵を追加します。

# cryptsetup luksAddKey /dev/loop1
Enter any LUKS passphrase:
key slot 1 unlocked.
Enter new passphrase for key slot:
Verify passphrase:
Command successful.

さて、ダンプ

# cryptsetup luksDump /dev/loop1
LUKS header information for /dev/loop1

Version:        1
Cipher name:    aes
Cipher mode:    cbc-essiv:sha256
Hash spec:      sha1
Payload offset: 1032
MK bits:        128
MK digest:      43 46 4f de 18 bb 7c 45 35 5f 1a ba 0f 1b 18 7a 0a 41 ef b8
MK salt:        b6 51 1b ac 55 c8 95 cf a3 3d de 35 1f 36 d5 5b
                6a a4 ea ff 10 f0 81 38 43 19 d4 3b 52 f8 77 af
MK iterations:  10
UUID:           24f65d7f-9eee-4a4f-b59c-b5a8b93aaed8

Key Slot 0: ENABLED
        Iterations:             133730
        Salt:                   d4 96 88 d5 67 a7 61 ec bd 67 31 2e 15 e3 d6 f5
                                31 bf c3 ad 0e 15 2d 97 d2 b5 22 10 7f 4e 99 e9
        Key material offset:    8
        AF stripes:             4000

Key Slot 1: ENABLED
        Iterations:             136811
        Salt:                   97 4a 06 de 91 52 73 14 b6 60 4b df 0f b4 4e 67
                                f0 5d a5 f9 fd d8 2f 22 4b 82 0f 99 84 6c fe 0e
        Key material offset:    136
        AF stripes:             4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

きちんとslot 0に追加されました。もう1個追加してみました。

# cryptsetup luksDump /dev/loop1
LUKS header information for /dev/loop1

Version:        1
Cipher name:    aes
Cipher mode:    cbc-essiv:sha256
Hash spec:      sha1
Payload offset: 1032
MK bits:        128
MK digest:      43 46 4f de 18 bb 7c 45 35 5f 1a ba 0f 1b 18 7a 0a 41 ef b8
MK salt:        b6 51 1b ac 55 c8 95 cf a3 3d de 35 1f 36 d5 5b
                6a a4 ea ff 10 f0 81 38 43 19 d4 3b 52 f8 77 af
MK iterations:  10
UUID:           24f65d7f-9eee-4a4f-b59c-b5a8b93aaed8

Key Slot 0: ENABLED
        Iterations:             133730
        Salt:                   d4 96 88 d5 67 a7 61 ec bd 67 31 2e 15 e3 d6 f5
                                31 bf c3 ad 0e 15 2d 97 d2 b5 22 10 7f 4e 99 e9
        Key material offset:    8
        AF stripes:             4000

Key Slot 1: ENABLED
        Iterations:             136811
        Salt:                   97 4a 06 de 91 52 73 14 b6 60 4b df 0f b4 4e 67
                                f0 5d a5 f9 fd d8 2f 22 4b 82 0f 99 84 6c fe 0e
        Key material offset:    136
        AF stripes:             4000
Key Slot 2: ENABLED
        Iterations:             128609
        Salt:                   03 0a 59 40 c1 31 a8 78 35 40 ba 39 81 02 0e b5
                                ab 2b 09 3b e6 b2 12 37 85 b3 8c 18 68 7a d8 ff
        Key material offset:    264
        AF stripes:             4000

Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

順番に追加されますね。

自動起動した場合も以下のように登録された複数の鍵で認証が可能です。 slot0で認証 slot0で認証しました。下はslot2で認証しました。 slot2で認証

鍵を削除してみる その2の再履

では、鍵を全部削除してみましょう。

# cryptsetup luksDelKey /dev/loop1 0
Enter any remaining LUKS passphrase:
key slot 1 unlocked.
Command successful.
# cryptsetup luksDelKey /dev/loop1 2
Enter any remaining LUKS passphrase:
key slot 1 unlocked.
Command successful.
# cryptsetup luksDelKey /dev/loop1 1

WARNING!
========
This is the last keyslot. Device will become unusable after purging this key.

Are you sure? (Type uppercase yes): YES
Enter any remaining LUKS passphrase:
key slot 1 unlocked.
No remaining key available with this passphrase.
Command failed.

WARNING!と警告している割には、最後に残っているパスワードがない(No remaining key available with this passphrase)ということで、最後で削除しきれませんでした。

ということで、鍵が全く無くすということはできないということです。

_ [gentoo][linux]swap以外の暗号化その後3~LUKS形式のすすめ

LUKS形式だと起動時のパスワード入力は2回までリトライさせてくれるので、計3回入力ができますが、LUKS形式ではないと1回で終わります。こういう部分でもLUKS形式の方が良いでしょうね。

失敗した場合のビデオ。文字が小さいので感覚で見るしかないですね。


2008-01-03 [長年日記]

_ [linux]zfs-fuseを調べる

以前から ソラリスに実装されているZFSを使いたいなぁって思っていました。trombik氏から、Linuxでやってみろというお題として、FreeBSDのZFSスナップショットの提示がありましたので、じゃ、Linuxの状況はどうかなぁ~と調べてみました。

まず、ZFSのライセンスが、CDDLなのでLinuxでは使えないそうです。しかしFUZEとはバイナリリンクとなりますので、ライセンスの問題が無くなるのだそうです。

というわけで現在は、fuzeで実装された、ZFS on FUSEがありました。しかし、開発者のblogを見ると、9月にリポジトリとWikiがあったVPSが長期間落ちていてモチベーションが落ちてしまったみたい。

加えて、Cluster File Systems, Incに就職しちゃったそうで、ZFS on FUSEのDMU(なんだろう?)の機能を実装していくそうです。

ただ最後の拡張として、ダイレクトI/Oや非同期I/Oの実装はするそうで、ZFS on FUSEの動作が遅い部分は多少改善されるそうです。

その後は、パッチをもらったらメンテはするだろうけど、精力的な開発は終了だそうです。

さて、ここまで書いてZFS on FUSEの評価がないかな?と思ったらありました。Linuxworld.comの記事でZFS on Linux: It's aliveがありました。この中でベンチマークを取った方がおられるようで、Comparing NTFS-3G to ZFS-FUSE for FUSE Performanceがありました。

この結果を見るとFUSEで実装されたNTFS-3gがXFSと大差ない結果を出していますから、ZFS on FUSEもまだまだ最適化すれば、良い結果が出るようです。先の開発者のblogで出たダイレクトI/Oや非同期処理が入った後だと、もっと結果が良くなるかも知れませんね。

ちなみに、FUSEについては、IBMのdeveloperworksのFUSEによる独自ファイルシステムの開発がとても勉強になりました。

_ [妊娠1]今日のCちゃん~気圧変化は痛いです。

今日は私の実家から奥様の実家へ飛行機移動。

私の実家へ移動する時におやつが無くなって着陸時に大泣きした間違いを犯さないように、たくさんのおやつを用意しました。加えて搭乗前に、Cちゃんが好きなジュースを買い込みました。

買い込んだジュースをすぐに飲むと言うので、二口ほど飲ませて終了。もっと飲むというのですが、ママに会えるよっと言い含めて搭乗。

飛行機に乗るまではご機嫌でしたが、乗ってからは身動きが取りづらくなりますので、イヤイヤを言い出しました。そして、先ほどのジュースを飲みたいと要求。

3口ぐらい飲ませて、おっとっとを食べようねっと気をそらせてジュースを取り上げました。その後は、CAさんにいただいた飴を食べたりと食べ続けました。

そして到着15分前から身動きが取れなくなってから、気圧の変化で大騒ぎ。楽しく食べていたおっとっとやラムネも全て拒否の大騒ぎでした。

もう手がつけられませんでしたので、封印をしていたおしゃぶりをだして、なんとか収まりました。

到着してしまえば、ママに会えるのでご機嫌でした。


2008-01-04 [長年日記]

_ [linux][gentoo]swap以外の暗号化その後4~自動起動の設定 その2

前回の日記で、Gentooでの自動起動設定を行いましたが、このままですと起動時にパスワード入力で止まったままになってしまい、起動できません。

タイムアウト設定が無いかな?って思ったら、やっぱりありました。

--timeout, -t
 The number of seconds to wait before  timeout.  This  option  is
 relevant  evertime  a  password is asked, like create, luksOpen,
 luksFormat or luksAddKey.

あと、リトライの回数設定もありました。これでLUKS形式以外の場合はリトライが無かったですから、できるようになるのかな?

--tries, -T
  How often the input of the passphrase  shall  be  retried.  This
  option  is  relevant  evertime a password is asked, like create,
  luksOpen, luksFormat or luksAddKey. The default is 3 tries.

/etc/conf.d/dmcryptoptions'指定で4回のリトライと20秒のタイムアウトを設定します。

92 target='crypt-loop-home'
93 source='/dev/loop0'
94 loop_file='/home/protected'
95 options='-T 4 -t 20'
96
97 target='myluks'
98 source='/dev/loop1'
99 loop_file='/home/luks'
100 options='-T 4 -t 20'

これが実際のタイムアウトテストの画像です。 タイムアウトテスト

LUKS形式ですと、設定通りにリトライが4回となり、タイムアウトが20秒となりました。しかし、LUKS形式ではない方は、タイムアウトは設定されましたが、リトライは反映されませんでした。

ちなみにタイムアウトした場合は、以下のようにマッピングさえもされません。

$ ls -al /dev/mapper/
合計 0
drwxr-xr-x  2 root root     80 2008-01-04 20:03 .
drwxr-xr-x 14 root root   3160 2008-01-04 11:03 ..
lrwxrwxrwx  1 root root     16 2008-01-04 20:03 control -> ../device-mapper
brw-rw----  1 root disk 254, 0 2008-01-04 20:03 crypt-swap

気になってパスワード間違えの場合を試してみたら、以下のようになりました。

$ ls -al /dev/mapper/
合計 0
drwxr-xr-x  2 root root    100 2008-01-04 20:31 .
drwxr-xr-x 14 root root   3180 2008-01-04 11:32 ..
lrwxrwxrwx  1 root root     16 2008-01-04 20:31 control -> ../device-mapper
brw-rw----  1 root disk 254, 1 2008-01-04 20:31 crypt-loop-home
brw-rw----  1 root disk 254, 0 2008-01-04 20:31 crypt-swap

LUKS形式の場合では、パスワードを間違えた場合には、マッピングされませんが、LUKS形式ではない方は、マッピングされていました。ただし、ファイルシステムはできていないので、マウントには失敗しました。

挙動としては、LUKS形式の方が良さそうですね。

_ [linux][gentoo]swap以外の暗号化その後5~キーファイルを使用する

今までは、パスワード認証で使用してきましたが、パスワードなんて決まり切った文字列になってしまいますので、キーファイルを使用した認証を試してみましょう。

参考にしたのは、公式サイトのWikiのEncryptedVarWithUSBKeyエントリーです。

まずは鍵となるファイルを作成します。

# dd if=/dev/urandom of=key-file bs=1 count=256
256+0 records in
256+0 records out
256 bytes (256 B) copied, 0.00828457 s, 30.9 kB/s

既存のluks形式のボリュームに鍵を追加します。

# cryptsetup -v luksAddKey /dev/loop1 /root/key-file
Enter any LUKS passphrase:
key slot 0 unlocked.
Command successful.

きちんとキーファイルが使えるか確認します。

# umount /mnt/crypt/myluks/
# cryptsetup luksClose myluks
# cryptsetup luksOpen /dev/loop1 myluks -d /root/key-file
key slot 2 unlocked.
Command successful.
# mount /dev/mapper/myluks /mnt/crypt/myluks/
# cat /mnt/crypt/myluks/test.txt
test

もちろん、きちんと使えますね。

さて、ここで疑問がわきました。 ここではddで256byteのランダムデータを入れましたが、最小はどのくらいのサイズなのでしょうか?

manページを見ていますが、キーファイルについては、以下のような記述があるだけのようです。

NOTES ON PASSWORD PROCESSING FOR REGULAR MAPPINGS
~(中略)~
  From a key file: It will be cropped to the size given by -s.  If  there
  is insufficient key material in the key file, cryptsetup will quit with
  an error.

キーサイズで良ければ、LUKS形式だとデフォルトで128bit、LUKS形式でない方はデフォルトで256bitなので、LUKS形式だと16byteでOKということになります。

それでは試してみましょう。

# dd if=/dev/urandom of=key-file2 bs=1 count=16
16+0 records in
16+0 records out
16 bytes (16 B) copied, 0.0034496 s, 4.6 kB/s
# cat key-file2
&#65533;&#65533;&#65533;G&#65533;&#65533;&#65533;S,DM&#65533;a
# cryptsetup luksAddKey /dev/loop1 key-file2 -d key-file
Failed to setup dm-crypt key mapping.
Check kernel for support for the aes-cbc-essiv:sha256 cipher spec and  verify that /dev/loop1 contains at least 261 sectors.
Failed to read from key storage
No key available with this passphrase.
Command failed.
# cryptsetup -d key-file luksAddKey /dev/loop1 key-file2
key slot 2 unlocked.
Command successful.

キーの追加で1度目は失敗しましたが、2度目は成功しました。

では、登録したキーファイルでオープンできるか確認してみます。

# cryptsetup luksOpen /dev/loop1 myluks -d /root/key-file2
Failed to setup dm-crypt key mapping.
Check kernel for support for the aes-cbc-essiv:sha256 cipher spec and  verify that /dev/loop1 contains at least 261 sectors.
Failed to read from key storage
Command failed: No key available with this passphrase.

!

登録にも失敗していますから、もう1回試してみましょう。

# cryptsetup luksOpen /dev/loop1 myluks -d /root/key-file2
key slot 3 unlocked.
Command successful.

! 心配なので、もう1回試してみましょう。

# cryptsetup luksClose myluks
# cryptsetup luksOpen /dev/loop1 myluks -d /root/key-file2
key slot 3 unlocked.
Command successful.

行けちゃいますね。

それでは、もう少し小さいキーならどうなるのでしょうか?

# cryptsetup luksClose myluks
# cryptsetup luksDelKey /dev/loop1 3
Enter any remaining LUKS passphrase:
key slot 1 unlocked.
Command successful.
# dd if=/dev/urandom of=key-file2 bs=1 count=15
15+0 records in
15+0 records out
15 bytes (15 B) copied, 0.000533866 s, 28.1 kB/s
# cat key-file2
&#65533;ZR*V.c&#65533;$&#65533;M_&#65533;
# cryptsetup luksAddKey /dev/loop1 key-file2 -d key-file
Failed to setup dm-crypt key mapping.
Check kernel for support for the aes-cbc-essiv:sha256 cipher spec and  verify that /dev/loop1 contains at least 261 sectors.
Failed to read from key storage
No key available with this passphrase.
Command failed.
# cryptsetup luksAddKey /dev/loop1 key-file2 -d key-file
key slot 2 unlocked.
Command successful.

先ほどと一緒で1回目の登録には失敗しますが、2回目は成功します。 同じく登録したキーで解錠ができるか確認してみます。

# cryptsetup luksOpen /dev/loop1 myluks -d key-file2
key slot 3 unlocked.
Command successful.

今度は1度で解錠ができました。

しかし、解錠ができてしまいましたね。うーん。困ったな(w)

それじゃ、どこまで小さくしても大丈夫か気になりますね。

# cryptsetup luksClose myluks
# cryptsetup luksDelKey /dev/loop1 3 -d key-file
key slot 2 unlocked.
Command successful.
# rm key-file2
# touch key-file2
# cat key-file2
# cryptsetup luksAddKey /dev/loop1 key-file2 -d key-file
key slot 2 unlocked.
Failed to setup dm-crypt key mapping.
Check kernel for support for the aes-cbc-essiv:sha256 cipher spec and verify tha
t /dev/loop1 contains at least 517 sectors.
Failed to write to key storage.
Command failed.
# cryptsetup luksAddKey /dev/loop1 key-file2 -d key-file
Failed to setup dm-crypt key mapping.
Check kernel for support for the aes-cbc-essiv:sha256 cipher spec and verify tha
t /dev/loop1 contains at least 261 sectors.
Failed to read from key storage
No key available with this passphrase.
Command failed.

うーん。駄目なようですね。1回目のキー登録エラーは、Failed to write to key storageで書き込みに失敗でしたが、2回目のエラーはFailed to read from key storageで読み込みエラーになりますね。

さすがに空ファイルは駄目なようですね。それでは、1byteで試してみましょう。

# dd if=/dev/urandom of=key-file2 bs=1 count=1
1+0 records in
1+0 records out
1 byte (1 B) copied, 0.000234667 s, 4.3 kB/s
# cat key-file2
6
#
# cryptsetup luksAddKey /dev/loop1 key-file2 -d key-file
Failed to setup dm-crypt key mapping.
Check kernel for support for the aes-cbc-essiv:sha256 cipher spec and  verify that /dev/loop1 contains at least 389 sectors.
Failed to read from key storage
No key available with this passphrase.
Command failed.
# cryptsetup luksAddKey /dev/loop1 key-file2 -d key-file
key slot 2 unlocked.
Command successful.
# cryptsetup luksOpen /dev/loop1 myluks -d key-file2
key slot 3 unlocked.
Command successful.
# mount /dev/mapper/myluks /mnt/crypt/myluks/
# cat /mnt/crypt/myluks/test.txt
test

あら、1byteのファイルでキー登録もできて、解錠にも成功しました。最悪1byteでもOKなんですね(汗)

それじゃ、手入力のパスワードも1文字でOKなのかな?

・・・・ごそごそ

あぁ。OKでした。それじゃ、パスワードに何も無しだとどうなるのかな? あぁ、こちらも同じように解錠の1回目でエラーがでましたが、2回目で解錠ができました。

ま、怖いのでパスワードなしや1文字パスワードは使わないようにしましょう。

_ [linux][gentoo]swap以外の暗号化その後6~自動起動の設定 その3 キーファイルを使う

キーファイルの使い方がわかったので、自動起動時にキーファイルを参照するようにしてみましょう。

/etc/conf.d/dmcryptを開いて、下記のように101行目にkey=で始まる部分を追加します。

 97 target='myluks'
 98 source='/dev/loop1'
 99 loop_file='/home/luks'
100 options='-t 20'
101 key='/root/key-file'

再起動をして確認をしてみましょう。

のように、キーファイルでの認証なので、パスワード入力を求められず、指定されたファイルで認証が完了してすすみました。

キーファイルで認証

_ [linux][gentoo]swap以外の暗号化その後7~自動起動の設定 その4 USBメモリの中のキーファイルを使う

キーファイルで認証できるようになったので、キーファイルをUSBメモリに入れて認証してみましょう。

/etc/conf.d/dmcryptの中を以下のように修正します。

 97 target='myluks'
 98 source='/dev/loop1'
 99 loop_file='/home/luks'
100 options='-t 20'
101 #key='/root/key-file'
102 key='key-file'
103 remdev='/dev/sdb1'

ちなみに、USBメモリが/dev/sdb1で、その中の一番上にkey-fileがあるという想定で記載しています。

さて、これで起動すると図のようにキーファイルが見つからなくて失敗します。

USBメモリから読み出し失敗

実行しているスクリプトである、/lib/rcscripts/addons/dm-crypt-start.shを読んでみると、バグが潜んでいました。

80行目と89行目です。

オリジナル80行目:if [ ! -e "${mntrem}${key}" ]; then

とありますが、これを以下のようにしないと行けません

修正版80行目:if [ ! -e "${mntrem}/${key}" ]; then

同様に、89行目も以下のように修正します。

オリジナル89行目:key="${mntrem}${key}"
修正版89行目:key="${mntrem}/${key}"

この修正によって、図のように無事に起動できました。

USBメモリでの認証成功

もちろんUSBメモリが事前に刺さって無くても図のようにUSBメモリの挿入待ちを行います。

USBメモリの差し込み待ち

本家のこのバグは登録済みかな?と思ったら、hiyuh氏が先に検索してくださっていて、sys-fs/cryptsetup-luks - Ability to find the key device [PATCH] in dm-crypt-start.shに既に修正済みのスクリプトが登録されていました。

パッチは私が使用しているのstableの sys-fs/cryptsetup 1.0.5-r1ではなく、現在開発中のsys-fs/cryptsetup-luksの方ですが、アップデートされちゃうんでしょうね。たぶん。。。

あと、USBメモリから読み込む部分の処理ですが、

  1. マウントポイントである/mnt/dev/sdb1を作成
  2. ROでマウント
  3. キーファイル読み出し

という手順でした。

さて、USBメモリを/dev/sdb1と記載しましたが、この方法だと別のデバイスを追加で接続した場合に変わっちゃう場合がありますよね。

ここでudevの力が発揮されます。 /deb/sdb1は以下のようにリンクが張られています。

$ ls -al /dev/disk/by-id/usb-GH_PicoBoost_07751E80008D-0\:0-part1
lrwxrwxrwx 1 root root 10 2008-01-05 10:25 /dev/disk/by-id/usb-GH_PicoBoost_07751E80008D-0:0-part1 -> ../../sdb1

このリンクはデフォルトの/etc/udev/rules.d/60-persistent-storage.rulesで作成されていました。名前の通りストレージデバイスの 作成ルールが記載されており、以下のルールでリンクが作成されています。

41 KERNEL=="sd*[!0-9]|sr*|cciss?c[0-9]d[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
42 KERNEL=="sd*[0-9]|cciss*p[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n"
$env{ID_BUS}
usb-GH_PicoBoost_07751E80008D-0:0-part1
$env{ID_SERIAL}
usb-GH_PicoBoost_07751E80008D-0:0-part1
n
usb-GH_PicoBoost_07751E80008D-0:0-part1

$env{ID_SERIAL}は、以下の情報を元に構成されています。

$cat /proc/bus/usb/devices
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=0a6b ProdID=000a Rev= 1.00
S:  Manufacturer=GH
S:  Product=PicoBoost
S:  SerialNumber=07751E80008D
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=200mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

ここのSerialNumberはメーカ側が設定するシリアル番号ですので、これが同じ番号の製品もあります。

今回、私が使用したグリーンハウスさんのUSBメモリは、シリアル番号が設定されていますので、たぶん、GH_PicoBoost_07751E80008D-0:0の組合せでmacアドレスのように一意に特定することができると思われます。

これを使って/etc/conf.d/dmcryptを以下のように書き換えて実行したら、うまく行きました。

 97 target='myluks'
 98 source='/dev/loop1'
 99 loop_file='/home/luks'
100 options='-t 20'
101 #key='/root/key-file'
102 key='key-file'
103 #remdev='/dev/sdb1'
104 remdev='/dev/disk/by-id/usb-GH_PicoBoost_07751E80008D-0:0-part1'

これで望み通りの動きをするようになったな(にやり)

_ [gentoo][linux]pam_usb~序章

先の日記でUSBメモリからファイルが読めなかったのでいろいろと調べていたら、pam_usbでUSBメモリで認証できるらしいという情報を見つけました。

Gentoo的には、以下が参考になると思われます。

先のキーファイルと組み合わせれば、USBメモリを指すだけで暗号化ファイルも開いて、ログインもできちゃいますね。

ちなみに、USBメモリの中にキーファイルじゃなくて、暗号化ファイルを入れちゃうと言うことも、たぶんできますから、もっと楽しくなっちゃうかも?

とりあえず、もう眠いので、夜更かしはこの辺で。


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つのファイルは全く同一でした。これが関係するのかな?

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


2008-01-06 [長年日記]

_ [linux]pmountの設定 その1

背景

昨日の日記でpam_usb バージョン0.4.2で導入された、pmountをきちんと設定してみようと思います。

pmountは、ポリシーベースのマウントの実行形式です。 通常は/etc/fstabに記載されているデバイスしか、ユーザはマウントできませんが、pmountのポリシー定義でユーザでもマウントが実現できるようになります。

今のところCUIのLinuxでのpam_usbでの認証では、不具合が出ていませんが、ユーザ権限でpamusb-checkを実行すると、ユーザが認証に使用するUSBメモリをマウントできないため、失敗に終わります。

ということで、きちんと設定してみましょう。

設定

  1. plugdevグループに、使用許可をするユーザを追加

自分自身をplugdevに追加しましたので、設定を反映させるために一度ログインし直します。

シェルの環境を更新するために、いつもログインし直していますが、何かコマンド一発で更新されないのかなぁ。

一応、su - <ユーザ名>で自分自身に変更することで、更新されたか?確認はできましたけど。

確認

それでは、マウントしてみましょう。

$ pmount /dev/disk/by-id/usb-GH_PicoBoost_07751E80008D-0\:0-part1 /mnt/GH_PicoBoost/
Error: '/' must not occur in label name

あれ? マウントできません。きちんと使い方を知らないと駄目ですね。 man pmountをすると、以下のような内容が書かれていました。

pmount device [ label ]

  This will mount device to a directory below /media if policy is met
  (see   below).   If  label  is  given,  the  mount  point  will  be
  /media/label, otherwise it will be /media/device.

どうも/media以下にマウントされるようですね。

$ pmount /dev/disk/by-id/usb-GH_PicoBoost_07751E80008D-0\:0-part1
$ ls -al /media/
合計 12
drwxr-xr-x  3 root  root  4096 2008-01-06 09:52 .
drwxr-xr-x 19 root  root  4096 2008-01-05 17:39 ..
-rw-r--r--  1 root  root     0 2008-01-05 17:39 .keep_sys-apps_hal-0
drwx------  3 idani idani 4096 1970-01-01 09:00 disk_by-id_usb-GH_PicoBoost_07751E80008D-0:0-part1

はい。きちんとマウントができました。

もちろん、アンマウントもできました。

$ pumount /media/disk_by-id_usb-GH_PicoBoost_07751E80008D-0\:0-part1
$ ls -al /media/
合計 8
drwxr-xr-x  2 root root 4096 2008-01-06 09:55 .
drwxr-xr-x 19 root root 4096 2008-01-05 17:39 ..
-rw-r--r--  1 root root    0 2008-01-05 17:39 .keep_sys-apps_hal-0

気づいたこと

Gnome環境を構築した時に、マウントポイントが/mntから/mediaに移ったのかと思いましたが、実はpmountのポリシー設定が影響しているんですね。

/etc/fstabに記述する一般的なマウントポイントは/mntで、pmountが作成するマウントポイントが/mediaということですね。

man pmountを読んでいくと、/etc/pmount.allowに許可するデバイスをリストアップするように書かれているのですが、これを設定しなくても動作しました。

とりあえず、動作したので、これ以上は追いませんが、また、わかったら追記しましょう。

謎が解けた!

きちんとman pmountに書いてありました。

device   is   removable   (USB,   FireWire,   or   MMC   device,    or
/sys/block/drive/removable  is 1) or whitelisted in /etc/pmount.allow.

リムーバブルデバイスはデフォルトでOKなんですね。 具体的には、cat /sys/block/drive/removableで1が返ってくるデバイスです。それ以外は、マウントができないので/etc/pmount.allowに記載するのですね。

補足1

USBデバイスのマウントで調べると、だいたいdebianのusbmountが引っかかりますが、Gentooには無いようでした。

また、こちらのMLの内容を信用すると、usbmountは軽量だけどrootで実行されるということでした。

補足2

GentooでSDカード&MMCリーダの設定方法がWikiに記載されていました。ここでは/etc/pmount.allowをきちんと記載していますね。

あと、udevで自動マウントを実行しているのもポイントですね。

_ [gentoo][linux]pmountの設定 その2

hal -> D-Bus -> pmountで自動マウントできなかったかしらん? と思ったので調査。

# emerge -Dpv pmount
[ebuild   R   ] sys-apps/pmount-0.9.16  USE="-crypt -hal" 0 kB

hal関係が一緒にコンパイルされてないですね。cryptはcryptsetupで使用したデバイスをマウントするのに必要なようです。

それではUSEフラグを追加してビルドし直しましょう。

#echo sys-apps/pmount crypt hal >> /etc/portage/package.use
#emerge -Dv pmount

あ、これでも自動マウントができないですね。

よくよく調べると、pmount-halというのが追加されます。

$ equery files pmount
[ Searching for packages matching pmount... ]
* Contents of sys-apps/pmount-0.9.16:
/etc
/etc/pmount.allow
/usr
/usr/bin
/usr/bin/pmount
/usr/bin/pmount-hal
/usr/bin/pumount
/usr/share
/usr/share/doc
・・・・・以下続く

これが関係するかもしれないですね。

_ [gentoo][linux]pmount-hal

前の日記の続きです。 pmount-halは、halからデバイス情報を聞いて、最適なマウントオプションを選択してくれるようです。

$ pmount-hal /dev/disk/by-id/usb-GH_PicoBoost_07751E80008D-0\:0-part1
process 4377: arguments to dbus_message_new_method_call()
were incorrect, assertion "_dbus_check_is_valid_path (path)"
failed in file dbus-message.c line 1074.
This is normally a bug in some application using the D-Bus library.
 D-Bus not built with -rdynamic so unable to print a backtrace
アボートしました

駄目っぽいですね。では、デバイスを直接指定してみましょう。

$ pmount-hal /dev/sdb1
$ ls -al /media/
合計 12
drwxr-xr-x  3 root  root  4096 2008-01-06 11:43 .
drwxr-xr-x 19 root  root  4096 2008-01-05 17:39 ..
-rw-r--r--  1 root  root     0 2008-01-05 17:39 .keep_sys-apps_hal-0
drwx------  3 idani idani 4096 1970-01-01 09:00 usbdisk

きちんとマウントができました。マウントポイント名が、halから情報を取ってきていて変わっていますね。

$ mount
・・・中略・・・
/dev/sdb1 on /media/usbdisk type vfat (rw,noexec,nosuid,nodev,quiet,shortname=mixed,uid=1000,gid=1000,umask=077,fmask=0177,dmask=0077,iocharset=utf8)

その他は変わってないような気がします。

_ [linux]unionfs~序章

ホントは休み中にunionfsまで勉強したかったのですが、pam_usbを飛び入りで勉強したので手が回りませんでした。

今日十にできるかな?

とりあえず、ぐぐった参考リンクだけメモ

_ [妊娠1]今日のCちゃん~関東へ帰還

帰省先から自宅へ帰るために、こだまに乗って移動。

ベビーカーを持ってきましたが、もう2歳だから必要ないですね。実家から新幹線乗り場まで、ずっとベビーカーを使用したのですが、さすがに新幹線に乗る時はベビーカーから降りてもらわねばなりません。

下ろした瞬間からグレグレ。

グレ泣きの娘とベビーカーを引きずりながら乗車。こだまのグリーン車なのでスカスカです。

とりあえずベビーカーをデッキに置いて、指定席に荷物を置きに行くと、綺麗なお姉さんの隣でした。ご挨拶もそこそこにデッキに置いたベビーカーを車両の一番後ろの席のスペースに移動させます。

Cちゃんはベビーカーを自分の目の届かないところに置かれるのが不満のようで、抱っこされた状態からベビーカーにしきりに手を伸ばしていました。 しかし、それもすぐに忘れて新幹線の中を探検し出すのでした。

さて、今回、何故こだまにしたかというと、JR東海さんのぷらっとこだまエコノミープランを知ったからでした。

のぞみの指定席の値段で、こだまのグリーン車に乗れるのです。今まで乗ったことの無いグリーン車。使ってみたいですよねぇ。

という思いと裏腹に、Cちゃんを抱っこしてグリーン車(3両あります)を抱っこして5往復し、次に下ろして自分で3往復しました。

たった3両を何度も往復しますので、おばさん方にはクスクス笑われました。

自分で歩き出して2往復目は、ようやくこだまに慣れたようで、大きな声を出しながら歩き出す始末。

私が、「すみません。ごめんなさい。」って謝りながらCちゃんの後についていくと、次の車両からは、「ごめんねぇー。ごめんねぇー。」と言いながら歩き出す始末。

また、駅に着けば、「着いた! 着いた!」とはしゃぎ、しきりに降りようと身振りします。

そうそう、面白かったのはお義母さまと実家の最寄り駅から新幹線の駅まで、各停で移動したのですが、駅についてすぐに「ばーばー。たっち!」とお義母さまに立つように指示を出しました。何をしたいんだろう?と思って、私が代わりに立ち上がって、Cちゃんに聞くと、「パパ、こっちー」と少し離れた場所に行くように指さします。そして、また「ばーば。たっち!」と言いました。

なんだろう?ってお義母さまと二人首をかしげていましたが、降り口を指さして「あっち! あっち!」って大騒ぎ。実は、私たち二人にベビーカーを持たせて降りたかったのですね。その後は、お義母さまが駅に着くたびに、いろいろと話して説明していましたので、降りようと言い出すことはありませんでした。

そんな感じなので、こだまでも駅に着くたびに降りるようにはしゃぎます。しかも、新幹線なので各駅での停車時間が5分だったり各停より長いじゃないですか。それもあってえんえんはしゃがれました。

そんなはしゃっぎぷりも1時間半たった頃には、疲れで電池切れのようでデッキで抱っこして子守歌を歌ってあげていたら、眠りについてくれました。

でも、ここからが大変で、抱っこした状態で席に座りましたが、その体制を維持しなければならなくて身動きができませんでした。

あぁ、隣に綺麗なお姉さんがいるのに。そのまま2時間ぐらいは固まっていましたが、熱海辺りで目を覚ましてもらったら、小田原で降りると大騒ぎ。

新横で降りるのですが、ベビーカーもって、Cちゃんを抱いてだと到底降りれないと思ったので、新横に到着する10分前からデッキに出て準備しました。 ベビーカーがあるものだから、Cちゃんは乗せろと大騒ぎ。根負けて乗せました。新横に着いたら、ベビーカーに乗って上陸です。ベビーカー広げて降りるなんて思いませんでした。あー恥ずかし。

奥様が新横まで自動車で迎えに来てくれたのですが、Cちゃんのはしゃぎようは凄かったです。「ママ! ママ! やったー!!」と何度も何度も社内ではしゃいでいました。


2008-01-07 [長年日記]

_ [linux][gentoo]aufs その1~unionfsから乗換

gentooでuniofsを導入しようとしましたが、stableはカーネルバージョンを決められているので、利用できません。それならマスクに手を出そうかと思いましたが、2.0系になってからは、Gentooではあまり開発が芳しくない感じです。

ソースもgit公開なので、gitまで導入するのも嫌だなぁって思っていたら、uniofsのバージョン1系と同等機能で安定しているaufsというのを見つけました。

ebuildも本家にはまだ入っていませんが、laymanには入っているようです。

早速、laymanの設定をしてトライしてみました。laymanの設定は、むねださんの日記を参考にさせてもらいました。

_ [妊娠1]今日のCちゃん~語彙が増えてきています。

2歳2ヶ月となり結構、人の言う言葉を真似して、語彙を増やしてきています。

正月には、おならをしたことを言う「ぷっ した!」という言葉を覚えて、「パパ! ぷっ した~!」とおならの濡れ衣を着せられました(w)

あとは、「いや」って言葉も覚えて、寒い部屋で服を着替える時に、着替えの拒否に、「いや~!、いや~!」と叫ぶようになりました。グレグレの時は特に使用しています。

他にも語彙を覚えてきていますから、結構楽しくつきあっています。

本日のツッコミ(全3件) [ツッコミを入れる]

_ カッキー [前 (学部時代) に言語学の講義で習ったのですが、言語の取得には「1語期」、「2語期」、そして「多語期」というのがあ..]

_ 管理人 [2語期と多語期の中間ぐらいな気がします。 Cちゃんは言葉のしゃべりが、他の子より遅かったらしい(奥様談)なので、1..]

_ カッキー [良いですねぇ > 2語期と多語期の中間。 興味をかき立てられますねぇ (って見るところが違いますか..).. > ..]


2008-01-10 [長年日記]

_ [gentoo]Apacheの設定が変更された!

Apache 2.2.6-r4からモジュールのビルドも指定するようになってしまった。

具体的には、以下のアップグレードの手順を行う必要有り。

http://www.gentoo.org/doc/en/apache-upgrading.xml

機械的にアップデートしていると、動作しなくなりますね。

あー。びっくりした。

_ [gentoo][linux]ie4slinux

昔々、WINEでWindowsアプリが動作すると知って試したかったのですが、Linuxのデスクトップ環境がなくて断念しました。

幸い、今は手元にあるので、インストールしてみると、あっさりWINEがインストール完了。

目的はIEを動作させたかったのですが、国内ではブームが過ぎているようで日本語のドキュメントが少なかったです。そんなんなので探してみると、ie4slinuxという便利な導入ソフトがありました。

gentooではマスクされていますが、公式サイトでの導入手順だと、WINEとcabextractを導入後は、手作業で入れる手順らしいです。

するっとIE6のセットアップが完了し、問題なく起動しました。ベータ版だとIE7も対応済みだそうです。

試してみましたが、ザクッとXごと落ちたりしてくれて笑っちゃいました。

当面はIE6でもよいので、こちらで使ってみます。

日本語入力も、ひげぽんさんサイトに記載がありました


2008-01-11 [長年日記]

_ [会社]新年会

年明けに新人(バイト?)の方が来られたので、歓迎会もかねて新年会を開きました。昨日、突然決まったのですが、5人なのと和民に行くことが決まっていたので、予約無しで飛び込み。

やっぱりサクッと入れましたが、何かのストレスが溜まっている見たいで、ワインを5本空けて、下世話な話しをしていました。

新人の方の奥さんのカップ数は?とか告白の言葉は?とか、もうやりたい放題。

私は気が気ではなかったのですが、店を追い出されずに追われて一安心。

やっぱり会社の飲み会は、保護者目線なのでゆっくり飲めません。

明日のGentooの飲み会の方が、やっぱり気楽だなぁ。面倒見無くても大丈夫だし。


2008-01-12 [長年日記]

_ [gentoo]新年会

いつものメンバーで新年会。渋谷のハチ公前に18:00に集合して、魚真 渋谷店へ。

当日の15:30に予約しましたが、4人で18時なのでサクッと入れました。19:30ぐらいから、入り口で並ぶ人がいたのに驚き。

trombik氏は、別の飲み会の後なのでテンション下がり気味。matsuuさんとの対決もイマイチでした。matsuusさんは、こいよ!ってアピールしてましたけど。

さすが、魚屋さん経営のお店だけあって、刺身、唐揚げ、おいしかったです。注文してから作るので、結構待ち時間がありますので、注文も自分でスケジュールしながら頼んだ方がよいですね。

魚真 渋谷店は2時間限定なので、粘って20:30に出されて、2次会へ。

静かに飲みたいtrombik氏の要望で、お店を探して、一路、居酒屋 千へ。途中で、看板に焼酎・日本酒のメニューが出ている七半に入って、飲みました。

戸口の前の席だったので、めっさ寒かったです。飲むという話しでしたが、カルピスサワーとかカクテルでした。他の店でも良かったかもね?


2008-01-13 [長年日記]

_ [妊娠1]今日のCちゃん~少しパパは理不尽でした。

なんか、今日はしつけと遊びのOn/Offがイマイチで、Cちゃん冗談なのにパパは本気というパターンが多発して、Cちゃんが泣くことが何度かありました。

その都度、仲直りしていますけど、こういうのは叱り方が悪い方ですよね。気をつけなくちゃ。

今日は昼寝をしなかったので、ご飯を食べた直後の17:30過ぎににサックリ就寝。風呂に入れれなかった。。。。

_ [奥様]無断外泊。

終電が25:00で終わりなのですが、まだ、帰宅しません。今は25:39。連絡もありません。

ただいま、不良妻を進行中。明日の朝の何時に連絡が来るのかな?

仕事と言いながら、飲んでたら許さないぞ。


2008-01-14 [長年日記]

_ [奥様]飲んで帰る

無断外泊かと思ったら、朝にはちゃっかり自宅のリビングで寝ていたり。引田天功みたいな奴です。

聞いてみると、終電で帰宅してから飲みに行っていたそうです。とほほ。


2008-01-19 [長年日記]

_ [妊娠1]今日のCちゃん~ジブリ美術館へ行く

私とCちゃんと友人(女性)の3人で三鷹の[ジブリ美術館|http://www.ghibli-museum.jp/]に行ってきました。

Cちゃんと友人は初対面でしたが、映像展示室の「土星座」辺りで、仲良しになって、ねーさん。ねーさんと話すようになりました。

2歳の子でも十分楽しめました。ちょっと違うところではまってましたけど(w)

まずは、地下1階にある映像展示室「土星座」で「めいとこねこバス」を見ました。Cちゃんはトトロを見せたことはありませんが、画面に食らいついて見ていました。

でも、最後の方のシーンで、おばばバスとおばけ(一般トトロ?)が大笑いするシーンから、抱っこを要求するようになりました。途中、眠かったのか上を向いてたりしてので、抱っこも眠いからかな?って思っていましたが、やっぱり怖かったようです(w)

寝かしつける時に、アニメを思い出してか? すっごく怖がっておしゃぶりさんが欲しいと大泣きでした。でも、睡魔に勝てなくて10分ぐらいして、寝ちゃいましたけどね(w)

その後1階の展示室を眺めましたが、アニメができる仮定は、そんなに興味を惹かなかったようで、すぐに出ちゃいました。

その後は、1階から2.5階へ続く細い螺旋階段が気に入ったようで、3回も上りました。結構、辛かったり。3回目を終えた後はCちゃんは抱っこを要求してきましたし(汗)

友人も2回、一緒に上りましたが、さすがに悪いので3回目は別行動として、友人は2階の展示室を見ていてもらいました。

しかし、3回目を上った後に、友人がいないことに気づいたCちゃんは、

 

と館内で叫ぶ叫ぶ(汗)

慌てて、抱っこして友人を捜しました。今回の特別展示は、3匹の熊で、とっても大きなテーブルとお皿とスプーンがありました。Cちゃんはあまり興味が無かったようですが、2歳ぐらい上の男の子がしていることがしたくて、絵を見たり、椅子に座ろうとしたりしていました。

ネコバスの特大縫いぐるみに興味を示すかと思ったのですが、あえなく無視。たぶん、おばばバスが怖かったんだろうなぁ。。。。

その後、屋上へ向かって大好きな螺旋階段を上って、ロボットに遭遇。でも、スルー。屋上に敷き詰められた木くず?を投げて遊んでいました。

売店に行きましたが、縫いぐるみよりドロップに興味津々で、友人に買ってもらっていました。

そうそう、マッチ箱サイズのネコバス型の鉢植え?みたいな人形がありましたが、友人に抱っこされて、それを触っていたら、落としてしまいました。 店員さんにこめんなさいをしなさいって言ったのですが、事の大きさで謝れなかったのか、私に抱っこされた状態で顔をしっかりと埋めてしまってました。店員さんが笑って許してくれたのでありがたかったですけど。

という感じで、終わりました。生憎、今回は友人に気を遣って、Cちゃんの写真は撮れませんでした。

また、今度、奥様と行く予定なので、その時に写真を撮ります。

_ [妊娠1]今日のCちゃん~食べまくります。

新宿ミロードのパステルでさっきのメンバで晩ご飯を食べてきました。

Cちゃんが食べれるミートスパを私とCちゃんで半分個して食べました。 とてもおいしかったようで、耳元でバナナ食べる?ってささやきましたが、バナナを無視して食べていました。

このお店はプリンがおいしいお店なのですが、玉子アレルギーのCちゃんは食べれませんから、杏仁豆腐にしました。

それでも食べ慣れてなかったので、3,4口ぐらいでした。代わりにオレンジジュースは、ゴクゴク飲んでました。

隣の夫婦が、よく食べる子だって見ていました。

_ [妊娠1]今日のCちゃん~おまけ。パパの失敗談

12:30に出発して、18:00までおむつ替えをしなかったので、さすがにキャパオーバーでズボンまで浸水。

慌てて帰りの電車の中で交換して、シートには私のジャケットを敷いて座らせました。そしたら途中から座らなくなって、シートの周辺を行ったり来たり。 どうも、出したみたいでした。

駅について、再度おしめを交換して、ゆるゆると帰宅しました。

_ [妊娠1]今日のCちゃん~さよならねーさん。

新宿で友人と別れましたが、わかる瞬間にバイバイをCちゃんと友人は交わしているのですが、Cちゃんは理解をしてなかったみたい。

その後、友人がいないことに気づいたCちゃんは、新宿駅で大騒ぎ

慌てて私が、ねーさんとはバイバイしたやんって教えると、

 

って何度も何度も叫んでいました(w)

_ [gentoo]呼び出しと再起動

raneさんからshindoさんを呼び出し。

アレですかね。校舎裏にすぐ来いって感じでしょうか?

私からshindoさんにメールしたらすぐにIRCに来て下さって、gdpのIRCで話し合い。

冗談交じりに脅しも入って、ハンドブックを本家に追従することになりましたとさ。

雄志は、gentoojp-docs-mlに参加して下さい。

以上、業務連絡でした。


2008-01-20 [長年日記]

_ [妊娠1]いつかのCちゃん~バナナ好き

先週辺りからバナナにはまって、朝晩、一本ずつ食べています。

最近は、自分で皮をむけるようになって、初めだけ少し皮をむいて渡すと、後はするするっと自分で全部向いて食べちゃいます。

バナナを食べて一言。

! 

と叫びます。


2008-01-22 [長年日記]

_ [妊娠1]今日のCちゃん~脱兎のごとく

お買い物へ行きましたが、今日はCちゃん関係のジュース、ヨーグルト、食パンは買いませんので、購入要求をしてくるCちゃんの意見は全て却下。

あんまり、ダメダメ言われるので怒ってしまいました。普通は、怒って泣いて、その場で駄々こねるのですが、今日は違いました。

怒り心頭だったみたいで、お店の中で逃走しました。もう、爆走です。

乳製品売り場から野菜売り場へダッシュ。野菜売り場では、バナナがあったので、一瞬機嫌が治りましたが、バナナも購入対象ではないので、却下で、大泣きで逃走しました。

パパはその逃走をほほえましく見ていましたが、近くに保護者が居ないと見たおばさんが、迷子判断をして、連れて行かれそうになりました(w)

最後は、抱っこで機嫌をとりましたけど、逃走は怖いなぁ。。。


2008-01-25 [長年日記]

_ [メモ]TOEIC

会社でTOEICを受験しました。新方式になった初めてのテストでした。難易度が変化したとは思えませんでしたが、最後の方で時間が足りなくなったので、やっぱり難しいのかも?

_ [linux][windows]ATOKを買う

JustsystemさんのATOKを使っています。このためJustsystemさんへの年貢だと思って、Just Suiteを買ったり、一太郎も買ったりしていますが、どうも使わなさそうだし、最近は、OpenOfficeを使ったりしていますので、Atokへ格下げしました。

さて、Atokで嬉しい機能は、予測候補なので、この機能がIMEに取り込んでもらえれば乗り換えちゃいますね。Office2007でできると聞いたのですが、Officeソフト上でしか使えなかったのにはガッカリでした。

Vistaにしたら使えたりするのかな?

ということで、Atok2008+広辞苑を予約しちゃいました。あと、Atok X3も買っちゃいました。

月曜日に、matsuuさんのAtok ebuildを試してみましょう。


2008-01-26 [長年日記]

_ [メモ]家計簿始める

とりあえず、無計画な我が家なので、家計簿をつけることにしました。

いろいろ見ましたが、とりあえず散財.comで始めてみました。

赤裸々に公開しているので、わかる人にはすぐにばれちゃいますねぇ。。。

このサイトは、買った物にコメントをつけて公開しますので、欲しい物の情報もわかりますね。結構、家計簿をつける人達なので、コメントも細かいかも?(w)

_ [妊娠1]今日のCちゃん~家からほとんど出ませんでした。

市役所へ

土曜日ですが、午前開庁で開いていましたので、Cちゃんの保育所更新手続きに市役所へ行ってきました。源泉徴収票が私の分で不備があったので、月曜日に確認をして、再提出となりました。とほほ。

引きこもり

私が眠かったので、昼寝をしたらそのまま夜になっていました。Cちゃんは、暗いけど外へ行くと駄々コネコネ。

私が悪いので何ともかわいそうな事をしてしまいました。

素敵なお洋服届く

いつもお世話になっている方から、お洋服をいただきました。コムサの素敵なモノトーン柄でした。どっか正装が必要なところにはぴったりですね。

ただ、Cちゃんが行儀良くしてくれるか不安ですけど。。。


2008-01-27 [長年日記]

_ [メモ]バナナと残留農薬

先週、ジブリ美術館に一緒に行った友達から、

バナナを食べさせる時は軸の方に農薬が貯まるから、そこは除いて食べさせた方がいいよ。

と助言を受けて、1週間ほど軸を切って食べていました。ところで、この説の根拠があるのかな?と思って調べてみたら、都市伝説みたいでした(w)

ということで、切らなくて良いみたいですね。

_ [妊娠1]今日のCちゃん~大散歩

大散歩

普段は、自宅の前の駐車場ばかりで遊んでいますので、今日は趣向を変えて、少し足を伸ばして谷戸山公園へ行ってきました。

Googleマップの方が距離感がわかりますね。

この公園をCちゃんと二人で一周しました。

Cちゃんが歩いたところ

Cちゃんは、まだまだ歩くのゆっくりなので、図の赤線、青線の部分を1時間かけて歩きました。

Cちゃんの好きな犬を散歩させている人がとっても多くて、犬に会うたびに立ち止まって、ナデナデをさせてもらいました。

夫婦で犬の散歩をかねて歩いておられる方もいて、うらやましい限りです。Cちゃんの為に、犬の手をもってバイバイまでしてくれて、Cちゃん、感激でした(w)

しかし、よくこれだけの距離を歩けたもんです。最後の方の10mぐらいは、抱っこしましたけど。2歳児でよく歩いたもんだ。ホントに。

牛乳ちょうだい

普段、牛乳ちょうだいと言うように話しているのですが、Cちゃんはちょうだいだけしか言ってくれませんでした。

今日は1回だけ言ってくれましたけど、以後は言ってくれません。

とりあえず、言えた記念日ですけど、早く多語期になって欲しい。

爆睡

日記を書いた後に晩ご飯にしましたが、ご飯中にCちゃんは睡魔に襲われて、そのまま夢の中へ。

まぁ、Cちゃん的に押さえたい、バナナとダノンは食べたので良しとしますかね。


2008-01-30 [長年日記]

_ [gentoo]ATOK X3を導入

前回購入したATOKをやっと導入。導入手順は matsuuさんのおかげで、問題なく。

ただ、matsuuさんの方にコメントで書かせていただいた通り、SCIMとIIIMFの起動がかぶっていたので、正常にATOKが使えるようになるまで、少し悩みました。

Windowsと同じ操作感、変換精度で使用できるので大満足でした。

ただ、ATOKパレットが出てこなくて大弱り。ATOKパレットが出ないと変換方法の手順変更や、辞書登録ができません;;

もう少し様子を見てみましょう。


2008-01-31 [長年日記]

_ [gentoo][メモ]翻訳サイト2.0

http://ebiwrite.com/home.html

なにか良さそう。使えるのかな?

_ [妊娠1]今日のCちゃん~取り合い

三輪車できました

保育園で三輪車を習ったそうです。でも、前には行かず、バックしたそうです。それでも嬉しそうだったそうです。

取り合い

玩具の引っ張り合いを友達としたそうです。そしたら二つに外れてしまって、見ていた保育士さんが「あら~ 壊れちゃったねぇ」という声に、二人とも焦った顔に。

相手は、「どうぞ」とCちゃんに譲るも、Cちゃんは「もう、いらないよ~」と下を向いていました。

再度、保育士さんが、「あらあら、壊れちゃったわね。どうする?」と声を掛けると、二人とも「わ~~~ん!!」と泣き出したそうです。

壊れた玩具は、想像通り、すぐに元通りに。その後は、二人で仲良く遊んだそうです。

_ [gentoo]ATOK X3の導入 その2

前回でATOKパレットが出なくて悩みましたが、xorg.confのマルチモニタの設定をシングルモニタに変更したら出てきました。

うちのマルチモニタは、1枚を90度回転させて縦長にして使っていますが、それが悪かったようです。

シングルモニタ設定で出てきたATOKパレットを画面中央に持って行ったら、マルチに戻しても画面中央に居てくれたので、最適な位置へ変更できました。

やっとカスタマイズができます。

_ [gentoo]awesomeを使ってみる

一応、日本タイルのメンバーに入ったので、awesomeを使ってみました。

以前にも一度使ってみましたが、Termを出すこともログアウトすることもできず、あえなくX再起動した苦い経験があります。今回は、ctrl+enterでxtermがでるからという助言を頼りに実行しましたが、マウスの右クリックでしたね。

どうもモディファイラがctlからWindowsキーに変更になったようで、manで見るまで.awesomercを見ても全然動きを理解できませんでした。

1時間ぐらい格闘しながら、そこそこ使えるようになりましたが、タグの移動方法やスクリーンロックの実行方法などわからないし、何より、慣れないので仕事に支障が出るのでGnomeへ戻しました。

あと、2,3時間使えば慣れるんだろうなぁ。。。。。

さて、IRCで中野さんが言っていた起動時にアプリを起動したいというのは、xinitrcかxsessionに書けということらしい。gdmはxinitrcを見てくれないので、試しに.xprofileに書いたら、起動してくれました。

でも、起動後に表示するモニタを選べないのかな?

本日のツッコミ(全1件) [ツッコミを入れる]

_ なかの [いや、それはさすがにしてるんですけど、レイアウトとか自動でできないのかなー、と。 なんか知らないけどそうこうしてるう..]


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

??