第 63 回 関西 Debian 勉強会資料
関西 Debian 勉強会担当者 佐々木・ 倉敷・ のがた・ かわだ
2012 年 8 月 26 日
第 63 回 関西 Debian 勉強会 2012 年 8 月
1 Introduction
Debian JP
関西 Debian 勉強会は Debian GNU/Linux のさまざまなトピック (新しいパッケージ、 Debian 特有の機能の仕組、
Debian 界隈で起こった出来事、などなど)について話し合う会です。
目的として次の三つを考えています。
• ML や掲示板ではなく、直接顔を合わせる事での情報交換の促進
• 定期的に集まれる場所
• 資料の作成
それでは、楽しい一時をお楽しみ下さい。
1
関西Debian 勉強会
目次
1 Introduction 1
2 最近の Debian 関係のイベント報告 3
3 事前課題 4
4 Debian ではじめる Kerberos 認証 7
5 News from EDOS: finding outdated packages 14
6 今後の予定 15
2
第 63 回 関西 Debian 勉強会 2012 年 8 月
2 最近のDebian関係のイベント
報告
Debian JP
2.1 第 62 回関西 Debian 勉強会@OSC012Kansai@Kyoto
62 回目の関西 Debian 勉強会は今月 3 日、 4 日に京都リサーチパークで行なわれたオープンソースカンファレンスで
行ないました。
セミナーでは「 Debian 7.0 “Wheezy” frozen」と題して 6 月にフリーズされた次期リリース候補の Debian 7.0
“Wheezy” の紹介を行ないました。ブースの方にも多くの方に立ち寄って頂き、中でも Debian T シャツは大変好評で
した。
2.2 第 91 回東京エリア Debian 勉強会
91 回目の東京エリア Debian 勉強会は 8 月 2 日に開催されました。
DebConf 12 参加報告、月刊 Debhelper、ソフト開発以外の簡単 Debian contribution(ドラフト版!)、 Debian での
C++11 開発環境といった内容でした。
Debian contribution ではソフト開発以外の様々な Debian への貢献方法が紹介されています。パッケージメンテナン
スは難しいけれど何か貢献したいと思われている方は参考にして何かやってみようと思われることから始めてみてはいかが
でしょうか。
3
第 63 回 関西 Debian 勉強会 2012 年 8 月
3 事前課題
Debian JP
今回は以下の課題を出題しました.
1. MIT 版 Kerberos でサービスに必要となるプロセス名と、そのプロセスが使用するポートを 2 つ以上挙げてく
ださい。
2. DebConf12 での資料を予習しておいてください。
http://penta.debconf.org/dc12_schedule/events/894.en.html
参加者の皆さんの解答は以下の通りです。
3.1 岡野孝悌
(無回答)
3.2 川江
1. 認証プロセス  749   750
3.3 とみー
1. まったくわかりませんが、参加して勉強したいとおもいます。
3.4 かわだてつたろう
1. sid 環境で krb5-{admin-server,kdc} をインストールして確認。
• krb5kdc 88/udp 750/udp
• kadmind 464/udp 464/tcp 749/tcp
2. 見ておきます。
3.5 okumura.d
1. kadmind プロセス。 tcp 及び udp ポート番号は 88,749.
#750(Kerberos RFile) は Windows 限定..?
4
3.6 佐々木洋平
1. • process
– krb5-admin-server
– krb5-kdc
• port
– 88/udp, 754/tcp, 760/tcp
2. 見ておきまする。
3.7 木下
1. ケルベロス認証では、「 KDC( Key Distribution Center)」と呼ばれるサーバーを用意し、そこに認証情報を一
元管理。
→ユーザーが複数サーバーを利用する場合、一度認証を受けるだけで、ほかのサーバーへもアクセスできるようにな
り、何度もログインする必要がなくなる。
( a) サービスに必要となるプロセス名
• krb5kdc( Kerberos サーバー)
• kadmin( kadmin ユーティリティ)
• krb524( ? 不明)
( b) サービスに必要となるプロセス名
• すみません。時間がなく調べられていません。
2. 時間の許す限り見ておきます。
3.8 yyatsuo
1. 勉強しておきます。
2. 勉強しておきます。
3.9 0xBCD1BC92
1. インストールしたらわかるのかもしれないが、/etc/init.d のプロセスをキックする名前でお茶を濁しておく。した
の/etc/serivces と連動しているかもしれず。
• krb5-admin-server
• krb5-kdc
/etc/services から拾ったから正解だと思う。
• 88/udp
• 754/tcp krb5 prop hprop
• 760/tcp kreg
2. 資料は、仕事の間ににらんでおきます。
3.10 西山和広
1. kadmind で TCP の 749 と 464
5
3.11 安部武志
1. プロセス名: krb5kdc (KDC)
使用するポート番号: 88 および 750
3.12 岡 大輔
1. どこを調べればいいのかわからない。 Kerberos 認証がどういうものかはググることでわかった。もう少しクローリ
ングしてみる。
3.13 山城の国の住人 久保博
1. squeeze 環境で MIT Kerberos を動かして、サービスが使うポート番号を次のように調べました。
lsof -p ‘pgrep krb5kdc‘
lsof -p ‘pgrep kadmind‘
• プロセス名: krb5kdc
• ポート番号: 88/udp 750/udp
• プロセス名: kadmind
• ポート番号: 749/tcp 464/tcp 464/udp
2. はい。当日までには何とか。
3.14 lurdan
1. 続きは Weˆhˆh セッションで!
2. 一応ビデオ見ました。難しいです。
6
第 63 回 関西 Debian 勉強会 2012 年 8 月
4 Debian ではじめる Kerberos
認証
倉敷 悟
4.1 事前課題の確認
今回の事前課題は、「 MIT 版 Kerberos のサービスを構成するプロセスと、そのプロセスが使用するポートを 2 つ以
上挙げてください」でした。
正解は、 MIT 版 Kerberos の管理ガイド
*
1
を参照してください。一応、 Kerberos 化されたサービスなどを省いた模
範回答例は下記の通りです。
krb5kdc 88/tcp,udp
kadmind 749/tcp
kpropd 754/tcp
4.2 kerberos とは
1980 年代に MIT のアテナプロジェクト
*
2
で (X Window System などとともに) 開発された、オープンなネットワー
クにおける認証システムです。もともと、 MIT のオープンキャンパスにおける課題を解決するために開発されているた
め、セキュアではない分散環境での動作が前提になっている他、シングル・ サインオンもサポートされています。
開発初期に公開するうえで米国の暗号政策 (輸出禁止) を回避する必要があったため、 kerberos には複数の実装があり
ます。ただ、現在では特に問題なく MIT の実装を利用することができますので、別実装のことはひとまずおいておきま
しょう。興味のある方は kth とか heimdal とかでググってみてください。
バージョン 5 以降では、 kerberos プロトコルとして RFC が発行されています
*
3
。また、 Windows2000 以降の AD
認証でも利用されているので、気付かないうちに使っていた、という方もいるかもしれません。
4.2.1 kerberos の用語
レルム ある KDC が管理対象とするネットワークの範囲です。 DNS ドメインと対応させることが多いようです。
ActiveDirectory 的にはフォレストになります。
プリンシパル kerberos の管理対象となるあらゆる個別の要素です。ユーザ、ホスト、サービスなどが含まれます。次の
書式の文字列で表現されます。「 名前/識別子@レルム」
*
1
http://web.mit.edu/kerberos/krb5-1.10/krb5-1.10.3/doc/krb5-admin.html#Configuring-Your-Firewall-to-Work-With-Kerberos-V5
*
2
興味のある方は、「 MIT アテナプロジェクトのすべて」という書籍を読むと楽しめる思います
*
3
http://www.ipa.go.jp/security/rfc/RFC.html#10
7
鍵発行局 (KDC: Key Distribution Center) kerberos のキモとなるサービスです。管理レルムに所属している全プリン
シパルの秘密鍵を保持しており、ユーザの認証 (AS) と、チケットの発行 (TGS) を行います。
チケット ユーザからの要求に応じて鍵発行局で生成される、期限つきの認証データで、共有鍵で暗号化されています。
TGT (Ticket Granting Ticket) ユーザが認証に成功した場合に発行されるチケットで、内部に一時的なセッション鍵を
保持しています。これを持っているユーザのみ、サービスチケットの発行が許可されます。
鍵テーブル (Key Table) Kerberos 認証を受けるサービスで必要となる、プリンシパルと鍵の一覧ファイルです。 KDC
上でホストプリンシパルとサービスプリンシパルを作成し、それをファイルに出力してから該当のホストにコピーす
る必要があります。
Kerberos の仕組みや動作の詳細については、「 3 分間 NetWorking」というサイト
*
4
が語り口も軽く、わかりやすいと
思いますので一度読んでみてください。 20 分ほどで読めます。
4.3 構成の事前準備
kerberos では、ホストの名前解決ができること、時刻が同期していること、が前提条件として必要になります。ちょっ
と面倒ですが、確認しておいてください。
適当な仮想化機能を使った実験であれば、名前解決は dnsmasq パッケージを導入して /etc/hosts にさっくり書くのが
お手軽で便利かと思います。
4.4 認証サーバの構成
4.4.1 openldap
ユーザ認証の観点では、 kerberos はアカウント名とパスワードの組だけを扱いますので、ホームディレクトリやシェ
ルが設定できません。そこで今回は、 openldap をアカウントのメタデータを保管するデータベースとして使用します。
openldap の構築と設定については、佐々木さんによる前回の関西 Debian 勉強会資料か、同じく佐々木さんによる次回
の Debian 勉強会資料を参考にしてください。ここでは、すでに設定が完了しているものとして進めます。
/etc/passwd と /etc/shadow 相当のデータを保持するものとして、オブジェクトクラスは posixAccount と shad-
owAccount を利用します。ただし、実際には shadowAccount の属性は利用しません。/etc/shadow 相当の実データは
kerberos で取り扱うのですが、それは OS から shadow 情報として見えるわけではないので、フェイクのアクセス先と
いう位置付けです。
4.4.2 kerberos
まずは kerberos サービス用のパッ ケージをインストールしてみましょ う。インストールするホストの名前を
krbtest.my.domain とすると、次のような構成となります (openldap と kerberos は 1 台のサーバに同居させる
想定)。
クライアント LDAP Kerberos TLS 備考
レルム MY.DOMAIN
Kerberos (鍵発行局) サーバ testnode.my.domain
Kerberos 管理サーバ testnode.my.domain
openldap サーバ testnode.my.domain
unset DEBIAN_FRONTEND ※ pbuilder で実験している場合
apt-get install lv vim
apt-get install krb5-kdc krb5-admin-server
*
4
http://www5e.biglobe.ne.jp/%257Eaji/3min/ex/sup04.html
8
krb5-kdc が鍵発行局で、 krb5-admin-server がアカウント情報の管理プロトコルを処理します。 debconf がいくつか
質問をしてくると思いますが、「 Yes/No の質問は全てデフォルト通り」、「 Default Kerberos version 5 realm」には
名前解決で使っているドメイン名、「 サーバアドレス」には名前解決できるホスト名、をそれぞれ入力してください。
kerberos 全般の設定ファイルは、/etc/krb5.conf になります。インストール時に debconf が自動で生成してくれるの
ですが、変更が不足しているので手編集が必要です。
vi /etc/krb5.conf
• (必須) [domain realm] にドメインの設定を追加
• (オプション) [realms] から不要なものを消す
• (オプション) [domain realm] から不要なものを消す
設定ファイルの編集が終わったら、 kerberos のデータベースを初期化しましょう。 debian には、このためのちょっと
したスクリプトが付属しています。
krb5_newrealm
root/admin のパスワードを求められますので、入力してください。これを忘れるとどうにもならなくなるので、忘れな
いように別途しっかり管理しておきましょう。この段階で、空のデータベースが作成され、 krb5-kdc (と kadmind) が起
動され、各種プリンシパルの登録や変更ができるようになっています。
4.5 データの登録
4.5.1 kadmin.local
kerberos の管理作業に使うコマンドには、 kadmin、 kadmin.local、 kdb5 util などがあります。このうち、 kad-
min.local は管理サーバ上でのみ利用できるものです。 kadmin を使うには kerberos でのユーザ認証をパスする必要があ
る、つまりプリンシパルを登録してからでないと使えないので、最初は kadmin.local で管理作業を行います。
kadmin.local を実行すると、プロンプトが出力されて管理コマンドの入力待ちになります。’?’ でコマンドのリストが
表示されますので眺めてみましょう。
kadmin.local: ?
Available kadmin.local requests:
add_principal, addprinc, ank
Add principal
delete_principal, delprinc
Delete principal
modify_principal, modprinc
Modify principal
rename_principal, renprinc
Rename principal
change_password, cpw Change password
get_principal, getprinc Get principal
list_principals, listprincs, get_principals, getprincs
List principals
add_policy, addpol Add policy
modify_policy, modpol Modify policy
delete_policy, delpol Delete policy
get_policy, getpol Get policy
list_policies, listpols, get_policies, getpols
List policies
get_privs, getprivs Get privileges
ktadd, xst Add entry(s) to a keytab
ktremove, ktrem Remove entry(s) from a keytab
lock Lock database exclusively (use with extreme caution!)
unlock Release exclusive database lock
purgekeys Purge previously retained old keys from a principal
get_strings, getstrs Show string attributes on a principal
set_string, setstr Set a string attribute on a principal
del_string, delstr Delete a string attribute on a principal
list_requests, lr, ? List available requests.
quit, exit, q Exit program.
とりあえず、ここではプリンシパルの登録と確認だけざっくり見てみることにします。
9
4.5.2 ユーザプリンシパル
ユーザの追加は簡単で、プリンシパルの名前としてユーザ名を指定するだけです。パスワードを求められますので、入力
してください。
kadmin.local: addprinc kdmtest
WARNING: no policy specified for kdmtest@MY.DOMAIN; defaulting to no policy
Enter password for principal "kdmtest@MY.DOMAIN":
Re-enter password for principal "kdmtest@MY.DOMAIN":
Principal "kdmtest@MY.DOMAIN" created.
4.5.3 ホストプリンシパル
ホストを追加する場合は、プリンシパルの名前として host、識別子としてそのホストの FQDN を指定します。また、
ホストの場合はパスワードを人間が入力することはないので、手入力でなくランダムなものを自動生成させます。
kadmin.local: addprinc -randkey host/testnode.my.domain
WARNING: no policy specified for host/testnode.my.domain@MY.DOMAIN; defaulting to no policy
Principal "host/testnode.my.domain@MY.DOMAIN" created.
4.5.4 サービスプリンシパル
サービスを追加する場合は、プリンシパルの名前としてサービス名、識別子としてサービスを提供するホストの FQDN
を指定します。
kadmin.local: addprinc -randkey ldap/testnode.my.domain
WARNING: no policy specified for ldap/testnode.my.domain@MY.DOMAIN; defaulting to no policy
Principal "ldap/testnode.my.domain@MY.DOMAIN" created.
4.5.5 登録データの確認
listprincs コマンドで、登録されているプリンシパルの一覧を表示することができます。初期状態では、次のように表示
されるはずです。
kadmin.local: listprincs
K/M@MY.DOMAIN
kadmin/admin@MY.DOMAIN
kadmin/changepw@MY.DOMAIN
kadmin/testnode.my.domain@MY.DOMAIN
krbtgt/MY.DOMAIN@MY.DOMAIN
4.5.6 鍵テーブルファイル (ktab) の生成
プリンシパル名を指定して ktadd コマンドを実行することで、鍵テーブルを作成/更新することができます。特定サービ
スホスト用の鍵テーブルファイルは、面倒ですが別途転送しておく必要がありますので、忘れないように注意しましょう。
kadmin.local: ktadd ldap/testnode.my.domain
Entry for principal ldap/testnode.my.domain with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab.
Entry for principal ldap/testnode.my.domain with kvno 2, encryption type arcfour-hmac added to keytab FILE:/etc/krb5.keytab.
Entry for principal ldap/testnode.my.domain with kvno 2, encryption type des3-cbc-sha1 added to keytab FILE:/etc/krb5.keytab.
Entry for principal ldap/testnode.my.domain with kvno 2, encryption type des-cbc-crc added to keytab FILE:/etc/krb5.keytab.
4.6 クライアントの構成
NSS に参照させるライブラリには、いくつかの選択肢が存在します。
クライアント LDAP Kerberos TLS 備考
lib(nss/pam)-ldap ○ × 未対応 古いが多機能
lib(nss/pam)-ldapd ○ × 対応 squeeze 以降の推奨。まだ発展途上
libpam-krb5 × ○ −
sssd ○ ○ 必須 RedHat が FreeIPA のために開発している。まだ発展途上
10
Debian 的には、今回の構成であれば libnss-ldapd + libpam-krb5 が本命ということになるのかも知れませんが、こ
こでは試しに sssd を使ってみることにします。
sssd は、 RedHat がよくやる、あれこれ一緒くたにまとめる系の再実装の一つです。上記の ldap/krb 向けのクライア
ント機能の他、 NSCD の機能も持っています。
4.6.1 sssd の構成
sssd は RHEL5 から登場し、 RHEL6 でさらに統合が進んでいる他、日本語のマニュアルもきっちり用意されていま
すので、 RedHat を使用している人には今後の標準となっていくであろうサービスです。
Debian にもパッケージはあるのですが、当然ながら RHEL に収録されているものとはバージョンが異なりますので、
RedHat のマニュアルをそのまま使えない場合があります。是非これをきっかけに Debian 上でアレコレ試してみて、ブ
ログやこの勉強会のセッションでネタにしてみてください。
何はともあれ、 sssd をインストールしてサンプルの設定ファイルをコピーします。
apt-get install sssd
cp /usr/share/doc/sssd/examples/sssd-example.conf /etc/sssd/sssd.conf
設定ファイルは、のぞいてみれば一目でわかりますが、複数のセクションに分かれています。
sssd セクション デーモンプロセス全体の動作設定です。
config_file_version = 2
# Number of times services should attempt to reconnect in the
# event of a crash or restart before they give up
reconnection_retries = 3
# If a back end is particularly slow you can raise this timeout here
sbus_timeout = 30
services = nss, pam
# SSSD will not start if you do not configure any domains.
# Add new domain configurations as [domain/<NAME>] sections, and
# then add the list of domains (in the order you want them to be
# queried) to the "domains" attribute below and uncomment it.
domains = KERBEROS
nss セクション nss の参照設定を行います。
# The following prevents SSSD from searching for the root user/group in
# all domains (you can add here a comma-separated list of system accounts that
# are always going to be /etc/passwd users, or that you want to filter out).
filter_groups = root
filter_users = root
reconnection_retries = 3
# The entry_cache_timeout indicates the number of seconds to retain an
# entry in cache before it is considered stale and must block to refresh.
# The entry_cache_nowait_timeout indicates the number of seconds to
# wait before updating the cache out-of-band. (NSS requests will still
# be returned from cache until the full entry_cache_timeout). Setting this
# value to 0 turns this feature off (default).
; entry_cache_timeout = 600
; entry_cache_nowait_timeout = 300
pam セクション pam の参照設定を行います。
reconnection_retries = 3
domain セクション 参照先サービス個別の設定を行います。
11
# Example LDAP domain
; [domain/LDAP]
; id_provider = ldap
; auth_provider = ldap
# ldap_schema can be set to "rfc2307", which stores group member names in the
# "memberuid" attribute, or to "rfc2307bis", which stores group member DNs in
# the "member" attribute. If you do not know this value, ask your LDAP
# administrator.
; ldap_schema = rfc2307
; ldap_uri = ldap://ldap.mydomain.org
; ldap_search_base = dc=mydomain,dc=org
# Note that enabling enumeration will have a moderate performance impact.
# Consequently, the default value for enumeration is FALSE.
# Refer to the sssd.conf man page for full details.
; enumerate = false
# Allow offline logins by locally storing password hashes (default: false).
; cache_credentials = true
# An example Active Directory domain. Please note that this configuration
# works for AD 2003R2 and AD 2008, because they use pretty much RFC2307bis
# compliant attribute names. To support UNIX clients with AD 2003 or older,
# you must install Microsoft Services For Unix and map LDAP attributes onto
# msSFU30* attribute names.
; [domain/AD]
; id_provider = ldap
; auth_provider = krb5
; chpass_provider = krb5
;
; ldap_uri = ldap://your.ad.example.com
; ldap_search_base = dc=example,dc=com
; ldap_schema = rfc2307bis
; ldap_sasl_mech = GSSAPI
; ldap_user_object_class = user
; ldap_group_object_class = group
; ldap_user_home_directory = unixHomeDirectory
; ldap_user_principal = userPrincipalName
; ldap_account_expire_policy = ad
; ldap_force_upper_case_realm = true
;
; krb5_server = your.ad.example.com
; krb5_realm = EXAMPLE.COM
domain セクションには、サンプルの設定雛形が用意されていますが、今回はひとまず無視して、次のように追記してみ
てください。
[domain/KERBEROS]
enumerate = true
id_provider = ldap
access_provider = permit
ldap_uri = ldaps://YOURSERVER/
ldap_search_base = dc=YOUR,dc=DOMAIN
ldap_tls_reqcert = never
ldap_tls_cacert = /etc/ssl/certs/YOUR-CACERT.pem
auth_provider = krb5
chpass_provider = krb5
krb5_kdcip = <kerberos サーバの IP アドレス>
krb5_server = <kerberos サーバの IP アドレス>
krb5_realm = <kerberos レルム名>
krb5_changepw_principal = kadmin/changepw
krb5_auth_timeout = 15
domain セクションで名前として指定したものが、 sssd セクションの domains で参照されていることを確認してくだ
さい。設定ファイルの編集が終わったら、 sssd プロセスを再起動します。
service sssd restart
4.6.2 nss の切り替え
sssd の設定が終わったら、参照する NS (Name Service) を OS に教えてあげる必要があります。
*
5
vi /etc/nsswitch.conf
passwd と group と shadow の compat の後ろに sss を追加してください。
*
5
デフォルトでは、ローカルの /etc/passwd のみを探すようになっています
12
4.7 動作確認とその先
ssh を利用して、認証の動作確認をしてみます。実は ssh はもとから Kerberos に対応しているのですが、今回の構成
例ではその機能は利用せず、認証部分は OS (sssd) に任せる形となります。 sshd config で、 GSSAPI* が no になって
いることと、 PasswordAuthentication が yes になっていること、 UsePam が Yes になっていること、を確認しておい
てください。先ほど作成したユーザプリンシパルを使ってログインできれば成功です。
Kerberos サーバ上で試してもいまいち感動がないので、できれば複数台の構成で実験してみてみると面白いと思いま
す。シングルサインオンで複数のサーバをわたり歩けるのもなかなか新鮮です。
*
6
今回は本当にさわりの部分だけ紹介してみましたが、自由研究のテーマとしては、「 Active Directory と連携させる」
「 kerberos のデータストアを openldap にもたせてみる」「 wallet を使って keytab の運用をラクにしてみる」などが考
えられますので、是非挑戦して、未来の勉強会で発表してみてください。
*
6
最近は ssh の agent forwarding で済んでしまうかもしれませんが……
13
第 63 回 関西 Debian 勉強会 2012 年 8 月
5 News from EDOS: finding
outdated packages
Ralf Treinen
セッションの内容は、 Debconf12 での発表と同様です。
資料とビデオは Debconf12 のセッション案内
*
7
を参照してください。
*
7
http://penta.debconf.org/dc12_schedule/events/894.en.html
14
第 63 回 関西 Debian 勉強会 2012 年 8 月
6 今後の予定
Debian JP
6.1 次回の関西 Debian 勉強会
次回、第 64 回関西 Debian 勉強会は、 9 月 23 日 (日) に福島区民センター 304 号室で行ないます。
6.2 東京エリア Debian 勉強会
9 月 15 日 (土) の OSC Tokyo Fall で 92 回目の東京エリア Debian 勉強会が開催されます。
15
16
関西Debian 勉強会
Debian 勉強会資料
2012 年 8 月 26 日 初版第 1 刷発行
関西 Debian 勉強会( 編集・ 印刷・ 発行)
17