Javaでのパスワードベースの暗号化(openssl互換)

パスワード管理のため、暗号化してサーバーにファイルを置くことでファイルを置くことでパスワードを各端末のどれからでも見れるソフトウェアを作った。(2018/3/28: すみません、 GitHub に上げていたコードを何かの理由で消してしまっていたことに気付きましたが、元コードもないので、リンクを削除しました。)

さて、このソフトを作るにあたって、暗号化後のファイルの形式を何かと合わせておくことであとから扱いやすくしたいと思い、OpenSSL互換にしようと思って調べてみた。
暗号化を行う場合、特に暗号利用モードにCBCを用いる場合は、「鍵」「初期ベクタ」を正しく生成し、それを元に実際の暗号文を平文に戻す。「暗号化方式」「パディングの方式」が合っていれば、この二つを正しくやりとりすれば暗号文をやりとりできるが、暗号化ファイルのフォーマットがソフトにより異なるのでそれに注意する必要がある。また、パスワードを暗号化に用いる場合(PBE)は、鍵導出関数を合わせる必要がある。
OpenSSLの形式を使いたい場合は、基本的にはOpenSSLの暗号文をJava/Perl/Rubyで開く | mixi Engineers’ Blogに掲載されているように、OpenSSLの鍵生成方式に則ってパスワードとソルト(ランダム生成)から鍵と初期ベクタすることになる。手順もだいたいこの通りだが、一部に誤りがあるようで、鍵の長さとハッシュ関数の組み合わせによっては初期ベクタが正しく生成されなかった。Discreet Blog 25.6.2007「OpenSSL の PBE (Password Based Encryption)」のアルゴリズムを参照しながら書くと正しい。

hashed ← 長さ0のバイト列
必要な長さ ← 鍵の長さ + 初期ベクタの長さ(=ブロック長)

while (hashed.length<必要な長さ) {
	if (ループ初回)
		base ← 長さ0のバイト列

	base ← base + (パスワード + salt)

	for (i=0; i<iterationcount; i++) # iterationcountは1で固定
		base ← hash(base)
	
	hashed ← hashed + base
}

key = hashedの前半、鍵の長さの分
iv = hashedのkeyに使わなかった部分の左から必要な長さ

Javaで書くとこんな感じ(SHA-256がハードコーディングされているが、ここの部分を書き換えると他のハッシュ関数も使用可能)(2018/3/28: すみません、 GitHub に上げていたコードを何かの理由で消してしまっていたことに気付きましたが、元コードもないので、リンクを削除しました。)

また、パスワードは当然ユーザーが入力するが、saltに関してはランダムに生成した上でファイルに埋め込む。ファイルは、

Salted__<salt: 8バイト><暗号文>

という形式になっている。これをバイト列として扱い、暗号化/復号化の処理を行う関数は(2018/3/28: すみません、 GitHub に上げていたコードを何かの理由で消してしまっていたことに気付きましたが、元コードもないので、リンクを削除しました。)

ただし、リンク先で指摘されている通り、OpenSSLの暗号化はハッシュ化の繰り返し回数が1で固定されており、ブルートフォースへの耐性がそれほど強くなく、また鍵導出関数そのものもやや古い。そのため、実用的なアプリケーションを作るにあたっては、これをそのまま用いるべきかどうかはよく検討する必要がある。

FreeBSDにPostfixとDovecotをインストールしてメールを送受する

ConoHaのVPSを借りたので、ConoHaのVPSにPostfixとDovecotをインストールして普通にメールできるサーバーを立ち上げた。

Postfixに手元のPCから送信するためには、SASLを利用して認証を行う必要がある(信用できるローカルネットワークからしか送信しない場合は不要)。
SASLは、認証を行うためのフレームワークだそうだ。DovecotのWikiのSASLのページを見ての通り、SASLというのはRFCで決められた仕様で、その実装としてCyrus SASLが標準的だがDovecot SASLもあるということ。

portsからpostfixをインストールする。その時、Cyrus SASLのチェックではなくDovecot 2.xのSASLを使うオプションにする(もちろんCyrus SASLでもできるはず)。dovecotはメール受信に利用するが、Dovecot 2.xのSASLを選択した場合は依存関係で自動的に入るはず。

main.cfを編集する。mydestinationsには、受信したいドメインを指定する。バーチャルドメインを指定する場合は別途指定する。
また、ipv6を使いたい場合は、inet_protocols = ipv4, ipv6とする。
/usr/local/etc/postfix/main.cfに

smtpd_tls_cert_file=/usr/local/etc/postfix/ssl/your-cert-file.crt
smtpd_tls_key_file=/usr/local/etc/postfix/ssl/your-key-file.key
smtpd_use_tls=yes

smtpd_sasl_type=dovecot

smtpd_sasl_path = private/dovecot-auth

と書く。SSLのファイルの場所は置いた場所に合わせる。中間証明書などを使いたい場合は、証明書本体の後に結合する。

/usr/local/etc/postfix/master.cfではsmtpsの部分のコメントアウトを解除し、

smtps     inet  n       -       n       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_sender_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions

というようにする。これで、SASLで認証済み以外は中継を受け付けないようになる。
なお、smtp_recipient_restrictionsはPostfix 2.10.0から使えなくなった(Postfix 2.10 から中継制限の設定が変わった (smtpd_recipient_restrictions はダメ)! – @yuumi3のお仕事日記)とのことで、smtp_relay_restrictionsと書く。

Dovecot側では、/usr/local/etc/dovecot/dovecot.confに

protocols = imap
listen = *, ""

と書き、/usr/local/etc/dovecot/conf.d/10-ssl.confのssl_certとssl_keyの行をコメントアウトしてDovecotと同じく鍵と証明書の場所を書くことで、IMAPSでの受付が可能になる。非SSLでの接続を無効にするため、/usr/local/etc/dovecot/conf.d/10-master.confの該当箇所を下のようにいじるか、下のように書き足す。
また、Dovecot SASLを先ほどのPostfixの設定に合わせるため、/usr/local/etc/dovecot/dovecot.confに

service auth {
	unix_listener /var/spool/postfix/private/dovecot-auth {
		group = postfix
		mode = 0660
		user = postfix
	}
}
userdb {
	driver = passwd
}
userdb {
	driver = passwd
}

と書き足す。

これでdovecotとpostfixをインストールするとメールが受信できるようになるはずなので、確認する。

その他、PCから送信する場合PCのIPアドレスがメールのヘッダに書かれてしまうので、気になる場合は
Remove sensitive information from email headers with postfix | major.ioなどを見ながらフィルタリングする。

/usr/local/etc/postfix/main.cfに

header_checks=regexp:/usr/local/etc/postfix/maps/header_checks

と書き足した上で、ここで指定したファイルに

/^Received\: from .*by your.host.name \(Postfix\) with ESMTPSA/	IGNORE

と書くと、キューに入ったあと実際に送信されるときにこのようなヘッダが削除される。ESMTPSAの部分は受信時には違う文字になるため、自分がつけたヘッダであっても受信時のものはフィルタされない。

ThunderbirdのSendLaterプラグインを鯖で活用する

Thunderbirdのプラグインには、SendLaterというプラグインがある。このプラグイン自体は有効だが、このプラグインは、鯖とノートパソコンで同時に実行し、ノートパソコンが寝ていても鯖で送信されるようにすると、これまで以上に便利になる。やりかたもIMAPで下書きフォルダが共有される状態にし、かつ下書きフォルダがちゃんとIMAP上にあるようにするだけだから簡単だ。と思ったら、(以前はそんな罠がなかった気がするが)罠があった。鯖で送信が完了していれば、ノートを起動したあと、IMAPが同期されると当然下書きフォルダは空になるが、その前にSendLaterが目ざとく発見して送信し、二重送信になってしまうのだ。
二重送信は避けたいが、それ以上に、送信されないことは避けたい。かといって、タイマーをしかけたらそれが完了するまでプラグインを無効化するという運用回避もめんどくさい。設定でどうにかならないか。
というわけで、手元で使うマシンでThunderbirdの設定エディタを起動する。
extensions.sendlater3.sendunsentmessagesをfalseにする。こうすることで、下書きを実際には送信しないようになるようだ。
手元のマシンでこの操作をし、リモートで24時間動いているマシンでは普通に送信するように設定を行うことで、ノートパソコンでSendLaterプラグイン経由で送信したメールは24時間動いているサーバーから送信され、かつ手元のノートパソコンのon/offに関わらず二重送信はされないはずである。
もちろんバージョンによって変わると思うので、きちんと自分で動作を検証してほしい。

それからこの記事を最後まで読んだ読者に一つ良いことを教えてあげよう。
こんなプラグインに頼らないでいい生活が、一番健康的である。

Kyoto Cabinetを64ビット版Windowsにインストール

表題の通り、Kyoto Cabinetを64ビット版Windows 7にインストールした時の手順。

まず、Kyoto Cabinetのソースコードをダウンロードする。32ビット版のバイナリをダウンロードすると32ビット版アプリケーションから使えず、メモリがあんまり使えないので幸せにならない。Javaから使いたい場合はJavaのソースパッケージもダウンロードする。
また、Visual C++が必要になるので、入っていない場合はダウンロードしてインストールする。

コアライブラリのソースコードをダウンロードしたら、すずめのおどりあし kyoto cabinetに従ってVCmakefileを編集する。ただし.newを作る必要性は感じなかった(失敗すればまた圧縮ファイルを解凍して取り出せばよい)。
更に、LIBFLAGS=のところのライブラリパスも、もともと示されているディレクトリは32ビット版のライブラリだったりするので、64ビット版のライブラリに書き換える。当方の環境では「\Lib」→「\Lib\amd64」と書き換えた。存在しないパスは放置でよいようだ。
CL=の部分も、64ビット版に書き換えた(ここが32ビット版になっていると32ビット版のライブラリができてしまう。また、ここのビット数とライブラリのビット数が違うと色々まずいことになったりする。)
ディレクトリに入って

nmake -f VCmakefile libs
nmake -f VCmakefile all
nmake -f VCmakefile binpkg

とするとコンパイルされる。失敗したらエラーメッセージを見ながらがんばる。

するとkcwin32というディレクトリができる。kcwin32とあるがちゃんと64ビット版のファイルになっている。

Javaで使いたい場合はこのkcwin32をJava版のソースのディレクトリに入れる。
先ほどの同様の修正のほか、JDKのパスを自分の環境に合わせて書き換える。

nmake -f VCmakefile

とするとビルドされる。Java版はdllファイルをパスが通っているところ(Windowsなのでカレントディレクトリでよい)において、jarをビルドパスに通すとKyoto Cabinetのサンプルなどが動く。

Kyoto CabinetのライセンスはGPLやLGPLらしい(?)ので、完成したファイルを置いておく。上の面倒な手順を踏まなくともこの圧縮したファイルをダウンロードすると64ビット版Windowsで使えるはずである。ライセンスはKyoto Cabinetのライセンスに準ずるものになるし、もちろん無保証である。

kyotocabinet-1.2.76.tar.gz

kyotocabinet-java-1.24.tar.gz

Thunderbirdを使っているパソコンにウイルスバスターを入れると重い

表題の通り、Thunderbirdを使っているパソコン(Windows 7 Professional 64bits)ウイルスバスターを入れると、主にメール受信時にCoreServiceShell.exeがCPUを食いまくってすごく重くなるという現象にずっと悩まされていた。メール受信時に露骨にCPUをしばらく使い、他に重いプロセスがなければ、音量設定をミュートにしていてもファンの回転音でメール着信に気づけるほどだ。これがパソコンに適したマナーモードだ、とか言ってられないほど重かった。
Thunderbirdは、IMAPのひとつのフォルダを一つのファイルに保存している。これが書き換えられたため、そのファイル全体(メールボックス全体)を見ているのではあるまいか、いや、Thunderbirdなんて有名なソフトだし、メールの添付ファイルスキャンはウェブページの宣伝に書いてあるぐらいだし、天下のトレンドマイクロ社、確かにウイルスバスターについての悪評は色々あるとはいえ、さすがにそんなはずはあるまい。と思いながら、ProcessMonitorをダウンロードしてメール受信中のファイルアクセスを覗いてみた結果、確かにウイルスバスターのCoreServiceShell.exeが(その時は何通も一気にメールを受信していたので)繰り返しファイル全体にアクセスしていることがわかった。そりゃ重いわ。

というわけでトレンドマイクロに問い合わせてみた。

まず、原因切り分けのための質問をいくつかされた。それに回答すると、ThunderbirdのIMAPのデータが入ったフォルダを検索対象から除外設定してくださいとのこと。そうするとメールに対するスキャンが行われないのではないか、と確認すると、Thunderbirdは開く際にファイルを一時ファイルにコピーするので、その時にスキャンされるから問題ないとのこと。これを実施すると、Thunderbird起動時のウイルスバスターが圧倒的に軽くなり、快適にメールが受信できるようになった。

問い合わせ本文も掲載したかったが、掲載の可否を問い合わせたところ、著作権及びThunderbird全てに再現するわけではない(このわかりやすい仕組みで発生しないこともあるとなるとどういう仕組みになっているのかは気になるが)ことから問い合わせ内容の掲載はやめてほしいと言われたので、行った作業のみを記しておく。

また、異なる製品向けの説明ではあるが、Q&Aページの「ディスクアクセスが頻繁に発生するサーバ/クライアントにおいて、ウイルスバスター コーポレートエディションのリアルタイム検索によりサーバ/クライアントへ負荷を与える可能性がある問題 」が該当するとのこと。

# 研究室で研究室ライセンスのウイルスバスターの使用を指示されているから使っているだけで、個人的にはMSEにしたいんですけどね……
# それにしても、昔から宣伝文句でメール添付ファイルのスキャン!とか言っているぐらいなのだし、Thunderbirdぐらいは初期設定で快適に受信できるようにしておいてほしかったのだが……
# そして再現性があるわけでもないと言われたが、「Thunderbirdでは普通に設定していればIMAPのフォルダはひとつにまとまるので、普通に使っていればかなり大きいファイルになる→受信時に更新されてファイル全体をスキャンして重い」という割と仕様通りに見えるわかりやすいが起こる場合と起こらない場合があるというのは、一体どういう仕組みなのかが気になる…… さすがに秘密だろうけど。

FreeBSD 9.1 on VMware Player with GNOME, Xorg

表題の通り。

FreeBSD、意外と面倒。

とりあえずOSインストール。CUIが入る。

GUIを入れる。ソースから入れると何時間かかるかわからないのでバイナリから。makeしても半日はかからなそうなので、portsでxorgをmake install cleanしたほうが賢そうです。あとで別なマシンに入れようとしたらPACKAGEROOTを書き換えてインストールする手法うまくいきませんでしたし。gnome2はすごく時間が掛かるのでpkg_addした方がいいと思います。

PACKAGEROOT="ftp://ftp2.jp.freebsd.org/pub/FreeBSD/ports/amd64/package-9.1-release/Latest/"

をどうにかして環境変数に流しこんであげて、(2013/06/26追記:いつのまにかいきなりpkg_addできるようになっていました)

# pkg_add -r xorg

してXorgを入れて

# pkg_add -r gnome2

してGNOMEを入れる。
VMware ToolsはFreeBSD 9に対応していないので、Hephaestus: Installing VMWare Tools on FreeBSD 9.1を見ながらVMware Toolsを入れる。#vi /etc/stable-supfileの時にFreeBSDバージョンを9か9_1か判断して必要に応じて書き換えること。さもなければ、makeした時にCould not find bsd.compiler.mkとか言われて止まる。

# pkg_add -r xf86-video-vmware xf86-input-vmmouse

してドライバを入れる。

# Xorg -congigure

とかするとxorg.conf.newとかができるのでそれを/etc/X11/xorg.confにコピー。
/etc/rc.confをいじる。

CUiでマウスが有効になっていたら無効に

moused_enable="NO"

GUI周り

dbus_enable="YES"
hald_enable="YES"
gdm_enable="YES"

あとは色々設定を反映させるために再起動。
とりあえずこんなんで動いた。VMware Toolsには相変わらずXが認識されないのとマウスをVmware Playerから出し入れした時の挙動がやや怪しいけど。

あとは、

# vmware-toolbox-cmd timesync enable

なぜかVMware Toolboxは時刻同期の初期設定がDisabledなのでEnabledに。

とりあえずこんなんでハードウェア周り(?)の設定は終わるはず、あとはFreeBSDの普通のマニュアルに沿って日本語周りだの必要なソフトだのを入れていく。
# portsとかから入れていくわけだが、随分時間かかるし、デスクトップで使用するにはちょいきついような。サーバーでは問題にならないが。portsはソースから入れるから革命的な遅さだが、バイナリパッケージをインストールするpkg_addもUbuntuのaptとかのような速さを想像していると絶望するぐらいには遅い。

追記:CUIインストール時?の対応

CUIだからかVMware ESXiとVMware Playerの差なのかわからないが、vmware-toolbox-cmdがライブラリを要求してきて動かないときはforgottheaddress: freebsd 8.2 vmware-toolbox-cmd timesyncに書いてある通り

# ln -s /usr/local/lib/libintl.so.9 /usr/local/lib/libintl.so.8
# ln -s /usr/local/lib/vmware-tools/lib64-63/libpcre.so.0/libpcre.so.0 /usr/local/lib/

とかやると動いた。古いバージョンのライブラリがないという問題。

無理矢理感あって残しておくのも後々問題になりそうで気持ち悪いし、toolboxでの設定を終えたら作ったシンボリックリンクは消してしまったほうがいい気がする。

自宅サーバー立ち上げ

自宅サーバー初心者(@kyos_1704)のサーバーの構築をSkype経由で見たりしていたのでその時のSkypeログとかからおおまかな流れを抜粋。※初心者向けの記事ではない

事前準備

  • ルーターにログインできることを確認する。
    • デフォルトゲートウェイをipconfigで調べて、そのアドレスをブラウザのアドレスバーにいれて接続
    • パスワードがわからなかったりするケースがある
  • 自宅にグローバルIPアドレスが来ていることを確認する。
    • ルーターにログインした時にでも調べる

ハードウェアを組む

  • 好きなように
  • 流用でもいいし、既成品でもいいし、自作できる人なら自作でもいいでしょう
  • 具体的に何かに使いたいならそれに見合う性能や信頼性は必要

OSインストール

  • OSを選んでダウンロードする
    • 初心者ならとりあえずUbuntu Serverとかどうだろう
  • ISOファイルをCDに焼く
  • CDからブートする
  • インストールする、ここで何か余計なものを入れる必要はない。
  • 起動する

設定

  • IPアドレスを設定する
    • IPアドレスを決める
    • 決め方が判らなかったらIPアドレスの仕組みの勉強は後回しにして決められる人が決めてあげる
    • 設定ファイル(Ubuntuとかなら/etc/network/interfaces)に書き込む
    • そのためにsudoのやり方を教える
    • Ubuntu/インストール後の設定とかを参考に設定してもらう
    • よく考えたらCUIのエディタの使い方を教えていないことに気づく
    • Vimを布教する
    • DNS設定も書き込む(新しいUbuntuなら/etc/network/interfaces)
    • ネットワークをリロードする(Ubuntuならsudo service networking restart)
    • ifconfigとかして新しいIPアドレスを確認する
  • sshをインストールする
  • sshを設定する
    • 初期設定は22ポート、パスワード認証可なのでつなぐ
    • WindowsならPuTTYGenとかで鍵を作る
    • .ssh/authorized_keysに貼り付ける
    • PuTTYでのコピペのやり方を教える(ドラッグするとコピー、右クリックで貼り付け)
    • 鍵でつながることを確認する
    • つながらない
    • cat ~/.ssh/authorized_keysして結果を見せてもらう
    • Vimのコマンドモードでそのまま右クリックして公開鍵の冒頭のssh-rsaの最初のsが挿入モードに入るだけになってて入力されてない
    • 直す
    • 鍵で繋がる
    • /etc/ssh/sshd_configを開く
    • 鍵認証のみ有効にする(PasswordAuthentication を見つけてyesからnoにする、コメントアウトされていたらコメントアウト外す)
    • 必要に応じてポート番号も変える(そのままでいい気もする)
    • sshdを再起動する
    • 新しい設定でつながる(Ubuntuならservice ssh restart)
  • ルータにログインして静的NAT(ポート開放などとも表現する)を設定する
  • さっきのsshの他に80, 443あたりをつながるようにする
  • DDNSを設定する
    • ieServerとかにユーザー登録する
    • スクリプトをホームディレクトリ上のディレクトリ(←作る)に設置する
    • crontabを設定する
    • 更新間隔10分とかになってるし、TTLがあるから最大15分とかかかる
    • 酒でも飲む
    • nslookupとかで更新されていることを確認する
    • ついでにログファイルが吐き出されていることを確認する
  • Apacheをインストールする
  • とりあえずsudo aptitude install apache2とかすると起動はしてくれる
  • サーバーのプライベートIPをブラウザに入れてつなぐ
  • It works!
  • さっき設定したDDNSのアドレスを入れてもらう
  • 繋がらなくて絶望する
  • ヘアピンNATは普通のルーターにはついてないので諦める
  • 部屋の外にいる人が教えてあげるか、モバイル回線とか携帯電話を使って外からウェブページが見れていることを確認する
  • とりあえず設定完了
    • 中からもドメインで繋ぐ場合はいくつか方法があるが、面倒なので必要になってから教えることにする
    • クライアントの/etc/hosts(WindowsはC:\Windows\System32\drivers\etc\hosts)をいじる方法はそのパソコンを持ちだした時面倒
    • ヘアピンNATは多分ついてない
    • そのサーバーにdnsmasqとかを突っ込んでそのサーバーの/etc/hostsをいじって、かつルーターのDNS設定を書き換える方法は教えるのが面倒
    • そういえばルーター側でそういうのをいじる機能がついていたらありかもしれない

Pukiwikiを改造して独自の認証を追加するバッドノウハウ

Pukiwikiは便利なので使っている団体も多いと思う。

そしてPukiwikiにはBasic認証がついているし、一応認証をかけることもできるのだが、これは人数などによってはパスワードの管理がめんどくさいこともある。

そこで、Pukiwikiを適当に改造して独自の認証で特定の条件を満たしたもののみが見ることができるWikiを作ることを考える。前提として、最低限PHPでプログラミングができる程度の知識は必要となる。

まず、独自の認証を追加するかどうかに関わらず、.htaccessが有効になっていることを確認する。Wikiのディレクトリが/wiki/とした時に、/wiki/data/以下のファイルとかに直接アクセスされるようでは認証もへったくれもない。こういう外部のアプリケーションを展開するときは.htaccessが有効になっている方が安全だが、どうしても.htaccessが有効にできない(セキュリティ上の理由がApache以外のウェブサーバーなど)ときは、それを適切に設定する。例えば/wiki/に設置した場合なら/wiki/data/につないだ時にエラーが出れば問題ない。AllowOverRideの設定を修正するわけだが、わからない場合は適当に調べること。

さて、それが完了してかつpukiwiki.iniの初期設定が終わったらPukiwikiを改造する。

Pukiwikiのフォルダの lib/auth.php を開くと色々関数が出てくる。read_authとedit_authを見て、これを自分が望むように編集する。概ね、見せて良い相手の場合はreturn true;とかして、そうではない場合は望むエラーメッセージを表示してexit;するとよいようだ。もともとはbasic_authを呼び出すようになっていて、問題がある場合は中でエラーメッセージを表示するようになっているが、このエラーメッセージ表示の部分をコピペしても最新の更新とかその辺りの一覧が見えてしまってよろしくないし、何より今からログインしたい人宛のリンクがなくて不便。そのため、ログイン画面にheader(‘Location /login.html’);とかで飛ばしてexit;するのが一番よいだろう。こういう内容でread_authとedit_authを書き換える。

……なのだが、PukiwikiにはBasic認証とは別の認証方法をとるページがあって、そういうページにはアクセスできてしまう(もちろんpukiwiki.iniで書いたパスワードを入力する必要はあるので、実際的な問題はないはずだが)。

その対策のため、read/writeなど細かく権限を分ける必要がないなら認証のコードをindex.phpの冒頭に書いてしまうのもバッドノウハウとして有効だと考えている。どうせ独自認証はCookieとSQLが使えれば充分であることが多いと思うので、index.phpの冒頭でSQLに接続、Cookieの中身を検索して閲覧させて問題ないようならスルー、そうでないなら適当なページにリダイレクトしてexit;してしまうなど。

.htaccessをみるとわかるが、Pukiwikiに最初から添付されている画像などのファイルのほかはindex.php以外は.htaccessによってアクセスを禁止されている。そのため、index.phpにだけ認証に必要なプログラムを書き込むことで全体に対して接続を禁止できる。書き込み権限を分けたいのであれば、lib/auth.phpのedit_authだけ書き換えればよい。ページ名は来ているようなので、ページごとに権限をわけることはできるだろう。

具体的なPHPのコードについてはこのページでは言及しない。もし連携を取りたい他のログインしすてむがPHPで書いてあるならそれのライブラリをincludeするなり必要な部分だけコピペするなり、あるいは$_SESSION等を自前でSQLに突っ込むことで認証するなりすることもできるだろうし、他の言語で書いてある場合はその言語が善きに計らってセッション管理してくれているのをまずはSQLにセッションIDと対応するユーザー情報を書き込むように書き換えるところから始めないといけないかもしれない。PHP側でセッションを新たに読みだしてSQL文をひとつふたつ書いてやるのがいいかもしれないし、連携先で使っているライブラリを流用するためにパイプで繋いでやるほうが楽かもしれない。

# それにしても、Pukiwiki、なんとなくこれぐらいならみんな使えるよね的な雰囲気で使わされることも多くあるが、Pukiwikiの編集はプログラミングをしない層にとっては全然そんなことないと思うのだが。少なくともパソコンというものにある程度慣れていてPukiwikiが使える層にとっては非常に便利だからそういう場合はあえて変更する必要もないと思うが、そうではない場合は別なシステム、あるいはWYSIWYGな編集を実現するプラグインを検討する必要もあると思う。管理者の負担は増加するが。

Windows 8をICONIA Tab W500にインストール

タイトルの通り、Windows 8をICONIA Tab W500にインストールした。これまでRelease Previewが入っていたが、別に大きな変化があったわけではない。ただインストールのメモ。

この世代のタブレットを持っていてこれからバリバリ使おうなんていう人も少ないだろうし、大雑把に。

とりあえずUSB DVDドライブにディスクを突っ込んで起動、インストーラーが起動するので指示に従ってインストール。強いて言えばパーティションで変なことしている人は悩むかもしれないがその悩みは自己解決できるもの(言っている意味がわからない場合はデフォルトでよい)。何かと入力するものがキーボードはあると何かと楽だが、なくてもインストールはできる模様。DVDブートに必要ならないと無理だが。めんどいし手元にキーボードがあったからBIOS画面に入ったが。

で、駆け足でインストール・設定する場合は

  • Windows 8のOSそのものをインストール
  • 加速度センサドライバ(Win8用が出ている)をインストール
  • Device Controlをインストール
  • Metroの方の個人設定で、キーボードをフルキーボード(ハードウェア準拠のキーボードとか書いてある)選択可能に
  • 同じく個人設定でソフトウェアキーで音が鳴らないように
  • 同じく個人設定で他のデバイスとの同期設定を好きなようにいじる
  • IE10の初仕事としてFirefoxをbingで検索・ダウンロードさせインストール(ぁ

あたりすればとりあえず使える。中二つは回転ロックスイッチを切った状態で傾けた時に縦横が切り替わるようにするためのもの。

むしろ戸惑うとしたら、Windows 8はログインがローカルログイン用のアカウントではなくMicrosoftアカウントとかいうやつでログインを勧められる点(詳しくはぐぐるとたくさん情報が出てくるが、パソコンそのものへログインするのにMicrosoftアカウントというMicrosoft側に認証サーバーがあるやつを使用するシステム。なお、こちらを選択するとまっさきに心配する「ネット繋がらなかったらどうすんの!?」だが、ネットが切れた場合は最後にログインした時のパスワードで構わないらしい)。MicrosoftアカウントでログインしないとMetro用のアプリがWindows Storeからインストールできない他、Microsoftアカウントでログインすると設定の同期とかアカウントの統合とか色々使えるらしい。詳しくは調べていないのでこれから調べたいと思う。

多分、デスクトップ(タブレット以外のもの、つまりノートも含む)の場合、Microsoftアカウントを使用せずローカルログインの方が何かと楽だろう。なかなか痛い問題点として、Microsoftアカウントでログインするとユーザーのホームディレクトリの名前に漢字が入るという点。タブレットの場合はMicrosoftアカウントがないとWindows Storeが使えないし、Microsoftアカウントを前提としたアプリもあるのでMicrosoftアカウントしかないだろう。もし生理的に受け付けないなら一応アプリケーションをインストールする時だけMicrosoftアカウントに切り替えるとか、アプリインストール用(というか管理用)のMicrosoftアカウントと普段使いのローカルアカウントを両方用意することとかもできるが。

あとスタートメニューはWin7方式にする外部アプリケーションを入れたい。タブレットであっても旧方式の方が何かと楽だろう。新しい方式はモダンだが、操作手順は増加している。 # というかWin8のインターフェイスは色々改善されているけどタブレット対応部分については難があるような気もしており。正直Win7に戻そうかとも、まあWin7に戻すモチベーションにはそれ以外にWin8が大学絡みのライセンスで商用利用というか学習以外の利用ができないライセンスであることもあるのだが。

とりあえず、パソコンに慣れた人でWindows 8を導入する場合には、Microsoftアカウントの存在とWindows 8との関係についてよく調べてからのほうがいいだろう。なんにせよ僕はまだあまり調べていないのでこの記事はあてにしないで。

あと一部の人々は、Win8の画面にでかでかと表示された「スタート」とか「アプリ」とかのタイトル文字をみて「うわぁえむえすぴーごしっくや。」とか言わないように。

ううむ。書く前からそうなるんじゃないかとは思っていたが、今日の記事はぐぐればすぐ出てきそうな情報しか書いてない。書く意味あったのか。まあいいや。