$PATH
OpenLDAPユーザー(CentOS6 / 7)にこれを設定する必要があります。 LDAP.profile
や.bashrc
クライアントシステムではなくLDAPサーバーのLDAP属性なので、ユーザーがホストにログインするたびに設定されますssh
。クライアント側には何もなく、LDAPサーバーだけがあります。可能ですか?どうすればいいですか?
答え1
LDAPディレクトリのみお店LDAP クライアント層が必要なデータ (例pam_ldap
:)するそれと関係があります。 NetWare / ActiveDirectoryとは異なり、ログインスクリプトをディレクトリのユーザー属性として持つことは他の環境では標準ではなく、そのようなスクリプトの[パス]を格納する標準属性はありません(labelledURI
候補にもかかわらず)。
PAM + NSSを使用すると、LDAPを指すことができるいくつかの「データベース」のみがサポートされます(パスワード、グループなどは参照)。nsswitch.conf(5)
)それらのどれもこれを容易にしません。
どちらもありませんPADLpam_ldap
...でもないnss-pam-ldap
基本属性の作成に加えて、柔軟なタイプのLDAP属性処理が提供されます。getpwent()
password
構造フィールド。
ただし、「クライアントに何もない」要件を満たすことはできませんが、いくつかの回避策があるかもしれません。
pam_exec
またはを使用するpam_script
とログインの子プロセスとして実行されるため、環境の変更に直接影響を与えることはできませんが、一部のスクリプトを作成して、PATH
常にその項目または末尾に.profile
(健全性要件に応じて)正しい内容を表示させることができます。/etc/profile
LDAPからユーザー属性を取得して適切に設定するために使用されます(これを上書きするのを防ぐのは難しいPATH
かもしれません)。.profile
変数は、前に付けられた属性の
pam_unix
乱用を許可してサポートするように修正されました(例:PADL、AFAICTには適用されません)。loginShell
PATH=/opt/thing/bin /bin/bash
修正済み
pam_umask
、Linux PAMpam_umask
は追加情報の処理「umask = nnnn、ulimit = nnnn」などのgecosフィールドでは、ここにいくつかの前例があります。pam_ldap
LDAP属性をPAM「データ」として保存するように変更します。pam_set_data()
そして、それはpam_get_data()
他のPAMモジュールでそれを処理するために使用されます(以前はこれを行いました。私の場合は、LDAP属性の詳細を使用してSQLユーザーデータベースから要求時にユーザーを作成することでした)。pam_env
ここに良い候補があります。PAM「プロジェクト」にも同様の概念があります(
pam_set_item()
/pam_get_item()
)小さなデータ項目セットの場合(PAMデータの以前の概念は、任意の名前/値データに関するものです)pam_env
サポートする@{PAM_itemname}
環境値を設定するには、次の構文を使用します。可能のような項目を乱用する能力PAM_XDISPLAY
。pam_ldap
すでに設定されているプロジェクトがあるので、これはおそらく最も簡単なコード変更です。
(明確に言えば、「修正」は「ソース変更」を意味するため、これらのソリューションにはクライアントでの構成とバイナリの展開が必要です。)
以下は、最初の2つのオプションで動作する(強力な)bashの例です。
while read line; do
[[ "$line" =~ ^description:\ setenv\ ([a-zA-Z_][a-zA-Z0-9_]+)=(.*) ]] && {
export "${BASH_REMATCH[1]}"="${BASH_REMATCH[2]}"
}
done < <(ldapsearch -LLL -o ldif-wrap=no -H ldap://ldap0/ -b ${LDAPBASE} \
-s sub "(&(objectClass=posixAccount)(uid=${USER}))" description
次の形式では、各ユーザーに1つ以上の「説明」属性が提供されます。
setenv MYVAR=MYVALUE
ここでは、説明属性を説明ではなくデータで埋めるためのあいまいな方法を使用します。これは、複数値属性に最大1024文字を格納する便利な方法です。ldapsearch
これは、値/タイプがBase64でエンコードされた出力になる場合に使用するのに問題がある可能性がある簡単なアプローチです。
答え2
私が望む方法ではありませんでしたが、問題は解決しました。 puppet を使用したエクスポート PATH=$PATH:/xxxxxxxx ディレクティブを含む .profile ファイルを入力します。 ldap エントリ "shell=\bin\bash" を削除すると、PATH 変数が正しく設定されます。
この質問についてもっと深く探求することができて嬉しいです。 Mr. Spartikの幅広い回答ありがとうございます。