Flash Playerのバージョンをレジストリの値から取得 / 制限ユーザでインストール可能な最新のFlash Playerインストールファイル(MSI)を作る方法 / ActiveDirectoryのKerberos認証を使ってWebサービスにシングルサインオンする環境を構築する

投稿日: 2007年11月29月

Flash Playerのバージョンをレジストリの値から取得

下記レジストリキーに保存されている。

HKEY_LOCAL_MACHINE\SOFTWARE\Macromedia\FlashPlayer\CurrentVersion

実際に確認できたバージョンは下記。

8,0,24,0
9,0,24,0
9,0,28,0
9,0,47,0

但し古いバージョンのFlashでは上記レジストリキーが存在しないらしい。

確認したバージョンは下記。(上記レジストリキーが存在しないマシンで、Flash Playerのバージョンテストを行った結果)

7,0,19,0
8,0,22,0

この結果から、どうやら8,0,22,0以前は上記レジストリキーが存在しないらしい。

制限ユーザでインストール可能な最新のFlash Playerインストールファイル(MSI)を作る方法

通常、制限ユーザ(Usersグループのユーザ)でFlash Playerのインストールファイル(install_flash_player_active_x.msi)を実行すると「管理者でインストールしなさい」みたいなエラーが出てインストールできない。

これはMSIの事前チェックが働いているためで、MSIのメタ情報を編集することで回避可能。

具体的には下記を用意する。

  • 配布用のFlash Playerインストールファイル(install_flash_player_active_x.msi)
  • Orca

Orcaというのは「Microsoft製のMSI編集ツール」で、Platform SDK等に含まれるOrca.msiを使ってインストールできる。

このOrcaを使って下記を削除する。

「LaunchCondition」テーブルの「AdminUser」

これで作業完了。一般ユーザでも起動可能なインストールファイルが出来上がり。

これで例えばActiveDirectoryのグループポリシーオブジェクトのソフトウェア配布を使うことで、制限ユーザにも最新のFlash Playerを配布することが可能となります。

ActiveDirectoryのKerberos認証を使ってWebサービスにシングルサインオンする環境を構築する

目的

  • ユーザ名/パスワードを入力することなく、WEBシステムにログインする環境を構築。

技術的には「統合Windows認証」と呼ばれる方式で上記環境が構築可能。

Webサーバ

  • ホスト/ドメイン名はwww.example.comとする
  • HTTPサーバとしてApacheを使用
  • ApacheでKerberos認証を行うため、mod_auth_kerbを使用
  • Kerberos認証を行うために時刻同期、DNSを設定
  • 先日構築したVMWare上のLinux検証環境上に構築

KDCサーバ

  • ホスト/ドメイン名はdc.example.comとする
  • Windows Server 2000/2003を使用
  • ActiveDirectoryは構築済み
  • ActiveDirectoryドメインはdomain.example.co.jpとする
  • DNSサーバとして稼働済み

クライアント

  • ActiveDirectoryドメインに参加済み

Webサーバに時刻同期を設定

Kerberos認証を行うためには、時刻が同期されていることが必須条件となる。

そのため、まずはNTPクライアントをインストール。

# yum install ntp

また、VMWareと少し前のLinuxとの組み合わせ固有の問題によりNTP同期しても時刻がずれる。下記設定で回避可能なので設定しておく。

/boot/grub/grub.confを編集して「clock=pit nosmp noapic nolapic」を追加する。

kernel /boot/kernel-2.6.14-gentoo-r5 root=/dev/sda3 clock=pit nosmp noapic nolapic

最後にドメインサーバと時刻同期する。

ntpdate dc.example.com

WebサーバにDNSを設定

ドメインコントローラをDNSサーバとして利用する。

/etc/resolve.confにドメインコントローラのIPアドレスを記述。

ドメインコントローラのDNSサーバに、www.example.comのホスト名の正引き、逆引きともに設定する。

WebサーバにApacheのインストール

# cd /usr/local/src
# wget http://www.meisei-u.ac.jp/mirror/apache/dist/httpd/httpd-2.0.61.tar.gz
# tar xvfz httpd-2.0.61.tar.gz
# cd httpd-2.0.61
# ./configure \
  --enable-so \
  --enable-dav_fs \
  --enable-dav \
  --enable-rewrite \
  --enable-ssl \
  --enable-deflate
# make
# make install

起動スクリプトを設置

# cp /usr/local/apache2/bin/apachectl /etc/init.d/apache

起動スクリプト中(2行目以降に)に下記を追記

# chkconfig: 345 85 15
# description: Apache HTTP Server.

起動スクリプトを登録

# chkconfig --add apache

iptablesで80番ポートを開ける。

# system-config-securitylevel-tui

Apacheの起動ユーザ/グループを登録する。

# groupadd -g 80 httpd
# useradd -g httpd -u 80 httpd -s /bin/nologin

設定ファイル(/usr/local/apache2/conf/httpd.conf)に上記ユーザを記述。

User httpd
Group httpd

Apacheを起動する。

# /etc/init.d/apache start

KDCサーバにプリンシパルを登録

OU「Unix Services」を作成し、配下にユーザ「unixhttp」を作成。

  • ユーザはパスワードを変更できない
  • パスワードを無制限にする
  • このアカウントにDES暗号化を使う

ktpass.exe(サポートツールに収録)を使用して、「unixhttp」をサービスプリンシパルとして構成。および、キーテーブルファイルを作成。

C:\Program Files\Support Tools>ktpass -out http.keytab ^
-princ HTTP/www.example.com@DOMAIN.EXAMPLE.COM -pass * ^
-mapuser unixhttp@DOMAIN.EXAMPLE.COM -ptype KRB5_NT_PRINCIPAL ^
-crypto DES-CBC-MD5

生成されたhttp.keytabをWebサーバに設置。

※ この辺、本当はDESじゃなくてより強固な暗号化方式でもいいのかも。未確認。

Webサーバにmod_auth_kerbを導入

Apacheでケルベロス認証を行うためのモジュール(mod_auth_kerb)をインストール。

# wget http://nchc.dl.sourceforge.net/sourceforge/modauthkerb/mod_auth_kerb-5.3.tar.gz
# tar xvfz mod_auth_kerb-5.3.tar.gz
# cd mod_auth_kerb-5.3
# ./configure --with-apache=/usr/local/apache2 --with-krb5=/usr
# make
# make install

/usr/local/apache2/conf/httpd.confに下記を追加

LoadModule auth_kerb_module   modules/mod_auth_kerb.so
(snip)
<Location />
     AuthType Kerberos
     AuthName "Kerberos Login"
     KrbServiceName HTTP/www.example.com@DOMAIN.EXAMPLE.COM
     Krb5Keytab  /etc/http.keytab
     KrbAuthRealms DOMAIN.EXAMPLE.COM
     Require valid-user
     KrbVerifyKDC on
</Location>

クライアントPCに統合認証のための設定

「インターネットオプション」-「セキュリティ」-「ローカルイントラネット」のサイトに「www.example.com」を追加。

www.example.comにアクセスすることができるか確認。

上記設定はActiveDirectory環境であればGPO(グループポリシーオブジェクト)により配布可能。

WebサーバにPHP 5.2.4をインストール

確認用にPHPをインストール。

# ./configure \
--with-apxs2=/usr/local/apache2/bin/apxs \
--enable-mbstring \
--enable-zend-multibyte \
--with-zlib \
--with-gettext \
--enable-ftp \
--with-xmlrpc \

--with-ldap \
--with-tidy \
--with-gd \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-freetype-dir=/usr \
--with-mysql \
--with-pgsql \
# make
# make install

/usr/local/apache2/conf/httpd.confに下記を追加

AddType application/x-httpd-php .php

/usr/local/apache2/htdocs/phpinfo.phpを作成し下記を記述

<php phpinfo();

http://www.example.com/phpinfo.phpにアクセスし、$_SERVER['REMOTE_USER']にPCのドメインアカウント名が入っていることを確認。

最後に

  • DCとサーバ間で時刻同期を忘れない
  • クライアント側のチケット有効期限も気にする必要あり?

mod_spnegoの導入

番外編。今回は使用しなかったが、mod_spnegoを使ってもKerberos認証が可能。

# wget http://jaist.dl.sourceforge.net/sourceforge/modgssapache/fbopenssl-0.0.4.tar.gz
# tar xvfz fbopenssl-0.0.4.tar.gz
# cd fbopenssl
# make CFG=release
# cp Linux-release/libfbopenssl.so /usr/local/lib/

/etc/ld.so.confに下記行を追加

/usr/local/lib

変更を反映させるため下記コマンドを実行

# ldconfig

もろもろインストール。

# cd /usr/local/src
# mkdir modgssapache
# cd modgssapache
# wget http://jaist.dl.sourceforge.net/sourceforge/modgssapache/modgssapache-0.0.5.tar.gz
# tar xvfz modgssapache-0.0.5.tar.gz
# cd spnegohelp
# make
# cp libspnegohelp.so /usr/local/lib

# cd /usr/local/src/
# wget http://nchc.dl.sourceforge.net/sourceforge/modgssapache/mod_spnego-0.1.0.tar.gz
# tar xvfz mod_spnego-0.1.0.tar.gz
# cd mod_spnego-0.1.0
# /usr/local/apache2/bin/apxs -c -a -i -I/usr/local/src/fbopenssl/include -lfbopenssl mod_spnego.c

/usr/local/apache2/conf/httpd.confに下記を追加

Krb5AuthEachReq On
<Location />
    Krb5KeyTabFile /etc/http.keytab
    Krb5ServiceName http/www.example.com@DOMAIN.EXAMPLE.COM
    AuthType SPNEGO
    Require valid-user
</Location>

名前:宮内 はじめ

Code for Nagoya名誉代表

E2D3名古屋支部長

プログラマーです。GISやデータビズが好きです。このサイトは宮内の個人的なメモです。

プロフィール

お問い合わせ