web-dev-qa-db-ja.com

SambaのLDAP認証を使用してシステムにローカルユーザーを追加できません

Samba認証にldapを使用しているが、ldap内のユーザーの既存のエントリに邪魔されているCentOS 6.3システムにローカルユーザーを追加しようとしています。

[root@samba ~]# adduser wchandy
adduser: user 'wchandy' already exists

[root@samba ~]# useradd wchandy
useradd: user 'wchandy' already exists

ユーザーはまだローカルユーザーではありません:

[root@edgar2 ~]# grep wchandy /etc/passwd

しかし、彼らはLDAPのSambaユーザーです。

[root@edgar2 ~]# smbldap-usershow wchandy | grep uid
dn: uid=wchandy,ou=people,dc=ucsc,dc=edu
uid: wchandy
uidNumber: 30490

adduserにはローカルオプションはありません。 LDAP認証の存在下でadduserを適切に機能させてローカルユーザーを追加するにはどうすればよいですか。

その他の考慮事項:

  • 現在、sambaとsshに個別にアクセスできるldapエントリ(異なるuidNumberを持つ)とuidを共有するローカルユーザーがいます。
  • いいえ、ユーザーを/ etc/passwdと/ etc/groupに直接編集したくありません。根本的な問題を修正したいのですが。さらに、ローカルエントリはsambaへのアクセスを妨害します。
  • いいえ、ローカルのSSHログインにLDAPを使用したくありません。
  • いいえ、ユーザーに別のuidを使用したくありません。

私は最初に、便利な(しかし元に戻せない)authconfigコマンドを使用してsamba-ldap認証をセットアップしました。

[root@samba ~]# authconfig --enableshadow --enablemd5 --enableldap \
--enableldapauth --enableldaptls --enablemkhomedir \
--ldapserver=dir.mydomain.com --ldapbasedn="dc=mydomain,dc=com" \
--enablelocauthorize --updateall

/ etc/sysconfig/authconfigは次のようになります。

IPADOMAINJOINED=no
USEMKHOMEDIR=yes
USEPAMACCESS=no
CACHECREDENTIALS=yes
USESSSDAUTH=no
USESHADOW=yes
USEWINBIND=no
PASSWDALGORITHM=sha512
FORCELEGACY=no
USEFPRINTD=yes
USEHESIOD=no
FORCESMARTCARD=no
USEDB=no
USELDAPAUTH=yes
IPAV2NONTP=no
USELDAP=yes
USECRACKLIB=yes
USEIPAV2=no
USEWINBINDAUTH=no
USESMARTCARD=no
USELOCAUTHORIZE=yes
USENIS=no
USEKERBEROS=no
USESYSNETAUTH=no
USESSSD=no
USEPASSWDQC=no

私のsamba構成はRHEL4.xシステムからCentOS 6.3に移行されました。 CentOS 6.xは、nssとpamのマジアップであり、誰が何を知っているかではなく、かなり滑らかで簡単なsssdを使用しています。

/etc/sssd/sssd.confは次のようになります。

[domain/default]

cache_credentials = True
#cache_credentials = False
ldap_search_base = dc=mydomain,dc=com
krb5_realm = EXAMPLE.COM
krb5_server = kerberos.example.com
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://dir.mydomain.com/
ldap_tls_cacertdir = /etc/openldap/cacerts
#ldap_tls_reqcert = allow

entry_cache_timeout = 5

debug_level = 31

[sssd]
config_file_version = 2
services = nss, pam
# SSSD will not start if you do not configure any domains.
# Add new domain configurations as [domain/<NAME>] sections, and
# then add the list of domains (in the order you want them to be
# queried) to the "domains" attribute below and uncomment it.
# domains = LDAP
domains = default

#debug_level = 31

[nss]

[pam]

debug_level = 31

助けてくれてありがとう。ローカル認証とsamba-ldap認証を個別に機能させることができれば、うれしいです。

更新:以下にある程度十分な回避策がありますが、sssd_usersリストの専門家から得たアドバイスの抜粋を以下に示します。共有UIDを許可します。sssdを使用する新しいシステムはこれを防ぎます。」私の使用例は完全に有効でしたが、私のシステムは意図的にやりたいことを妨げていました。

ただし、authconfigによってシステムに加えられた多くの変更の設定を解除または元に戻す方法は見つかりませんでした。したがって、authconfigに指定したパラメーターが間違っていた場合、元に戻すことはできませんでした。

2
Wes Modes

これら2つの回避策はどちらも最適ではありませんが、LDAPとローカルのpasswdファイルが相互にブロックしているという厄介な状況に陥った場合に、システム管理者が前進する方法を提供します。

回避策1:別のUID(ユーザー名)を使用してローカルユーザーを作成し、LDAP/Sambaエントリをすでに持っているユーザーにsshアクセスを許可しました。おそらく、私が何年もの間行ってきた最もお洒落なシステム管理ソリューションです。

回避策2:少し複雑ですが、LDAPと同じuidNumberを持つローカルユーザーを追加することになります。

  1. Getent、ldapsearch、またはsmbldap-usershowを使用してLDAP uidNumberを検索する
  2. 競合なしでローカルユーザーを追加するために、LDAPでユーザーを一時的に無効にします
  3. LDAPでuidNumberと一致するローカルアカウントを作成します
  4. LDAPでユーザーを再度有効にする

これらはどちらも機能しますが、認証でLDAPをSamba認証にのみ使用し、/ etc/passwdをローカル認証に使用できるようにするという根本的な問題には対処していません。しかし、別の解決策がない場合、これは実行する必要があります。

1
Wes Modes

私の最後の答えは悪かった、それを無視してください。

私はあなたの唯一の選択肢は/etc/passwdの手動編集であると信じています(vipwは自分のミスからあなたを救うので好ましいです)。 -oオプションを使用すると、1つのUIDに複数の名前を作成できますが、NSSルックアップを実行するときに既存の名前を無視するようにpasswdに指示する同等のオプションはありません。

getent passwdは、ユーザーを追加すると、uidがどのようにカスケードされるかを示します。最初のエントリが勝ちます。権限の移動に関する問題を回避するために、uidが同じであることを確認してください。 (あなたの例は-u構文を含みませんでした)

1
Andrew B