2021年11月27日土曜日

OpenLDAP入門② (OpenLDAPでLDAPSを有効化する)

前回、RHEL 7にOpenLDAPをインストールして、OpenLDAPサーバを構築する手順を記載した。しかし、LDAPは通信が暗号化されておらず、認証情報が平文でネットワークに流れてしまう。そこで、LDAPをSSLで暗号化するLDAPS (LDAP over SSL) を使い通信の暗号化を行うことで、セキュリティ強化を図る。

本記事では、OpenLDAPサーバに設定追加を行いLDAPSにて通信できるように構成するための手順を記載する。

環境

RHEL 7にてOpenLDAPサーバを構築済みの環境から、LDAPSを有効にする手順を記載する。OpenLDAPサーバの構築手順は前回記事を参照いただきたい。

  • OS : Red Hat Enterprise Linux 7.7
  • OpenLDAP : 2.4.44

OpenLDAPのドメイン等の情報は以下とする。

設定項目 設定値
ドメイン dc=example,dc=com
RootDN cn=Manager,dc=example,dc=com
OU ou=group,dc=example,dc=com
グループ cn=ldapgrp,ou=group,dc=example,dc=com
ユーザ1 uid=user01,ou=group,dc=example,dc=com
ユーザ2 uid=user01,ou=group,dc=example,dc=com

OpenLDAPのLDAPS有効化手順

1. LDAPS用のサーバ証明書を作成

LDAPSはLDAP over SSLの略である通り、SSLサーバ証明書の作成が必要となる。OpenLDAPのサーバ証明書は/etc/openldap/certs/に配置する。

まず、SSLサーバ証明書に必要となるSAN (Subject Alternative Name) を設定するためのファイルを作成する。今回は、以下の通り作成した。

# cd /etc/openldap/certs/
# cat << EOF > san.txt
subjectAltName = DNS:*.example.com, IP:192.168.11.117
EOF

サーバ証明書は、以下コマンドで作成する。

# openssl genrsa 2048 > ldaps.key
# openssl req -new -key ldaps.key > ldaps.csr
# openssl x509 -days 3650 -req -signkey ldaps.key -in ldaps.csr -out ldaps.crt -extfile san.txt

実際のコマンド実行結果は以下の通り。CSR作成時に証明書作成に必要な情報を対話式で入力する。

# openssl genrsa 2048 > ldaps.key
Generating RSA private key, 2048 bit long modulus
..............................................................+++
..................+++
e is 65537 (0x10001)

# openssl req -new -key ldaps.key > ldaps.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP ←★JPを入力
State or Province Name (full name) []:Tokyo ←★任意の都市名を入力
Locality Name (eg, city) [Default City]: ←★そのままEnter
Organization Name (eg, company) [Default Company Ltd]: ←★そのままEnter
Organizational Unit Name (eg, section) []: ←★そのままEnter
Common Name (eg, your name or your server's hostname) []:LDAPS ←★任意の名称を入力。今回はLDAPSと入力
Email Address []: ←★そのままEnter

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ←★そのままEnter
An optional company name []: ←★そのままEnter

# openssl x509 -days 3650 -req -signkey ldaps.key -in ldaps.csr -out ldaps.crt -extfile san.txt
Signature ok
subject=/C=JP/ST=Tokyo/L=Default City/O=Default Company Ltd/CN=LDAPS
Getting Private key

2. LDAPS有効化に必要な設定を追加

OpenLDAPサーバの設定ファイルに以下の通りLDAPSに必要となる設定を追加する。

# cp /etc/sysconfig/slapd{,.org}
# vi /etc/sysconfig/slapd
SLAPD_URLS="ldapi:/// ldap:/// ldaps:///" ←★「ldaps:///」を追加

次にssl.ldifというLDIFファイルを作成し、LDAPS用の証明書及び秘密鍵となるファイルの指定を行う。このLDIFファイルをldapaddコマンドにて設定追加する。

# cd ~
# cat << EOF > ssl.ldif
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/ldaps.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/ldaps.key
EOF

# ldapadd -Y EXTERNAL -H ldapi:// -f ssl.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

3. OpenLDAPを再起動

ここまで設定したら、OpenLDAPを再起動し、LDAPSの636ポートが開放されることを確認する。

# systemctl restart slapd

# ss -nl | egrep '389|636'
tcp    LISTEN     0      128       *:636                   *:*
tcp    LISTEN     0      128       *:389                   *:*
tcp    LISTEN     0      128    [::]:636                [::]:*
tcp    LISTEN     0      128    [::]:389                [::]:*

4. LDP.exeを使った確認

LDAPSはそのままではLDP.exeにて接続することができず、OpenLDAPサーバにて作成したSSLサーバ証明書の公開鍵であるldaps.crtを「信頼されたルート証明機関」として登録が
必要
となる。

/etc/openldap/certs/ldaps.crtをLDP.exeを実行するサーバにダウンロードし、ファイルをダブルクリックすると証明書の情報を確認することができ、「証明書のインストール」を選択することで「証明書のインポートウィザード」を開始できる。

インポートウィザードでは証明書ストアにて「信頼されたルート証明機関」を選択する。

セキュリティ警告が表示される場合があるが、自己署名証明書による証明書エラーとなることから、そのまま「はい」を選択する。

証明書をインポートしたのち、再度LDP.exeにて接続すると、以下の通りSSLによる接続に成功する。

以上でOpenLDAPでLDAPSを有効化する手順は完了となる。次回は、LinuxのSSSDを使って本サーバに対して認証連携を行うことにする。

2021年11月23日火曜日

VyOSで冗長化したDHCPサーバを構築する

VyOSはDHCPサーバ機能を備えており、さらに2台のVyOSでDHCPサーバの機能を冗長化することができる。今回は、VyOSを使った冗長化されたDHCPサーバの構築手順を以下に記載する。

環境

VyOSのバージョンによって設定コマンドが若干異なるため、以下2つのバージョンを使用して手順確認を行った。

VyOS 1.4.x

  • VyOS#1 (Primary) : 1.4-rolling-202111220318
  • VyOS#2 (Secondary) : 1.4-rolling-202111220318

VyOS 1.3.x

  • VyOS#1 (Primary) : 1.3-rolling-202012311144
  • VyOS#2 (Secondary) : 1.3-rolling-202012311144

192.168.11.0/24のネットワークに対し、192.168.11.201-240のレンジからIPアドレスのリースを行うよう設定する。また、static-mappingの設定にて、特定のMACアドレスを持つクライアントのIPアドレスを固定する。

DHCPサーバ構築手順 (1.4.x)

1. VyOS#1側設定 (Primary)

設定に必要なコマンドを以下にコメントを付けて記載する。

# VyOS#2をremote、VyOS#1をsource-addressとしてIPアドレスを設定
set service dhcp-server failover name dhcp1
set service dhcp-server failover remote 192.168.11.32
set service dhcp-server failover source-address 192.168.11.33

# VyOS#1をPrimaryに設定
set service dhcp-server failover status primary

# DHCPで配布するデフォルトゲートウェイとDNS
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 default-router '192.168.11.31'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 name-server '192.168.11.61'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 name-server '192.168.11.62'

# DHCPリース時間を86400秒 (24時間) に設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 lease '86400'

# DHCPリースを行うIPアドレスの開始・終了を指定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 range 0 start '192.168.11.201'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 range 0 stop '192.168.11.240'

# 対象のサブネットをフェイルオーバー対象に設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 enable-failover

# IPアドレス固定設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 static-mapping <任意の文字列> ip-address '192.168.11.15'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 static-mapping <任意の文字列> mac-address 'aa:bb:cc:11:22:33'

設定投入後、commitとsaveをしておく。

# commit
# save

2. VyOS#2側設定 (Secondary)

設定に必要なコマンドを以下にコメントを付けて記載する。設定内容はIPアドレスやPrimary/Secondaryの設定を除けば、VyOS#1側と同様となる。

# VyOS#1をremote、VyOS#2をsource-addressとしてIPアドレスを設定
set service dhcp-server failover name dhcp1
set service dhcp-server failover remote 192.168.11.33
set service dhcp-server failover source-address 192.168.11.32

# VyOS#2をSecondaryに設定
set service dhcp-server failover status secondary

# DHCPで配布するデフォルトゲートウェイとDNS
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 default-router '192.168.11.31'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 name-server 192.168.11.61
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 name-server 192.168.11.62

# DHCPリース時間を86400秒 (24時間) に設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 lease '86400'

# DHCPリースを行うIPアドレスの開始・終了を指定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 range 0 start '192.168.11.201'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 range 0 stop '192.168.11.240'

# 対象のサブネットをフェイルオーバー対象に設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 enable-failover

# IPアドレス固定設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 static-mapping <任意の文字列> ip-address '192.168.11.15'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 static-mapping <任意の文字列> mac-address 'aa:bb:cc:11:22:33'

設定投入後、commitとsaveをしておく。

# commit
# save

DHCPサーバ構築手順 (1.3.x)

1. VyOS#1側設定 (Primary)

設定に必要なコマンドを以下にコメントを付けて記載する。

# DHCPで配布するデフォルトゲートウェイとDNS
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 default-router '192.168.11.31'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 dns-server '192.168.11.61'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 dns-server '192.168.11.62'

# VyOS#1をlocal、VyOS#2をpeerとしてIPアドレスを設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 failover local-address '192.168.11.33'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 failover peer-address '192.168.11.32'

# フェイルオーバーグループ名とステータスをPrimaryに設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 failover name 'dhcp1'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 failover status 'primary'

# DHCPリース時間を86400秒 (24時間) に設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 lease '86400'

# DHCPリースを行うIPアドレスの開始・終了を指定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 range 0 start '192.168.11.201'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 range 0 stop '192.168.11.240'

# IPアドレス固定設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 static-mapping <任意の文字列> ip-address '192.168.11.15'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 static-mapping <任意の文字列> mac-address 'aa:bb:cc:11:22:33'

設定投入後、commitとsaveをしておく。

# commit
# save

2. VyOS#2側設定 (Secondary)

設定に必要なコマンドを以下にコメントを付けて記載する。設定内容はIPアドレスやPrimary/Secondaryの設定を除けば、VyOS#1側と同様となる。

# DHCPで配布するデフォルトゲートウェイとDNS
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 default-router '192.168.11.31'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 dns-server '192.168.11.61'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 dns-server '192.168.11.62'

# VyOS#1をlocal、VyOS#2をpeerとしてIPアドレスを設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 failover local-address '192.168.11.32'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 failover peer-address '192.168.11.33'

# フェイルオーバーグループ名とステータスをSecondaryに設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 failover name 'dhcp1'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 failover status 'secondary'

# DHCPリース時間を86400秒 (24時間) に設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 lease '86400'

# DHCPリースを行うIPアドレスの開始・終了を指定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 range 0 start '192.168.11.201'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 range 0 stop '192.168.11.240'

# IPアドレス固定設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 static-mapping <任意の文字列> ip-address '192.168.11.15'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 static-mapping <任意の文字列> mac-address 'aa:bb:cc:11:22:33'

設定投入後、commitとsaveをしておく。

# commit
# save

DHCPの動作確認

実際にWindows等を同じネットワークに接続させて、DHCPにてIPアドレスを取得できることを確認してみる。

VyOSのDHCPサーバにてリースしたIPアドレスの一覧は、show dhcp server leasesで確認できる。冗長化しているため、VyOS#1、#2の両方で同一結果が出力されるはずだ。

VyOS#1側

$ show dhcp server leases
IP address      Hardware address    State    Lease start          Lease expiration     Remaining    Pool           Hostname
--------------  ------------------  -------  -------------------  -------------------  -----------  -------------  ----------------
192.168.11.223  00:0c:29:31:7a:11   active   2021/01/03 07:26:51  2021/01/03 07:56:51  0:29:37      dhcp-scope-01
192.168.11.224  00:0c:29:31:7a:1b   active   2021/01/03 07:26:51  2021/01/03 07:56:51  0:29:37      dhcp-scope-01
192.168.33.202  3c:6a:a7:92:95:3c   active   2021/01/01 22:53:23  2021/01/02 22:22:06               dhcp-scope-02  DESKTOP-9I8V9NC
192.168.33.204  fc:f5:c4:95:22:ee   active   2021/01/02 20:51:48  2021/01/03 20:51:48  13:24:34     dhcp-scope-02

VyOS#2側

$ show dhcp server leases
IP address      Hardware address    State    Lease start          Lease expiration     Remaining    Pool           Hostname
--------------  ------------------  -------  -------------------  -------------------  -----------  -------------  ----------------
192.168.11.223  00:0c:29:31:7a:11   active   2021/01/03 07:26:51  2021/01/03 07:56:51  0:29:53      dhcp_scope_01
192.168.11.224  00:0c:29:31:7a:1b   active   2021/01/03 07:26:51  2021/01/03 07:56:51  0:29:53      dhcp_scope_01
192.168.33.202  3c:6a:a7:92:95:3c   active   2021/01/01 22:53:23  2021/01/02 22:22:06               dhcp-scope-02  DESKTOP-9I8V9NC
192.168.33.204  fc:f5:c4:95:22:ee   active   2021/01/02 20:51:48  2021/01/03 20:51:48  13:24:50     dhcp_scope_02

参考

更新履歴

  • 2021/11/23 VyOS 1.4.xの設定手順を追加
2021年11月20日土曜日

OpenLDAP入門① (OpenLDAP初期構築手順)

Red Hat Enterprise Linux 7 (RHEL7) で利用できるOpenLDAPは、ユーザやパスワード情報を一元管理し、認証機能を提供することができる。ただし、Red Hat Enterprise Linux 8 (RHEL8) になってから、OpenLDAPは非サポートとなり、代わりに「Red Hat Directory Server (RHDS)」が利用できるようになった。

なお、RHEL 8でもしOpenLDAPを利用したい要件がある場合の選択肢としては、OSSTech製のOpenLDAPを利用するという方法もある。

そのような状況ではあるが、本記事では純粋な「RHEL 7のOpenLDAP」を使ってLDAPサーバを構築する手順を記載する。内容が多いため、以下の3回に分けて記載する。

環境

前述した通り、今回はRHEL 7のOpenLDAPを構築する。

  • OS : Red Hat Enterprise Linux 7.7
  • OpenLDAP : 2.4.44

OpenLDAPのドメイン等の情報は以下とする。

設定項目 設定値
ドメイン dc=example,dc=com
RootDN cn=Manager,dc=example,dc=com
OU ou=group,dc=example,dc=com
グループ cn=ldapgrp,ou=group,dc=example,dc=com
ユーザ1 uid=user01,ou=group,dc=example,dc=com
ユーザ2 uid=user01,ou=group,dc=example,dc=com

OpenLDAPサーバ構築手順

1. OpenLDAPパッケージのインストール

OpenLDAPを使うためには、yumを使用してopenldap-serversとopenldap-clientsをインストールするだけでよい。

# yum install openldap-servers openldap-clients -y

~(中略)~

インストール:
  openldap-clients.x86_64 0:2.4.44-21.el7_6
  openldap-servers.x86_64 0:2.4.44-21.el7_6

完了しました!

特に依存関係もないため、rpmを使って直接インストールすることも可能。RHEL 7のインストールメディアからインストールする場合は、以下の通り実行する。

# rpm -ivh openldap-servers-2.4.44-21.el7_6.x86_64.rpm
# rpm -ivh openldap-clients-2.4.44-21.el7_6.x86_64.rpm

2. OpenLDAPの起動

インストールをしたら、とりあえずOpenLDAPを起動させる。

# systemctl start slapd
# systemctl enable slapd

3. 管理用パスワードの設定

いよいよOpenLDAPの設定を実施していく。まず、設定ファイルをディレクトリ丸ごとバックアップしておこう。

# cp -pr /etc/openldap/slapd.d{,_20211016}
# ls -ld /etc/openldap/slapd.d*
drwxr-x---. 3 ldap ldap 45  7月 18 14:49 /etc/openldap/slapd.d
drwxr-x---. 3 ldap ldap 45  7月 18 14:49 /etc/openldap/slapd.d_20210718

OpenLDAPはldapadd、ldapmodify、ldapdeleteコマンドを使用して設定する。これらのコマンドに「LDIF」と呼ばれるLDAP用の設定情報が記載されたファイルを読み込ませることで、直接設定ファイルを編集しなくとも設定することができる。

今回はldapaddコマンドにて設定を行う。構文は以下と覚えておく。

ldapadd -Y EXTERNAL -H ldapi:/// -f [ファイル名].ldif

-Y EXTERNAL : root作業時のパスワード入力をスキップ
-H ldapi:/// : ローカルのLDAPに対する作業

まずOpenLDAPに必要となる管理用パスワードを設定する。パスワードは平文ではなくハッシュ値にてLDIFファイルに記載する。パスワードのハッシュ値を生成するためのコマンドとして、slappasswdが用意されているため、こちらを利用してパスワードのハッシュ値を生成する。

生成されたパスワードはソルト付きのSHA-1のハッシュ値となり、{SSHA}という文字が先頭に付いた32文字となる。

# slappasswd
New password:
Re-enter new password:
{SSHA}XXX~(省略)~XXX

以下の通りLDIFファイルを作成して、ldapaddコマンドにて設定する。

# cat << EOF > rootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootDN
olcRootDN: cn=config
-
add: olcRootPW
olcRootPW: {SSHA}XXX~(省略)~XXX
EOF

# ldapadd -Y EXTERNAL -H ldapi:/// -f rootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

設定内容を確認するコマンドとしてはldapsearchを使う。指定するオプションは以下の通り。

オプション 説明
-LLL LDIF バージョンを表示させないため、Lオプションを3つ付与する。
-b LDAPの検索位置を指定する。

実際に確認した結果は以下の通りとなる。

# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'olcDatabase={0}config,cn=config'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth" manage by * none
olcRootDN: cn=config
olcRootPW: {SSHA}XXX~(省略)~XXX

4. 管理者パスワードの設定

管理者パスワードとして、monitorとhdbのパスワードを設定する。monitorはモニターデータベース、hdbはLDAPのデータベース本体と理解しておこう。

今回、それぞれの管理ユーザは「cn=Manager,dc=example,dc=com」で設定する。この管理ユーザをRootDNと呼ぶ。

以下の通りLDIFファイルを作成して、ldapaddコマンドにて設定する。

# cat << EOF > hdbpw.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=example,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com
-
replace: olcRootDN
olcRootDN: cn=Manager,dc=example,dc=com
-
add: olcRootPW
olcRootPW: {SSHA}XXX~(省略)~XXX
EOF

# ldapadd -Y EXTERNAL -H ldapi:/// -f hdbpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

5. スキーマの追加

LDAPで利用するスキーマを設定する。スキーマは、cosine.ldif、inetorgperson.ldif、nis.ldifを登録すればLDAPサーバとして利用できる。

登録コマンドは以下の通り。

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif

実際の実行結果は以下の通り。

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"

6. BaseDN、OU、グループを登録

ここまで設定すれば、LDAPサーバにBaseDNや、OU、グループが登録できる。

設定項目 設定値
ドメイン dc=example,dc=com
OU ou=group,dc=example,dc=com
グループ cn=ldapgrp,ou=group,dc=example,dc=com

以下の通りLDIFファイルを作成する。

# cat << EOF > base.ldif
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.

dn: ou=group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group

dn: cn=ldapgrp,ou=group,dc=example,dc=com
objectClass: posixGroup
gidNumber: 10000
cn: ldapgrp
EOF

ここからはldapaddコマンドを利用することは変わらないが、少しオプションが異なり、先ほど設定した管理者 (cn=Manager,dc=example,dc=com) を指定して登録を行う点に注意する。

# ldapadd -x -D "cn=Manager,dc=example,dc=com" -w '[RootDNのパスワード]' -f base.ldif
adding new entry "dc=example,dc=com"

adding new entry "ou=group,dc=example,dc=com"

adding new entry "cn=ldapgrp,ou=group,dc=example,dc=com"

7. ユーザを登録

ユーザを登録する。

設定項目 設定値
ユーザ1 uid=user01,ou=group,dc=example,dc=com
ユーザ2 uid=user01,ou=group,dc=example,dc=com

以下の通りLDIFファイルを作成して、ldapaddコマンドにて設定する。

# cat << EOF > user.ldif
dn: uid=user01,ou=group,dc=example,dc=com
uid: user01
cn: Hoge Hoge
sn: user01
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword: {SSHA}XXX~(省略)~XXX
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10000
homeDirectory: /home/user01

dn: uid=user02,ou=group,dc=example,dc=com
uid: user02
cn: Hoge Hoge
sn: user02
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword: {SSHA}XXX~(省略)~XXX
loginShell: /bin/bash
uidNumber: 10002
gidNumber: 10000
homeDirectory: /home/user02
EOF

# ldapadd -x -D "cn=Manager,dc=example,dc=com" -w '[RootDNのパスワード]' -f user.ldif
adding new entry "uid=user01,ou=group,dc=example,dc=com"

adding new entry "uid=user02,ou=group,dc=example,dc=com"

これで一通り設定が完了したので、最後にldapsearchコマンドで登録結果を確認してみよう。

# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'ou=group,dc=example,dc=com'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: ou=group,dc=example,dc=com ←★OU「group」の情報
objectClass: organizationalUnit
ou: Group

dn: cn=ldapgrp,ou=group,dc=example,dc=com ←★グループ「ldapgrp」の情報
objectClass: posixGroup
gidNumber: 10000
cn: ldapgrp

dn: uid=user01,ou=group,dc=example,dc=com ←★ユーザ「user01」の情報
uid: user01
cn: Hoge Hoge
sn: user01
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword:: e1NTSEF9TFdVQXZyNzUvQlBpUDJ2MWZ5amxFdDlEVlB0d0lVYmU=
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10000
homeDirectory: /home/user01

dn: uid=user02,ou=group,dc=example,dc=com ←★ユーザ「user02」の情報
uid: user02
cn: Hoge Hoge
sn: user02
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword:: e1NTSEF9TFdVQXZyNzUvQlBpUDJ2MWZ5amxFdDlEVlB0d0lVYmU=
loginShell: /bin/bash
uidNumber: 10002
gidNumber: 10000
homeDirectory: /home/user02

8. LDP.exeを使った確認

ここまでの設定を行ったことで、OpenLDAPサーバに対してLDAPによる接続が可能となる。

実際に、外部からアクセスできることをWindows ServerのLDP.exeを利用して確認する。なお、LDP.exeは、役割管理ツールの「AD DSおよびAD LDSツール」に含まれる。

「ファイル名を指定して実行」にてldpを入力し「OK」を押すと、LDP.exeが起動する。

「ファイル」→「接続」を選択し、OpenLDAPサーバのIPアドレスとポート番号「389」を指定する。また、今回はLDAPSを使用しないため、SSLのチェックを外しておく。

次に、「表示」→「ツリー」を選択し、「ou=group,dc=example,dc=com」を入力する。

以下の通りOUに登録されているグループとユーザが表示されれば、問題なくOpenLDAPの設定は完了となる。

なお、バインドせずともOpenLDAPサーバに登録されているグループとユーザが表示される理由は、LDAPのデータベースに対してアクセス権を設定していない場合は、デフォルトで匿名ユーザの参照権限が有効となるためである。権限の設定方法は、別記事で紹介することとし、今回は割愛する。

以上で、OpenLDAPサーバの構築は完了となる。次回以降は今回構築したOpenLDAPサーバに対して、LDAPSの有効化やLinuxのSSSDを使って認証連携を行うことにする。

参考

2021年11月17日水曜日

AlmaLinuxをESXiにインストールしてみた

Red Hat Enterprise Linux (RHEL) のダウンストリーム版のディストリビューションであるCentOS 8は2021年末でサポートが終了し、以降はRHELのアップストリーム版であるCentOS Streamのみがサポートされることが発表された。

当初、CentOS 8は2029年までサポートされる予定であったが、突然サポート期間が短縮されてしまったことにより、CentOS 8を利用しているユーザは、早急にCentOS StreamやRHELへの移行を検討する必要が生じている。

そんな中、今までのCentOSと同様の位置付けのRHELダウンストリーム版のディストリビューションの開発がいくつかのプロジェクトで進められており、「AlmaLinux」もそのディストリビューションの1つである。

AlmaLinuxは2021/3/30にバージョン8.3が正式リリースされたので、実際にAlmaLinuxをESXi上の仮想マシンとしてインストールしてみた。

環境

  • ESXi : 6.7 Update 3
  • OS : AlmaLinux 8.3

AlmaLinuxインストール手順

1. AlmaLinuxのISOイメージをダウンロード

AlmaLinuxのISOイメージは、以下URLからダウンロードできる。

RHEL 8やCentOS 8と同様に、DVDのISOイメージ (AlmaLinux-8.3-x86_64-dvd.iso) は8.6GBもあるため、容量が大きすぎて困る場合は、minimal (AlmaLinux-8.3-x86_64-minimal.iso) をダウンロードし、必要なパッケージは別途インストールしても問題ない。

今回は、minimalをダウンロードしてインストールを行う。

2. ESXiにて仮想マシンを作成

ESXiの仮想マシンは以下設定にて作成する。

  • ゲストOSのファミリ : Linux
  • ゲストOSのバージョン : その他の Linux 4.x 以降 (64 ビット)
  • [仮想マシンのオプション] → [UEFIセキュアブートの有効化] : チェックを外す

CentOS 8と異なり「UEFIセキュアブートの有効化」のチェックが有効のままではインストールが開始できないので、必ずチェックを外すこと。
※【注意】AlmaLinux 8.4以降はSecure Bootに対応したため本手順は不要。

もし、チェックをしたままだと「EFI VMware Virtual SATA CDROM Drive (0.0)… unsuccessful.」のメッセージが表示され、ISOイメージからの起動ができない。なお、OSインストール後に有効に戻してもAlmaLinuxは起動できないことを確認している。

3. RHELやCentOSと同様にインストール

ISOイメージからブートしてしまえば、RHELやCentOSでおなじみのインストールウィザードが開始される。最低限、言語設定、時刻と日付 (タイムゾーン)、rootパスワード、インストール先を設定し、インストールを開始する。

4. インストール後、ログイン

インストール後、仮想コンソールを使ってrootでログインし、nmtuiなどを使ってネットワークの設定を行う。

なお、redhat-releaseを確認したところ、以下の通り「AlmaLinux 8.3」となっていることが確認できた。

# cat /etc/redhat-release
AlmaLinux release 8.3 (Purple Manul)

5. open-vm-toolsをインストール

ネットワークの設定を行いインターネットに接続できるようになったら、dnfにてopen-vm-toolsをインストールする。

# dnf install open-vm-tools -y
最速のミラーを確定しています (70 hosts).. done. ---  B/s |   0  B     --:-- ETA
AlmaLinux 8 - BaseOS                            3.4 MB/s | 3.4 MB     00:01
AlmaLinux 8 - AppStream                          12 MB/s | 6.8 MB     00:00
AlmaLinux 8 - PowerTools                         13 MB/s | 2.1 MB     00:00
AlmaLinux 8 - Extras                             65 kB/s | 3.6 kB     00:00
依存関係が解決しました。
================================================================================
 パッケージ           Arch        バージョン               リポジトリー   サイズ
================================================================================
インストール:
 open-vm-tools        x86_64      11.1.0-2.el8             appstream      715 k
依存関係のインストール:
 fuse                 x86_64      2.9.7-12.el8             baseos          82 k
 fuse-common          x86_64      3.2.1-12.el8             baseos          21 k
 libdrm               x86_64      2.4.101-1.el8            appstream      164 k
 libmspack            x86_64      0.7-0.3.alpha.el8.4      appstream       71 k
 libpciaccess         x86_64      0.14-1.el8               baseos          32 k
 libtool-ltdl         x86_64      2.4.6-25.el8             baseos          58 k
 libxslt              x86_64      1.1.32-5.el8             baseos         249 k
 pciutils             x86_64      3.6.4-2.el8              baseos         102 k
 tar                  x86_64      2:1.30-5.el8             baseos         837 k
 xmlsec1              x86_64      1.2.25-4.el8             appstream      190 k
 xmlsec1-openssl      x86_64      1.2.25-4.el8             appstream       93 k

トランザクションの概要
================================================================================
インストール  12 パッケージ

ダウンロードサイズの合計: 2.6 M
インストール済みのサイズ: 7.6 M
パッケージのダウンロード:
done.inux 8 - BaseOS     [            ===     ] ---  B/s |   0  B     --:-- ETA
(1/12): fuse-common-3.2.1-12.el8.x86_64.rpm     1.2 MB/s |  21 kB     00:00
(2/12): libpciaccess-0.14-1.el8.x86_64.rpm      1.2 MB/s |  32 kB     00:00
(3/12): fuse-2.9.7-12.el8.x86_64.rpm            2.5 MB/s |  82 kB     00:00
(4/12): libtool-ltdl-2.4.6-25.el8.x86_64.rpm    3.1 MB/s |  58 kB     00:00
(5/12): pciutils-3.6.4-2.el8.x86_64.rpm         5.5 MB/s | 102 kB     00:00
(6/12): libxslt-1.1.32-5.el8.x86_64.rpm         7.8 MB/s | 249 kB     00:00
(7/12): libdrm-2.4.101-1.el8.x86_64.rpm         4.0 MB/s | 164 kB     00:00
(8/12): tar-1.30-5.el8.x86_64.rpm                11 MB/s | 837 kB     00:00
(9/12): libmspack-0.7-0.3.alpha.el8.4.x86_64.rp 1.2 MB/s |  71 kB     00:00
(10/12): xmlsec1-1.2.25-4.el8.x86_64.rpm        9.9 MB/s | 190 kB     00:00
(11/12): xmlsec1-openssl-1.2.25-4.el8.x86_64.rp 2.9 MB/s |  93 kB     00:00
(12/12): open-vm-tools-11.1.0-2.el8.x86_64.rpm  8.2 MB/s | 715 kB     00:00
--------------------------------------------------------------------------------
合計                                            9.4 MB/s | 2.6 MB     00:00

~(中略)~

インストール済み:
  fuse-2.9.7-12.el8.x86_64            fuse-common-3.2.1-12.el8.x86_64
  libdrm-2.4.101-1.el8.x86_64         libmspack-0.7-0.3.alpha.el8.4.x86_64
  libpciaccess-0.14-1.el8.x86_64      libtool-ltdl-2.4.6-25.el8.x86_64
  libxslt-1.1.32-5.el8.x86_64         open-vm-tools-11.1.0-2.el8.x86_64
  pciutils-3.6.4-2.el8.x86_64         tar-2:1.30-5.el8.x86_64
  xmlsec1-1.2.25-4.el8.x86_64         xmlsec1-openssl-1.2.25-4.el8.x86_64

完了しました!

open-vm-toolsがインストールされると、ESXiでもホスト名やIPアドレスを認識するようになる。

以上でAlmaLinuxのインストールが完了となる。

更新履歴

  • 2021/11/17 AlmaLinux 8.4 GA版のリリースに伴い内容を更新 (Secure Bootにサポートした旨追記)

Rocky LinuxをESXiにインストールしてみた

Red Hat Enterprise Linux (RHEL) のダウンストリーム版のディストリビューションであるCentOS 8は2021年末でサポートが終了し、以降はRHELのアップストリーム版であるCentOS Streamのみがサポートされることが発表された。

当初、CentOS 8は2029年までサポートされる予定であったが、突然サポート期間が短縮されてしまったことにより、CentOS 8を利用しているユーザは、早急にCentOS StreamやRHELへの移行を検討する必要が生じている。

そんな中、今までのCentOSと同様の位置付けのRHELダウンストリーム版のディストリビューションの開発がいくつかのプロジェクトで進められており、「Rocky Linux」もそのディストリビューションの1つである。

Rocky Linuxは2021/4/30にバージョン8.3 RC版がリリースされ、2021/6/4にバージョン8.4 RC版、そしてついに2021/6/21にバージョン8.4 GA版がリリースされた。本記事では、実際にRocky LinuxをESXi上の仮想マシンとしてインストールしてみた。

環境

  • ESXi : 6.7 Update 3
  • OS : Rocky Linux 8.4

Rocky Linuxインストール手順

1. Rocky LinuxのISOイメージをダウンロード

Rocky LinuxのISOイメージは、以下URLからダウンロードできる。

RHEL 8やCentOS 8と同様に、DVDのISOイメージ (Rocky-8.X-x86_64-dvd1.iso) は8.6GBもあるため、容量が大きすぎて困る場合は、minimal (Rocky-8.X-x86_64-minimal.iso) をダウンロードし、必要なパッケージは別途インストールしても問題ない。

今回は、minimalをダウンロードしてインストールを行う。

2. ESXiにて仮想マシンを作成

ESXiの仮想マシンは以下設定にて作成する。

  • ゲストOSのファミリ : Linux
  • ゲストOSのバージョン : その他の Linux 4.x 以降 (64 ビット)
  • [仮想マシンのオプション] → [UEFIセキュアブートの有効化] : チェックを外す

CentOS 8と異なり「UEFIセキュアブートの有効化」のチェックが有効のままではインストールが開始できないので、必ずチェックを外すこと。
※【注意】Rocky Linux 8.5以降はSecure Bootに対応したため本手順は不要。

もし、チェックをしたままだと「EFI VMware Virtual SATA CDROM Drive (0.0)… unsuccessful.」のメッセージが表示され、ISOイメージからの起動ができない。なお、OSインストール後に有効に戻してもRocky Linuxは起動できないことを確認している。

3. RHELやCentOSと同様にインストール

ISOイメージからブートしてしまえば、RHELやCentOSでおなじみのインストールウィザードが開始される。最低限、言語設定、時刻と日付 (タイムゾーン)、rootパスワード、インストール先を設定し、インストールを開始する。なお、Rocky Linuxでは「ソフトウェアの選択」がデフォルトでは「サーバー」になっている。少しでも不要なパッケージをインストールしたくない場合は、「最小限のインストール」に変更すること。

4. インストール後、ログイン

インストール後、仮想コンソールを使ってrootでログインし、nmtuiなどを使ってネットワークの設定を行う。

なお、redhat-releaseを確認したところ、以下の通り「Rocky Linux 8.4」となっていることが確認できた。

# cat /etc/redhat-release
Rocky Linux release 8.4 (Green Obsidian)

5. open-vm-toolsをインストール

ネットワークの設定を行いインターネットに接続できるようになったら、dnfにてopen-vm-toolsをインストールする。

# dnf install open-vm-tools -y
Rocky Linux 8 - AppStream                       3.7 MB/s | 6.7 MB     00:01
Rocky Linux 8 - BaseOS                          5.5 MB/s | 2.5 MB     00:00
Rocky Linux 8 - Extras                          2.8 kB/s | 1.6 kB     00:00
依存関係が解決しました。
================================================================================
 パッケージ           Arch        バージョン               リポジトリー   サイズ
================================================================================
インストール:
 open-vm-tools        x86_64      11.1.0-2.el8             appstream      716 k
依存関係のインストール:
 fuse                 x86_64      2.9.7-12.el8             baseos          81 k
 fuse-common          x86_64      3.2.1-12.el8             baseos          20 k
 libdrm               x86_64      2.4.101-1.el8            appstream      164 k
 libmspack            x86_64      0.7-0.3.alpha.el8.4      appstream       69 k
 libpciaccess         x86_64      0.14-1.el8               baseos          31 k
 libtool-ltdl         x86_64      2.4.6-25.el8             baseos          57 k
 libxslt              x86_64      1.1.32-5.el8             baseos         248 k
 pciutils             x86_64      3.6.4-2.el8              baseos         101 k
 tar                  x86_64      2:1.30-5.el8             baseos         837 k
 xmlsec1              x86_64      1.2.25-4.el8             appstream      191 k
 xmlsec1-openssl      x86_64      1.2.25-4.el8             appstream       94 k

トランザクションの概要
================================================================================
インストール  12 パッケージ

ダウンロードサイズの合計: 2.5 M
インストール済みのサイズ: 7.6 M
パッケージのダウンロード:
(1/12): libmspack-0.7-0.3.alpha.el8.4.x86_64.rp  22 MB/s |  69 kB     00:00
(2/12): xmlsec1-1.2.25-4.el8.x86_64.rpm          66 MB/s | 191 kB     00:00
(3/12): xmlsec1-openssl-1.2.25-4.el8.x86_64.rpm  46 MB/s |  94 kB     00:00
(4/12): fuse-2.9.7-12.el8.x86_64.rpm             79 MB/s |  81 kB     00:00
(5/12): open-vm-tools-11.1.0-2.el8.x86_64.rpm    65 MB/s | 716 kB     00:00
(6/12): fuse-common-3.2.1-12.el8.x86_64.rpm      19 MB/s |  20 kB     00:00
(7/12): libpciaccess-0.14-1.el8.x86_64.rpm       31 MB/s |  31 kB     00:00
(8/12): libtool-ltdl-2.4.6-25.el8.x86_64.rpm     55 MB/s |  57 kB     00:00
(9/12): libxslt-1.1.32-5.el8.x86_64.rpm         144 MB/s | 248 kB     00:00
(10/12): libdrm-2.4.101-1.el8.x86_64.rpm         11 MB/s | 164 kB     00:00
(11/12): pciutils-3.6.4-2.el8.x86_64.rpm        9.9 MB/s | 101 kB     00:00
(12/12): tar-1.30-5.el8.x86_64.rpm               21 MB/s | 837 kB     00:00
--------------------------------------------------------------------------------
合計                                            7.2 MB/s | 2.5 MB     00:00

~(中略)~

インストール済み:
  fuse-2.9.7-12.el8.x86_64            fuse-common-3.2.1-12.el8.x86_64
  libdrm-2.4.101-1.el8.x86_64         libmspack-0.7-0.3.alpha.el8.4.x86_64
  libpciaccess-0.14-1.el8.x86_64      libtool-ltdl-2.4.6-25.el8.x86_64
  libxslt-1.1.32-5.el8.x86_64         open-vm-tools-11.1.0-2.el8.x86_64
  pciutils-3.6.4-2.el8.x86_64         tar-2:1.30-5.el8.x86_64
  xmlsec1-1.2.25-4.el8.x86_64         xmlsec1-openssl-1.2.25-4.el8.x86_64

完了しました!

open-vm-toolsがインストールされると、ESXiでもホスト名やIPアドレスを認識するようになる。

以上でRocky Linuxのインストールが完了となる。

更新履歴

  • 2021/05/06 新規作成
  • 2021/06/05 Rocky Linux 8.4 RC版のリリースに伴い内容を更新
  • 2021/06/22 Rocky Linux 8.4 GA版のリリースに伴い内容を更新 
  • 2021/11/17 Rocky Linux 8.5 GA版のリリースに伴い内容を更新 (Secure Bootにサポートした旨追記)

人気の投稿