LDAP ユーザー認証を使用するように Linux を構成する方法

LDAP ユーザー認証を使用するように Linux を構成する方法

私は CentOS に実装された LDAP ユーザー管理を使用しています。これはインターネット上のほとんどのチュートリアルとは異なるかもしれませんが、私が書いたので、間違いなく動作します。ただし、アドバイスし忘れたファイルがいくつかある可能性があります。
ここで OPENLdap と CentOS7 を使用して完了したユーザー管理には、nssswitch、pam、sssd の 3 つのサービスの設定が必要です。この記事の設定を完了する前に、ある程度の理解が必要です。

基本設定#

1. yumソースの設定を完了する

mkdir /root/back
tar -Jcvf /root/back/yum.repos.d-`date '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /etc/yum.repos.d/
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum,repos.d/CentOS-epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum メイクキャッシュ

1. 必要なソフトウェアをインストールする

yum -y インストール vim bash-completion openldap-servers openldap-clients nss-pam-ldapd sssd

OPENLdap サービスの部分構成#

初期化手順については詳しく説明しません。詳細については、「OPENLDAP サービスのインストールと事後管理」を参照してください。

1. まずデータベース サービスを停止します。

systemctl stop slapd

1. 次にファイルを編集します。

# 復元できない場合に備えて、まずファイルをバックアップします mkdir /root/back
tar -Jcvf /root/back/slapd.config-`date '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /etc/openldap/slapd.d/
tar -Jcvf /root/back/slapd.data-`date '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /var/lib/ldap/
# 次に設定ファイルを削除します rm -rf /etc/openldap/slapd.d/*
rm -rf /var/lib/ldap/*
# 設定ファイルを一時ディレクトリにコピーします mkdir /root/ldap
cd /root/ldap

1. slapd の設定ファイルを作成します。ここでの設定ファイルは、/usr/share/openldap-servers/slapd.ldif から派生したものです。主な変更点は、baseDN (サフィックス)、OPENLDAPTLS、olcRootPW (パスワードは slappasswd によって生成されます。この記事のパスワードは 123456 です)、include です。

# ファイル: /root/ldap/slapd.ldif
dn:cn=設定
オブジェクトクラス: olcGlobal
cn: 設定
olcArgsファイル: /var/run/openldap/slapd.args
olcPidファイル: /var/run/openldap/slapd.pid
olcTLS証明書ファイル: /etc/openldap/certs/server.crt
olcTLS証明書キーファイル: /etc/openldap/certs/server.key
olcTLSCACertificateファイル: /etc/openldap/cacerts/cacert.pem
dn: cn=スキーマ、cn=構成
オブジェクトクラス: olcSchemaConfig
cn: スキーマ
インクルード: ファイル:///etc/openldap/schema/core.ldif
インクルード: ファイル:///etc/openldap/schema/cosine.ldif
インクルード: ファイル:///etc/openldap/schema/nis.ldif
インクルード: ファイル:///etc/openldap/schema/inetorgperson.ldif
dn:olcDatabase=フロントエンド、cn=config
オブジェクトクラス: olcDatabaseConfig
オブジェクトクラス: olcFrontendConfig
olcデータベース:フロントエンド
dn: olcDatabase=config、cn=config
オブジェクトクラス: olcDatabaseConfig
olcデータベース:config
olcアクセス: * 
 dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" で管理 
 * なし
dn:olcDatabase=モニター、cn=構成
オブジェクトクラス: olcDatabaseConfig
olcデータベース: モニター
olcアクセス: * 
 dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" で読み取り 
 dn.base="cn=Manager,dc=black,dc=com" による読み取り 
 * なし
dn:olcデータベース=hdb、cn=config
オブジェクトクラス: olcDatabaseConfig
オブジェクトクラス: olcHdbConfig
olcデータベース: hdb
olcサフィックス: dc=black、dc=com
olcRootDN: cn=Manager、dc=black、dc=com
olcルートパスワード: {SSHA}l1vBI/HOMKLEiQZgcm3Co+hFQI68rH1Q
olcDbディレクトリ: /var/lib/ldap
olcDbIndex: オブジェクトクラス eq,pres
olcDbIndex: ou、cn、メール、姓、名 eq、pres、sub

1. OPENSSL 証明書を設定します。 openldap サーバーの暗号化トンネルに使用されます。

# まず、CA サービスの証明書ファイルを作成します cd /etc/pki/CA
openssl genrsa -out プライベート/cakey.pem 2048
openssl req -new -x509 -key private/cakey.pem -out cacert.pem # 証明書作成プロセスはここでは省略します。
# ただし、サーバー証明書アプリケーションの先頭は証明書の先頭と同じである必要があることに注意してください。そうでない場合、CA は証明書を発行できません。
タッチインデックス.txt
echo "01" > シリアル
# 次に、サーバー証明書の発行を申請します cd /etc/openldap/certs/
openssl genrsa -out server.key 2048
openssl ca -in server.csr -out server.crt -days 365
# CA証明書を指定された場所にコピーします mkdir /etc/openldap/cacerts
cp /etc/pki/CA/cacert.pem /etc/openldap/cacerts/

1. 設定に基づいてサーバー設定ファイルを生成する

slapadd -F "/etc/openldap/slapd.d/" -b "cn=config" -l slapd.ldif
# ファイルの所有者はまだルートなので、openldapに戻す必要があることに注意してください。
chown -R ldap:ldap /etc/openldap/slapd.d/*
# 次にサービスを起動します systemctl start slapd

_#################### 100.00% 予想時間 経過なし 高速なし!
 DBを閉じています...

1. データベース dn を初期化します: dc=black,dc=com
dc: 黒
オブジェクトクラス: トップ
オブジェクトクラス: ドメイン

dn:cn=マネージャー、dc=黒、dc=com
オブジェクトクラス: 組織の役割
cn: マネージャー
説明: LDAP マネージャー

dn:ou=人々、dc=黒人、dc=com
ou: 人々
オブジェクトクラス: トップ
オブジェクトクラス: 組織単位
オブジェクトクラス: ドメイン関連オブジェクト
関連ドメイン: black.com

dn:ou=グループ、dc=黒、dc=com
ou: グループ
オブジェクトクラス: トップ
オブジェクトクラス: 組織単位
オブジェクトクラス: ドメイン関連オブジェクト
関連ドメイン: black.com

1. データベースにインポートする

ldapadd -x -D "cn=Manager,dc=black,dc=com" -w 123456 -f base.ldif # 基本情報をデータベースにインポートします。
新しいエントリ「dc=black,dc=com」を追加します
 新しいエントリ「cn=root,dc=black,dc=com」を追加します
 新しいエントリ「ou=People,dc=black,dc=com」を追加します
 新しいエントリ「ou=Group,dc=black,dc=com」を追加します

1. 次に、Apache Directory Studio を使用して、サーバーが正常に構成されているかどうかを確認します。

まず、ファイアウォールをオンにします

firewall-cmd --add-service=ldap

1. 後でテストするためにここでユーザーをインポートしましょう

Linux ユーザー認証設定#

ここで設計したユーザー認証と解析は次のように行われます。

ネット上で他の人が書いていることと違う場合もありますので注意してください。

NSS サービス構成#

nss が ldap を照会できるようにするには、まず nslcd というサービスを有効にする必要があります。以下は、このサービスの設定ファイルです。

# ファイル: /etc/nslcd.conf
uid-nslcd
gid ldap
URI ldap://127.0.0.1/
ベース dc=black,dc=com
binddn cn=マネージャ、dc=黒、dc=com
バインドパスワード 123456
SSL番号
tls_cacertdir /etc/openldap/cacerts

サービスを開始する

chmod 600 /etc/nslcd.conf
systemctl nslcd を起動します
systemctl nslcd を有効にする

nssを設定する

# ファイル: /etc/nsswitch.conf

passwd: files ldap # 主に、passwd、shadow、groupの3行の後にldapを続ける必要があります。
シャドウ: ファイル LDAP
グループ: ファイル LDAP
ホスト: ファイル dns myhostname
ブートパラメータ: nisplus [NOTFOUND=return] ファイル
イーサ: ファイル
ネットマスク: ファイル
ネットワーク: ファイル
プロトコル: ファイル
rpc: ファイル
サービス: ファイル sss
ネットグループ: nisplus sss
公開鍵: nisplus
自動マウント: ファイル nisplus sss
エイリアス: ファイル nisplus

利用可能かどうかをテストします。

getent パスワード | grep 黒
black​:x:1001:1001:black:/home/black:/bin/bash

PAM サービス構成#

pam モジュールは、SSSD 認証に合格した関連モジュールで構成されています。ここでは次の内容を引用できます。

/etc/pam.d/ をコピーします。
 mv システム認証{,.bak}
 ln -s システム認証ac システム認証

PAMはサービスを再起動する必要がなく、直接使用できます。

sssd サービス構成#

LDAP ユーザーのログインの場合、PAM 構成によってログインが SSSD に転送され、SSSD でユーザーが認証されます。以下は sssd.conf 構成ファイルです。

# ファイル: /etc/sssd/sssd.conf
[ドメイン/black.com]
autofs_provider = ldap # autofsのプロバイダーをldapに設定する
id_provider = ldap # id のプロバイダーは ldap です
auth_provider = ldap # auth認証プロバイダをldapに設定する
chpass_provider = ldap # パスワード変更時に使用するアプリケーション cache_credentials = True # キャッシュを有効にする ldap_search_base = dc=black,dc=com # LDAP クエリのベース DN
ldap_uri = ldap://127.0.0.1/ # ldap URL パス ldap_id_use_start_tls = True # ldap tls 暗号化を有効にします。
ldap_tls_reqcert = never # TLS 暗号化を強制しません (TLS 暗号化を強制するには、hard に設定できます。TLS を使用できない場合、サービスが失敗する可能性があります。ldap と sssd は同じマシン上にあるため、TLS 暗号化は必要ありません)
ldap_tls_cacertdir = /etc/openldap/cacerts # ldap サービス tls 暗号化信頼証明書 (CA ルート証明書)。
[sssd]
services = nss, pam, autofs # 提供されるサービス domains = black.com # 有効なドメインを設定する [nss]
homedir_substring = /home
[パム]
[須藤]
[オートFS]
[ssh]
[パック]
[ifp]
[秘密]
[セッション記録]

スタートアップ サービスを構成し、起動時に自動的に開始するように設定します。

chmod 600 /etc/sssd/sssd.conf # 権限設定に注意してください。そうしないと起動しません。
systemctl sssd を起動する
systmctl sssd を有効にする

テスト#

ユーザー認証部分の準備ができたので、今すぐテストしてみましょう。
設定された system-auth ファイルで ssh ファイルが設定されていないため、ssh は接続できません。ここでは、実現可能性をテストするためにログインが使用されます。


ここで、ユーザーがログインできることも確認できます。もう 1 つの欠陥はホーム ディレクトリが存在しないことですが、これは以下のスクリプトで解決できます。

スクリプト#

ユーザーの追加を容易にするために、この LDAP ユーザー認証用のスクリプトを作成しました。ここで強調しておきたいのは、CentOS はユーザーを LDAP データベースに保存するための migrationtools ツールを提供していますが、すべてのローカル ユーザーを LDAP データベースに登録し、ローカル ユーザーを保持しないと、コンピューターを再起動できなくなるため、UID が 1000 未満のユーザーを LDAP サーバーに保存しないことをお勧めします。

注意: このスクリプトは上記の環境が構築された後にのみ使用できます。他の環境では未知の問題が発生する可能性があります。
スクリプトはgitee上に置かれています。 https://gitee.com/somata/script/blob/master/ldap_adduser.sh

とても使いやすいです

次に、追加したユーザーがログインできるかどうかをテストします。

要約する

上記は、LDAP ユーザー認証を使用するように Linux を構成するための編集者による紹介です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信いたします。

以下もご興味があるかもしれません:
  • Python でユーザー認証に LDAP を使用する方法

<<:  Vue.set() と this.$set() の使い方と違い

>>:  MySQL における in と exists の使い方と違いの紹介

推薦する

LinuxシステムにISOファイルをインストールする方法

Linux システムで iso ファイルをインストールするにはどうすればいいですか?インストール手順...

MySQL SQL ステートメントが遅い場合の一般的な原因と解決策

1. インデックス不足または無効なインデックスによるクエリの遅延数千万件のデータを含むテーブルで、イ...

cobbler ベースの Linux システムを自動的にインストールする

1. コンポーネントをインストールする yum install epel-rpm-macros.no...

HTML コード作成ガイド

共通コンベンションタグ自己終了タグ。閉じる必要はありません (例: img input br hr ...

CentOSはexpectを使用してスクリプトやコマンドをバッチでリモート実行します

サーバーへのファイルのアップロード、ソフトウェアのインストール、コマンドやスクリプトの実行、サービス...

Keepalived は Nginx の負荷分散と高可用性のサンプル コードを実装します

第1章: keepalivedの紹介VRRP プロトコルの目的は、静的ルーティングの単一点障害問題を...

JavaScript で最も高速なループはどれですか?

どの for ループまたは反復子がニーズに適しているかを知ることで、アプリケーションのパフォーマンス...

Node.jsとDenoの比較

目次序文Denoとは何ですか? Node.jsとの比較建築ESモジュール依存関係の管理TypeScr...

IDEA が MySQL データベースに接続できない問題の 6 つの解決策

この記事では、IDEA が MySQL データベースに接続できない問題に対する 6 つの解決策を主に...

SSDストレージを有効にしたMySQLインスタンスの詳細な説明

SSDストレージを有効にしたMySQLインスタンスの詳細な説明特に OS と MySQL が同じディ...

React リストバーとショッピングカートコンポーネントの使用の詳細な説明

この記事では、Reactリストバーとショッピングカートコンポーネントの具体的なコードを参考までに紹介...

略語マークと頭字語マーク

<abbr>タグと<acronym>タグは、Web ページに表示される略語と...

ReactでCSSをエレガントに書く方法

目次1. インラインスタイル2. インポート方法を使用する3.cssモジュールのエクスポート4. ス...

ES6 における Object.assign() の使い方の詳細な説明

目次2. 目的2.1 オブジェクトにプロパティを追加する2.3 オブジェクトの複製2.4 複数のオブ...