Google Code Prettify

2007年12月2日

OpenDirectory で Solaris8〜10を認証

物好きで Solaris8から入手していたので設定してみた。

  1. Solaris 8 + Admin Pack(SEAMのサーバとか?)
  2. Solaris 9
  3. Solaris 10

とりあえず、全部最新パッチを当ててある。

追加パッケージ

Solaris 8 には、標準で SSH が含まれていないので、Freeware for Solarisから入手してインストールする。

Solaris8

# sudo pkgadd -d libgcc-3.4.6-sol8-x86-local
# sudo pkgadd -d zlib-1.2.3-sol8-x86-local
# sudo pkgadd -d libintl-3.4.0-sol8-intel-local
# sudo pkgadd -d libiconv-1.11-sol8-x86-local
# sudo pkgadd -d openssl-0.9.8f-sol8-x86-local
# sudo pkgadd -d openssh-4.7p1-sol8-x86-local

SunFreeware の openssh は GSSAPI が有効になって構築されていない。Admin Pack の SEAM の中の SUNWkr5sv に kerberozied telnetd があるので、とりあえず入れとく。 telnetdはいまさらなので要らないかも。

Solaris9/10 のSSHは、Sun の手によるGSSAPIのサポートが組込まれているので、標準のものを使うようにする。

Kerberos5 設定

Solaris 8-10 は、MIT Kerberos のカスタムバージョンが使われているが、設定ファイルはほぼ同じ。

/etc/krb5/krb5.conf

...
[libdefaults]
    default_realm = EXAMPLE.COM
...
[realms]
    EXAMPLE.COM = {
        kdc = leopardserver.example.com:88
        admin_server = leopardserver.example.com:749
    }
...
[domain_realm]
    .example.com = EXAMPLE.COM
    example.com = EXAMPLE.COM
...

Solaris8-9ではデフォルトで利用できる暗号化タイプが少なく des-cbc-crc:normal に限定したプリンシプルの鍵を作成する。

Solaris8-9 のkadminは利用できる暗号化タイプのみに限定して keytab に保存ができない(ktaddの-eオプションが使えないみたい)ので、OpenDirectory があるマシン上で生成した方がよい。

Solaris8まではKerberozied NFS を利用する場合のNFSクライアント側で使うものは nfsプリンシプルではなくrootプリンシプルなので、こちらを生成する。

# kinit -p diradmin
Authenticating as principal diradmin with password.
Password for diradmin@EXAMPLE.COM:
kadmin:  addprinc -randkey host/solaris8.example.com@EXAMPLE.COM
kadmin:  addprinc -randkey root/solaris8.example.com@EXAMPLE.COM
kadmin:  ktadd -k /tmp/solaris8.keytab -e des-cbc-crc:normal host/solaris8.example.com@EXAMPLE.COM
kadmin:  ktadd -k /tmp/solaris8.keytab -e des-cbc-crc:normal root/solaris8.example.com@EXAMPLE.COM
...
kadmin:  addprinc -randkey host/solaris9.example.com@EXAMPLE.COM
kadmin:  addprinc -randkey nfs/solaris9.example.com@EXAMPLE.COM
kadmin:  ktadd -k /tmp/solaris9.keytab -e des-cbc-crc:normal host/solaris9.example.com@EXAMPLE.COM
kadmin:  ktadd -k /tmp/solaris9.keytab -e des-cbc-crc:normal nfs/solaris9.example.com@EXAMPLE.COM
...
kadmin:  addprinc -randkey host/solaris10.example.com@EXAMPLE.COM
kadmin:  addprinc -randkey nfs/solaris10.example.com@EXAMPLE.COM
kadmin:  ktadd -k /tmp/solaris10.keytab host/solaris10.example.com@EXAMPLE.COM
kadmin:  ktadd -k /tmp/solaris10.keytab nfs/solaris10.example.com@EXAMPLE.COM

それぞれのマシンの /etc/krb5/krb5.keytab にコピーする。

時間の同期がとれてるかは要確認。

LDAP の設定

手動で設定する方法をとる。

  1. XX.XX.XX.XX は Open Directory があるマシンのIPアドレス
  2. auto_master マップに関しては、Solaris限定のマップ auto_master_solaris を参照するように変更する。

Solaris8

# ldapclient -v -i \
-d example.com \
-b "dc=example,dc=com" \
-a none \
-o 60 \
-s one \
-S passwd:cn=users,?one \
-S group:cn=groups,?one \
-S automount:cn=automountMap,?one \
-S auto_master:automountMapName=auto_master_solaris,cn=automountMap,?one \
XX.XX.XX.XX

Solaris9-10

# ldapclient -v manual \
-a domainName=example.com \
-a defaultSearchBase="dc=example,dc=com" \
-a defaultServerList=XX.XX.XX.XX \
-a credentialLevel=anonymous \
-a authenticationMethod=none \
-a bindTimeLimit=60 \
-a searchTimeLimit=60 \
-a defaultSearchScope=one \
-a serviceSearchDescriptor=passwd:cn=users,?one \
-a serviceSearchDescriptor=group:cn=groups,?one \
-a serviceSearchDescriptor=automount:cn=automountMap,?one \
-a serviceSearchDescriptor=auto_master:automountMapName=auto_master_solaris,cn=automountMap,?one

ここまでやると nsswitch.conf のほとんどのエントリが ldap を見るようになる。でも、対応するレコード群がないので困ったモード全開になってしまう。

NSSの設定

Solaris 8-10

/etc/nsswitch.conf

...
passwd:     files ldap
group:      files ldap
...
hosts:      files dns
...
automount:  files ldap
...
<それ以外のエントリに含まれる ldap は削除>
...

これで Open Directory 上のユーザ情報が見えれば良し。

PAMの設定

ユーザのパスワードのタイプが「暗号化パスワード」のみの運用では、何もする必要が無さそうである。。。ここら辺事情はどうも分からん。

Solairs の PAM は1つのファイルに全部の設定が列挙されている。必要なサービスで変更が必要であるが、雑多なのでloginとother に限って設定例として上げる。

Solaris8-10

/etc/pam.conf

...
login   auth sufficient         pam_krb5.so.1 use_first_pass
login   auth required           pam_unix_auth.so.1
...
other   auth sufficient         pam_krb5.so.1 use_first_pass
other   auth required           pam_unix_auth.so.1
...
login   account required        pam_unix_account.so.1
login   account optional         pam_krb5.so.1
...
other   account required        pam_unix_account.so.1
other   account optional         pam_krb5.so.1
...
other   session required         pam_unix_session.so.1
other   session optional          pam_krb5.so.1
...

取り敢えず、pam_unix_* 前後ののそれぞれに pam_krb5 を入れ込むようにする。。。でいいと思う。パスワード変更はいまいち分からんので放っとく。

GSSやらnfssecやらの設定

Kerberozied NFS が利用できるように、

  1. /etc/nfssec.conf の krb5/krb5i/krb5p のコメントアウト部分を外す。
  2. /etc/gss/mech の kerberos_v5 のコメントアウト部分を外す。
  3. /etc/gss/gsscred.conf で、files 指定にする。
  4. 何のためか分からんが gsscred -m kerberos_v5 -a を実行しとく。

Solaris10 が使うNFSのバージョンが気になる場合は /etc/default/nfs で変更する。

以上。

何となく、認証できたり、ホームディレクトリがautomountしたり、、、だなぁ。

$ telnet -f solaris8
Trying 172.30.2.23...
Connected to solaris8.example.com.
Escape character is '^]'.
[ Kerberos V5 accepts you as ``user@EXAMPLE.COM'' ]
[ Kerberos V5 accepted forwarded credentials ]
Last login: Sun Dec  2 22:22:03 from xx.xx.xx.xx
% klist
チケットキャッシュ: /tmp/krb5cc_5000
デフォルトプリンシパル: user@EXAMPLE.COM

有効開始時間                       期限切れ                       サービスプリンシパル
Sun Dec 02 22:22:26 2007  Mon Dec 03 07:21:28 2007  krbtgt/EXAMPLE.COM@EXAMPLE.COM
        更新時間(迄) Sun Dec 09 21:21:28 2007
Sun Dec 02 22:22:26 2007  Mon Dec 03 07:21:28 2007  nfs/fileserver.exmaple.com@EXAMPLE.COM
        更新時間(迄) Sun Dec 09 21:21:28 2007
% /sbin/mount
...
/home/fileserver on fileserver:/export/home remote/read/write/setuid/sec=krb5i/dev=2f80006 on Sun Dec  2 22:16:36 2007
....
$ ssh solaris9
Warning: No xauth data; using fake authentication data for X11 forwarding.
Last login: Sun Dec  2 21:45:30 2007 from xx.xx.xx.xx
Sun Microsystems Inc.   SunOS 5.9       Generic January 2003
....
$ ssh solairs10
....

あぁ、後でautomount 用のレコードもちょっと残しておこう。

追記

Open Directory の設定のまとめ 2008Q1

0 件のコメント:

久しぶりの投稿

かなり期間が空いてしまったが、ブログを再開してみようと思う。 2013年3月が直前の投稿だったが、頻繁に更新していた時期が 2011年11月までなので、8年間ぶりとなる。 8年間なにをしていたのかと言えば、2回転職して未だにIT技術者の職を得ている。 その...