Linux
openladap
参考 †
Server †
Install (以下 su - 権限) †
yum install openldap openldap-servers openldap-clients
パスワードの準備 †
- slappasswd
- New password:[パスワード入力]
- Re-enter new password:[パスワード入力]
- {SSHA}3pVTGxVxrS7tFJXrp+sAA6EdSgO8y1NE
- vi /etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif
DB 環境構築 †
Service の起動 †
/etc/init.d/slapd start
loglevel の設定 †
LDAP の基本設定 †
- ldapsearch -x -LLL -b 'olcDatabase={2}bdb,cn=config' -D cn=config -W
- Enter LDAP Password: [上記で設定したディレクトリパスワードを入力]
- dn: olcDatabase={2}bdb,cn=config
- objectClass: olcDatabaseConfig?
- objectClass: olcBdbConfig?
- olcDatabase: {2}bdb
- olcDbDirectory?: /var/lib/ldap
- olcSuffix: dc=my-domain,dc=com
- olcAddContentAcl?: FALSE
- olcLastMod?: TRUE
- olcMaxDerefDepth?: 15
- olcReadOnly?: FALSE
- olcRootDN: cn=Manager,dc=my-domain,dc=net
データ用ディレクトリの管理情報の変更 †
- LDIF ファイルを準備し適用する方法
- vi bdb-init.ldif -W
- # 設定を行うDNを指定
- dn: olcDatabase={2}bdb,cn=config
- # このLDIFファイルで修正を行うことを宣言します
- changetype: modify
- # olcRootDNを書き換えることを指定し値を指定する
- replace: olcRootDN
- olcRootDN: cn=Manager,dc=unix-power,dc=net
- -
- # olcSuffixを書き換えることを指定し値を指定する
- replace: olcSuffix
- olcSuffix: dc=unix-power,dc=net
- -
- # olcRootPWを追加することを指定し値を指定する
- add: olcRootPW
- olcRootPW: {SSHA}en/K3sLikQDCWk/lMmWLNh8svNQ+ggf0
- GUI ツール、Apache Directory Studio
初期データの登録(以下は CUI) †
- vi init.ldif
dn: dc=unix-power,dc=net
objectclass: dcObject
objectclass: organization
o: VIRTUAL CORPORATION
dc: unix-power
dn: cn=Manager,dc=unix-power,dc=net
objectclass: organizationalRole
cn: Manager
- 登録は ldapadd コマンド
ldapadd -x -W -D "cn=Manager,dc=unix-power,dc=net" -f init.ldif
- vi add.ldif
dn: ou=Users,dc=unix-power,dc=net
objectclass: organizationalUnit
ou: Users
dn: ou=Groups,dc=unix-power,dc=net
objectclass: organizationalUnit
ou: Groups
dn: ou=Computers,dc=unix-power,dc=net
objectclass: organizationalUnit
ou: Computers
# ldapadd -x -W -D "cn=Manager,dc=unix-power,dc=net" -f add.ldif
Enter LDAP Password:
adding new entry "ou=Users,dc=unix-power,dc=net"
adding new entry "ou=Groups,dc=unix-power,dc=net"
adding new entry "ou=Computers,dc=unix-power,dc=net
- vi groupadd.ldif
dn: cn=develop,ou=Groups,dc=unix-power,dc=net
objectClass: posixGroup
cn: develop
gidNumber: 1000
dn: cn=sales,ou=Groups,dc=unix-power,dc=net
objectClass: posixGroup
cn: sales
gidNumber: 1001
dn: cn=market,ou=Groups,dc=unix-power,dc=net
objectClass: posixGroup
cn: market
gidNumber: 1002
# ldapadd -x -W -D "cn=Manager,dc=unix-power,dc=net" -f groupadd.ldif
Enter LDAP Password:
adding new entry "cn=develop,ou=Groups,dc=unix-power,dc=net"
adding new entry "cn=sales,ou=Groups,dc=unix-power,dc=net"
adding new entry "cn=market,ou=Groups,dc=unix-power,dc=net"
- vi useradd.ldif
dn: uid=takeda,ou=Users,dc=unix-power,dc=net
objectclass: posixAccount
objectclass: inetOrgPerson
sn: takeda
cn: kazuma
displayName: Takeda Kazuma
uid: takeda
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/takeda
loginShell: /bin/bash
userPassword: {CRYPT}B5fKzlwfatuy2
mail: takeda@unix-power.net
dn: uid=suzuki,ou=Users,dc=unix-power,dc=net
objectclass: posixAccount
objectclass: inetOrgPerson
sn: suzuki
cn: hajime
displayName: Suzuki Hajime
uid: suzuki
uidNumber: 1001
gidNumber: 1000
homeDirectory: /home/suzuki
loginShell: /bin/bash
userPassword: {CRYPT}B5fKzlwfatuy2
mail: suzuki@unix-power.net
dn: uid=tanaka,ou=Users,dc=unix-power,dc=net
objectclass: posixAccount
objectclass: inetOrgPerson
sn: tanaka
cn: takuya
displayName: Tanaka Takuya
uid: tanaka
uidNumber: 1002
gidNumber: 1000
homeDirectory: /home/tanaka
loginShell: /bin/bash
userPassword: {CRYPT}B5fKzlwfatuy2
mail: tanaka@unix-power.net
# ldapadd -x -W -D "cn=Manager,dc=unix-power,dc=net" -f useradd.ldif
Enter LDAP Password:
adding new entry "uid=takeda,ou=Users,dc=unix-power,dc=net"
adding new entry "uid=suzuki,ou=Users,dc=unix-power,dc=net"
adding new entry "uid=tanaka,ou=Users,dc=unix-power,dc=net"
ssl 対応 †
前提 †
- CentOS6 でやります。
- Client は AlmaLinux? 8。
- 理由は RHEL8 相当はクライアントでldap情報を参照する際、SSL以上が必須なため。
(SSL無しでできないか相当調べましたが無理でした。)
証明書の作成(ldap サーバー側) †
- 参考サイト
- 証明書の作成とコピー。少し読み変えて CentOS6 で動かします。
- 以下は全て root 権限で行う。
- openssl のインストール
yum -y install openssl
- ディレクトリへ移動
cd /etc/pki/CA/
- index.txt の作成。(既にあったら消して作り直す)
touch index.txt
- serial file の初期化
echo 01 > serial
- ca.key の作成
openssl genrsa -out ca.key 4096
- ca.cert.pem の作成
openssl req -new -x509 -days 365 -key ca.key -out ca.cert.pem
- 最初は国。例: JP
- 県。例: Saitama
- 市。例: Sakado
- 会社名。例: Home
- 組織。例: Home
- Common name。host名など。例: hoge.domain.jp
- Mail address。例: (空白)Enter
- サーバー証明書の作成
- ディレクトリ移動
cd private/
- key の作成
openssl genrsa -out ldap.domain.jp.key 4096
- csr の作成
req -new -key ldap.domain.jp.key -out ldap.domain.jp.csr
- 1つ上のディレクトリへ移動
cd ..
- crt ファイルの作成
y を2回押す。
「Data Base Updated」と表示されれば完了。
ca -keyfile ca.key -cert ca.cert.pem -in private/ldap.domain.jp.csr -out private/ldap.domain.jp.crt -extensions v3_ca
- index.txt の確認
cat index.txt
- 確認
- 1
openssl verify -CAfile ca.cert.pem private/ldap.domain.jp.crt
- 2
openssl x509 -noout -text -in private/ldap.domain.jp.crt | grep -A 1 "Subject Alternative Name"
- openldap ディレクトリへコピー
- 1
cp -v private/ldap.domain.jp.crt private/ldap.domain.jp.key /etc/openldap/certs/
- 2
cp -v ca.cert.pem /etc/openldap/cacerts/
- 現在のldap設定を確認
slapcat -b "cn=config" | egrep "olcTLSCertificateFile|olcTLSCertificateKeyFile"
- openldap の設定を変更する ldif ファイルの作成
- cd
- vim tls.ldif
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/ldap.domain.jp.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/ldap.domain.jp.key
- ファイルの owner の変更
(CentOS6 だとユーザー名などは 「ldap」)
chown -R ldap:ldap /etc/openldap/certs
chown -R ldap:ldap /etc/openldap/cacerts
- tls.ldif の適用
ldapmodify -Y EXTERNAL -H ldapi:// -f tls.ldif
- もう1つの設定変更ファイルの作成
- vim tls-1.ldif
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/openldap/cacerts/ca.cert.pem
- 適用
ldapmodify -Y EXTERNAL -H ldapi:// -f tls-1.ldif
- 再度設定の確認
slapcat -b "cn=config" | egrep "olcTLSCertificateFile|olcTLSCertificateKeyFile|olcTLSCACertificateFile"
- ldap config file の変更
(CentOS6 ではここの手順が違くてはまりました。。。
CentOS6 では、SLAPD_URLS を空白にしておく必要があります。
以下のSLAPD_LDAPS を yes に変更すれば、自動的に ldaps:/// が追加されます)
- vi /etc/sysconfig/ldap
- 変更前
SLAPD_LDAPS=no
- 変更後
SLAPD_LDAPS=yes
- ldap.conf の変更
- slapd の再起動
service slapd restart
クライアント側の設定 †
- 参考サイト
- AlmaLinux8 で行いました。
- 以下は全て root 権限で行うこと。
- (クライアント) 関連ソフトのインストール
dnf -y install openldap-clients sssd sssd-ldap oddjob-mkhomedir openssl-perl
- (クライアント) openldap に証明書を入れるディクトリを作成する。
mkdir /etc/openldap/cacerts
- (サーバー側) 関連ファイルをクライアントにコピーする。
scp /etc/openldap/cacerts/ca.cert.pem ldap-client:/etc/openldap/cacerts/ca.cert.pem
- sssd.conf の設定
(SSLなので以下)
- (クライアント) vi /etc/sssd/sssd.conf
[sssd]
config_file_version = 2
services = nss, pam,autofs
domains = default
[nss]
homedir_substring = /home
[pam]
[domain/default]
id_provider = ldap
autofs_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldaps://ldap.domain.jp:636
ldap_chpass_uri = ldaps://ldap.domain.jp:636
ldap_search_base = dc=domain,dc=jp
ldap_id_use_start_tls = False
ldap_tls_cacertdir = /etc/openldap/certs
cache_credentials = True
ldap_tls_reqcert = demand
entry_cache_timeout = 600
ldap_network_timeout = 3
ldap_connection_expire_timeout = 60
- 権限の変更
chmod 600 /etc/sssd/sssd.conf
chown root:root /etc/sssd/sssd.conf
- (クライアント) ldap.conf の変更
- (クライアント) 証明書のリフレッシュ
openssl rehash /etc/openldap/cacerts
- (クライアント) sssd の設定を関連設定ファイルへ設定。
authselect select sssd with-mkhomedir --force
- (クライアント) 関連サービスの実行
- (クライアント) ldap の user 名が引けるか確認
id testUser
- (他のPCから) ログインできるか確認
ssh testUser@clientComputer
error, daemon: listen(ldap:///, 5) failed errno=98 (Address already in use) †
Client †
common †
Redhat系 †
- sudo yum install openldap-clients nss-pam-ldapd
- sudo authconfig-tui
Debian系 †
- sudo apt-get install libpam-ldap libnss-ldap nss-updatedb libnss-db
- Should debconf manage LDAP configuration?
<はい>
- LDAP server Uniform Resource Identifier:
ldap://123.456.789.012/
- Distinguished name of the search base:
dc=tar3,dc=net
- LDAP version to use:
3
- Make local root Database admin:
<はい>
- Does the LDAP database require login?
<いいえ>
- LDAP account for root:
cn=Manager,dc=tar3,dc=net
- LDAP root account password:
[LDAP root account password]
- The meanings for selections are:
<了解>
- Local crypt to use when changing passwords:
exop
- sudo vi /etc/pam.d/sshd
# Create home directory automatically.
session required pam_mkhomedir.so skel=/etc/skel/ umask=0007
- sudo vi /etc/nsswitch.conf
passwd: files ldap
group: files ldap
shadow: files ldap
netgroup: ldap
- 確認
getent passwd
- sudo 時、password を2回聞かれる問題
sudo vi /etc/pam.d/common-auth
- before
auth [success=1 default=ignore] pam_ldap.so use_first_pass
- after
auth [success=1 default=ignore] pam_ldap.so try_first_pass
- x ログイン時にユーザー名が表示されない
- ctrl + alt + F1 を押してコンソールへ。一度、ldap ユーザーでログインする。
ApacheDirectoryStudio? †
setButton(GtkWidget?*): アサーション `!_button._widget' に失敗しました。 †