
私はSSSDを使用してCentOS 7サーバーのID、アクセス、認証プロバイダーとしてActive Directoryを使用しています。私はこれに従っています役職異なるグループのユーザーがログイン時に異なるシェルを使用するようにしたいのですが、いくつか問題があります。これが私のsssd.conf
ファイルです:
[sssd]
domains = dev, domain.local
config_file_version = 2
services = nss, pam
[nss]
default_shell = /bin/bash
[domain/dev]
ad_domain = domain.local
krb5_realm = DOMAIN.LOCAL
ad_server = adserver.domain.local
id_provider = ad
access_provider = ad
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%u
override_shell = /bin/tcsh
ldap_user_search_base = cn=dev,ou=Security Groups,ou=Domain,dc=domain,dc=local #According to sssd-ldap man page ldap_user_search_filter is deprecated
[domain/domain.local]
ad_server = adserver.domain.local
ad_domain = domain.local
krb5_realm = DOMAIN.LOCAL
realmd_tags = manages-system joined-with-adcli
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%u
access_provider = ad
アイデアは、開発グループの誰かがログインするとシェルは tcsh になり、他の人がログインすると bash が使用されるというものです。問題は、この設定では、開発グループのメンバーである Smith で正常にログインでき、tcsh に正常にアクセスできるものの、ドメインのメンバーであるものの dev のメンバーではない John でログインすると、次のことが起こることです。
- 確認すると、
/var/log/secure
最初に pam_unix から認証失敗が返され、次に pam_sss から認証成功が返されます。 - まず、ユーザーは としてログインし
john
、シェルを tcsh として取得します (bash であるべきなのに)。次に、ユーザーは としてログインし[email protected]
、bash を取得します。3 番目に、ユーザーは として再度ログインしjohn
、今度は正しいシェル (bash) を取得します。
どうやら sssd は、FQDN で 2 番目のドメインをチェックした後、ユーザー シェルをキャッシュし、3 回目のログインで正しく実行します。
各ユーザーを対応するシェルにログインさせるための正しい構成はどれですか?
アップデート:
ログイン プロセスは、PAM モジュールのみを介して実行される場合もあれば、アクティブ ディレクトリから取得した sssd GPO ベースのポリシーを介して実行される場合もあります。フィルターを無効にして sssd を何度か再起動してみましたが、そのうちの 1 つでログに次の内容が表示されました。
Aug 28 15:42:43 co-proy-02 sssd[be[dev.domain.local]]: Warning: user would have been denied GPO-based logon access if the ad_gpo_access_control option were set to enforcing mode.
Smith
フィルターが無効になっている場合、グループのユーザーはdev
tcsh を正常に取得しますが、 も取得しますjohn
。フィルターが有効になっている場合、両方とも bash を取得します。
アップデート2
どうやら、別のユーザーのシェルをオーバーライドできるコマンドを備えた という名前のパッケージがあるようですsssd-tools
が、この解決策を試しても適切な結果が得られません。これがコマンドですが、少なくとも私の場合は期待通りに動作しません。
sss_override user-add smith -s /usr/bin/sh
答え1
ou=Domain,dc=domain,dc=local?subtree?(memberOf=cn=dev,ou=Security Groups,ou=Domain,dc=domain,dc=local)
長い検索と、フィルターをベースにした@ChristopheDrevet-Droguet の助けを借りて、唯一欠けていたのは解析するオブジェクトのツリー、つまりユーザーを見つけることができるツリーでした。
これが機能するには、sssd は次のようになります (少なくとも私にとっては)。
[sssd]
domains = dev, domain.local
config_file_version = 2
services = nss, pam
[nss]
default_shell = /bin/bash
[domain/dev]
ad_domain = domain.local
krb5_realm = DOMAIN.LOCAL
ad_server = adserver.domain.local
id_provider = ad
access_provider = ad
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%u
override_shell = /bin/tcsh
ldap_user_search_base = dc=domain,dc=local??(&(memberOf=cn=dev,ou=Security Groups,ou=Domain,dc=veritran,dc=local)(objectClass=*))
[domain/domain.local]
ad_server = adserver.domain.local
ad_domain = domain.local
krb5_realm = DOMAIN.LOCAL
realmd_tags = manages-system joined-with-adcli
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%u
access_provider = ad
ldap_user_search_base = dc=domain,dc=local??(&(memberOf=cn=other,ou=Security Groups,ou=Domain,dc=veritran,dc=local)(objectClass=*))