あゝ、めんどくさい

めんどくさがり屋のIT勉強録

IdMによるIDの一元管理

「そりゃ、一瞬で全てのサーバからアカウントを削除できたら楽に決まってんだろ」

退職者のアカウント削除、これ一苦労なんだよな。サーバ一個ならいいんだけど、みんな好き勝手にあちこちにアカウントを作っているから、消して回らないとならない。

「そこでだ、アカウントを一括で管理する。これを君が作るんだ」

は? それActive DirectoryOpenLDAPでアカウント管理して統合認証やりましょうってやつでしょ。Windowsはわからないし、OpenLDAPは操作が面倒だから嫌だよ。

OpenLDAPって確かCentOS 7.4から非推奨になったんじゃなかったけな」

な・ん・だ・と?

1.IdMという選択肢

Red Hatのサイトに観に行くと「将来削除」確かに書いてある。

となると、7.xの間はサポートはされるものの、積極的な改修とかは期待できないわけだ。まあうちで使うのはCentOSなので、サポートもへったくれもないんだけど。

代わって6.xの頃からユーザ認証にはIdMというのが用意されている。Identity Managerの略語であるこれはFreeIPAというプロジェクトの成果物で、Red Hat Enterprise Linux上でユーザ、ホスト、サービスの管理を行うもの。もちろんCentOSにも入っている。 LDAPやKerberos、BINDなんかを使ってID管理をするため、一般的なLinuxサーバであればこれで一手に管理できそうだ。Webの管理画面もついている。

2.認証サーバのインストール

さっそくサーバ側の準備をする。DNSの機能が統合されているため、既存のネットワーク上に構築して少しずつ移行しようなんてすると、既存のDNSと管理するゾーンが被ったりして少々面倒。でもなんとかする。

まずは認証サーバにCentOS 7.4を入れ、yum updateをかけておく。そこからFreeIPAのインストールを行う。

[root@ipa ~]# yum -y install ipa-server ipa-server-dns bind bind-dyndb-ldap

インストールが終わったらセットアップを走らせるが、これから設定しようとするDNSゾーンがすでにネットワーク上のDNSサーバで管理されているとセットアップが失敗するので、この時だけは/etc/resolv.confの設定をいじっておく。

[root@ipa ~]# vi /etc/resolv.conf
nameserver 127.0.0.1

また、DNSを見に行かなくなると自身のIPアドレスがわからなくなるため、/etc/hostsに自身のIPアドレスを登録をしておく。

[root@ipa ~]# vi /etc/hosts
172.16.10.100 ipa.example.jp

セットアップの開始

[root@ipa ~]# ipa-server-install
Existing BIND configuration detected, overwrite? [no]: yes↩️

Server host name [ipa.example.jp]: ↩️

Please confirm the domain name [example.jp]: ↩️

Please provide a realm name [EXAMPLE.JP]: ↩️

Directory Manager(LDAPでいうところのroot dnみたいなもの)のパスワード

Directory Manager password: ********↩️
Password (confirm): ********↩️

IPA ADMIN(IPAのadminアカウントのパスワード設定)のパスワード

IPA admin password: ********↩️
Password (confirm): ********↩️

Forwardersだが、今見にいかせると面倒なことになるので設定はしない。あとで設定をする。

Do you want to configure DNS forwarders? [yes]: no↩️

逆引きゾーンの設定はメールサーバとか使うならいるかも。

Do you want to configure the reverse zone? [yes]: ↩️
Please specify the reverse zone name [10.16.172.in-addr.arpa.]:

設定の確認を求められる。

The IPA Master Server will be configured with:
Hostname:      ipa.example.jp
IP address:    172.16.10.100
Domain name:   example.jp
Realm name:    EXAMPLE.JP

Continue to configure the system with these values? [no]: yes ↩️

すると色々設定されて最後にFirewallの設定とIPAへのログインを求められる。

Setup complete

Next steps:
        1. You must make sure these network ports are open:
                TCP Ports:
                  * 80, 443: HTTP/HTTPS
                  * 389, 636: LDAP/LDAPS
                  * 88, 464: kerberos
                UDP Ports:
                  * 88, 464: kerberos
                  * 123: ntp

        2. You can now obtain a kerberos ticket using the command: 'kinit admin'
           This ticket will allow you to use the IPA tools (e.g., ipa user-add)
           and the web user interface.

とりあえずFirewallを開ける。dnsがさっきの一覧にはなかったが、DNSも使うので開ける。

[root@ipa ~]# firewall-cmd --permanent --zone=public --add-service=http --add-service=https --add-service=ldap --add-service=ldaps --add-service=kerberos --add-service=freeipa-ldap --add-service=dns --add-service=ntp
[root@ipa ~]# firewall-cmd --reload

ここまでやったら/etc/resolv.confの設定を元に戻す。

[root@ipa ~]# vi /etc/resolv.conf
nameserver 192.168.0.2
nameserver 192.168.0.3

DNSにForwardersを設定する。

[root@ipa ~]# vi /etc/named.conf
option {
	...
	forwarders {
		192.168.0.2;
		192.168.0.3;
	};
};

通常ならここでnamedを再起動するのだが、namedはmaskと呼ばれる状態になっており、再起動を受け付けない。システムごと再起動しておく。

[root@ipa ~]# systemctl reboot

次に、IPAにログインしてKerberosのチケットを入手する。この状態でIDの管理ができるようになる。

[root@ipa ~]# kinit admin
Password for admin@EXAMPLE.JP: [IPA adminで入れたパスワード]

3.IDの追加

ユーザの追加はコマンドで行う。あとで紹介するWeb画面でもできるが、こっちの方がシンプル。なお、管理者が設定したパスワードは、ユーザの初回ログイン時に強制的に変更を求められるセキュアぶり。

[root@ipa ~]# ipa user-add [ユーザID] --first=[名] --last=[姓] --password=********
-------------------
Added user "fhoge"
-------------------
  User login: fhoge
  First name: fuga
  Last name: hoge
  Full name: fuga hoge
  Display name: fuga hoge
  Initials: fh
  Home directory: /home/fhoge
  GECOS field: fuga hoge
  Login shell: /bin/bash
  Kerberos principal: fhoge@EXAMPLE.JP
  Email address: fhoge@example.jp
  UID: 1113400020
  GID: 1113400020
  Password: True
  Kerberos keys available: True

なんかUID/GIDが桁外れにでかいんですけど。。。。

また、ホストも登録できる。これはクライアントの設定を行う前に対象のホストを登録しておくこと。

[root@ipa ~]# ipa dnsrecord-add [domain名] [host名] --a-rec [IPアドレス]
Record name: dev1
A record: 172.16.10.41

4.クライアントのインストール

クライアントは既存のサーバを移行するのだが、まずDNSの参照先をIPAサーバに変更する。

[root@dev1 ~]# nmcli c modify ens192 ipv4.dns 172.16.10.100
[root@dev1 ~]# systemctl restart NetworkManager

クライアントソフトを入れる。

[root@dev1 ~]# yum -y install ipa-client
Discovery was successful!
Hostname: dev1.example.jp
Realm: EXAMPLE.JP
DNS Domain: example.jp
IPA Server: ipa.example.jp
BaseDN: dc=example,dc=jp

Continue to configure the system with these values? [no]: yes ↩️
User authorized to enroll computers: admin ↩️
Password for admin@EXAMPLE.JP: ******** ↩️
.....
Client configuration complete.

なお、ローカルでユーザを作る場合と違ってホームディレクトリは自動で作成されないので、設定をしておく。

[root@dev1 ~]# authconfig --enablemkhomedir --update

ここからが面倒なのだが、UIDとGIDが変わってしまうため、既存のホームディレクトリのオーナーが変わってしまう。なので、あらかじめchownコマンドでホームディレクトリのオーナーを全員分変えておく必要がある。それが嫌な場合はWeb画面でUIDとGIDを従来と同じものに変えておく。

[root@dev1 ~]# chown -R fhoge:fhoge fhoge

5. Web画面

IPAIPアドレスhttpsでアクセスするとWebの管理画面が表示される。 sudoなど細かい設定はこちらでやるのが楽だろう(後略)。

一元管理というと響きはいいが、既存の環境から移行する際にクライアント側の設定の手間が煩わしく感じた。これ以降のクライアントの構築は構成管理ツールなどであらかじめIdMに対応させておくのがいいだろう。