web-dev-qa-db-ja.com

一元化されたSudoにFreeIPAを使用する-SudoersにSSSDを使用する

一元化されたSudo用にFreeIPAをセットアップしましたが、sudoerにSSSDを使用できることを除いて、すべてがうまく機能しています。

クライアントに/etc/nsswitch.confがある場合、次のようになります。

sudoers: files ldap

freeIPAサーバーが使用可能な場合、Sudoコマンドは必要に応じて機能します。ただし、FreeSDAサーバーが使用できない場合でもSudoが機能するように、SSSDを使用したいと思います。

クライアントに/etc/nsswitch.confがあると、次のようになります。

sudoers: files sss

そして、私の/etc/sssd/sssd.confは次のとおりです:

[domain/example.com]

cache_credentials = True
ipa_domain = example.com
id_provider = ipa
auth_provider = ipa
access_provider = ipa
ipa_hostname = Host3.example.com
chpass_provider = ipa
ipa_server = _srv_, ipa.example.com
ldap_tls_cacert = /etc/ipa/ca.crt
[sssd]
services = nss, pam, ssh, Sudo
config_file_version = 2
domains = example.com
ldap_Sudo_search_base = ou=SUDOers,dc=example,dc=com
.
.
.
[snip]

Sudoを実行してみてください。

user1はHost3でSudoを実行できません。この事件は報告されます。

これは、次のエラーとは異なります。

user1はsudoersファイルにありません。この事件は報告されます。

これにより、SSSDが実際にFreeIPAから何かを取得したが、それがどういうわけか間違っていると信じるようになりました。 FreeIPAサーバーでの唯一のsudoruleは次のとおりです。

[root@ipa ~]# ipa sudorule-find
-------------------
1 Sudo Rule matched
-------------------
  Rule name: All
  Enabled: TRUE
  Host category: all
  Command category: all
  RunAs User category: all
  User Groups: admins
----------------------------
Number of entries returned 1
----------------------------

そして、私がSudoを発行しているユーザーは、adminsグループに属しています(これも、nsswitch.confでldapが指定されている場合に機能します)。

何が欠けていますか?

更新1:

私のsssd.confが間違っていたと信じて、以下を含むように更新しました:

Sudo_provider = ldap
ldap_uri = ldap://ipa.example.com
ldap_Sudo_search_base = ou=SUDOers,dc=example,dc=com
ldap_sasl_mech = GSSAPI
ldap_sasl_authid = Host/host3.example.com
ldap_sasl_realm = EXAMPLE.COM
krb5_server = ipa.example.com
[sssd]
services = nss, pam, ssh, Sudo
config_file_version = 2
domains = example.com
.
.
.
[snip]

ただし、同じメッセージが表示されます。

user1はHost3でSudoを実行できません。この事件は報告されます。

更新2:

SSSDのデバッグをオンにしました。つまり、/ etc/sssd/sssd.confを編集して追加しました。

debug_level = 5

次に、/ var/log/sssd/sssd_example.com.logを調べました。ここで、私はSSSDがldap_Sudo_search_baseの値の大文字を好まないことに気づきました。

ldap_Sudo_search_base = ou=SUDOers,dc=example,dc=com

ログで、ldap_Sudo_search_baseのエントリがまったくないことに気付きました。小文字ou=sudoersに変更すると、ログに次のようなエントリが表示されます。

(Thu Dec 12 18:58:31 2013) [sssd[be[example.com]]] [common_parse_search_base] (0x0100): Search base added: [Sudo][ou=sudoers,dc=example,dc=com][SUBTREE][]

私はまだ同じuser1 is not allowed to run Sudo on Host3.を取得しているため、未解決のままです。

更新

(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [accept_fd_handler] (0x0400): Client connected!
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sss_cmd_get_version] (0x0200): Received client version [1].
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sss_cmd_get_version] (0x0200): Offered version [1].
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sss_parse_name_for_domains] (0x0200): name 'user1' matched without domain, user is user1
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sss_parse_name_for_domains] (0x0200): using default domain [(null)]
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sss_parse_name_for_domains] (0x0200): name 'user1' matched without domain, user is user1
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sss_parse_name_for_domains] (0x0200): using default domain [(null)]
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sudosrv_cmd_parse_query_done] (0x0200): Requesting default options for [user1] from [<ALL>]
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sudosrv_get_user] (0x0200): Requesting info about [[email protected]]
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sudosrv_get_user] (0x0400): Returning info for user [[email protected]]
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sudosrv_get_rules] (0x0400): Retrieving default options for [user1] from [example.com]
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sudosrv_get_sudorules_query_cache] (0x0200): Searching sysdb with [(&(objectClass=sudoRule)(|(sudoUser=ALL)(name=defaults)(sudoUser=user1)(sudoUser=#1219400005)(sudoUser=%Apache)(sudoUser=%superadmins)(sudoUser=%user1)(sudoUser=+*))(&(dataExpireTimestamp<=1387476127)))]
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sudosrv_get_rules] (0x2000): About to get Sudo rules from cache
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sudosrv_get_sudorules_query_cache] (0x0200): Searching sysdb with [(&(objectClass=sudoRule)(|(name=defaults)))]
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sudosrv_get_sudorules_from_cache] (0x0400): Returning 0 rules for [<default options>@example.com]
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sss_parse_name_for_domains] (0x0200): name 'user1' matched without domain, user is user1
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sss_parse_name_for_domains] (0x0200): using default domain [(null)]
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sss_parse_name_for_domains] (0x0200): name 'user1' matched without domain, user is user1
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sss_parse_name_for_domains] (0x0200): using default domain [(null)]
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sudosrv_cmd_parse_query_done] (0x0200): Requesting rules for [user1] from [<ALL>]
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sudosrv_get_user] (0x0200): Requesting info about [[email protected]]
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sudosrv_get_user] (0x0400): Returning info for user [[email protected]]
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sudosrv_get_rules] (0x0400): Retrieving rules for [user1] from [example.com]
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sudosrv_get_sudorules_query_cache] (0x0200): Searching sysdb with [(&(objectClass=sudoRule)(|(sudoUser=ALL)(name=defaults)(sudoUser=user1)(sudoUser=#1219400005)(sudoUser=%Apache)(sudoUser=%superadmins)(sudoUser=%user1)(sudoUser=+*))(&(dataExpireTimestamp<=1387476127)))]
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sudosrv_get_rules] (0x2000): About to get Sudo rules from cache
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sudosrv_get_sudorules_query_cache] (0x0200): Searching sysdb with [(&(objectClass=sudoRule)(|(sudoUser=ALL)(sudoUser=user1)(sudoUser=#1219400005)(sudoUser=%Apache)(sudoUser=%superadmins)(sudoUser=%user1)(sudoUser=+*)))]
(Thu Dec 19 18:02:07 2013) [sssd[Sudo]] [sudosrv_get_sudorules_from_cache] (0x0400): Returning 0 rules for [[email protected]]
(Thu Dec 19 18:02:11 2013) [sssd[Sudo]] [client_recv] (0x0200): Client disconnected!
(Thu Dec 19 18:02:11 2013) [sssd[Sudo]] [client_destructor] (0x2000): Terminated client [0x2095c60][18]
6
HTTP500

設定がここで説明されている簡単な設定に従っていることを確認してください: https://www.redhat.com/archives/freeipa-users/2013-June/msg00064.html

わかりました。RHEL6.xとFedora 18で動作することを確認してから簡単なセットアップを行ったので、詳細を指定して参考にしていただければ幸いです。

これがFedora 19での実際の使用例です(RHEL 6.5の修正が移植されたSudoパッケージをテストしてください)。

[root@id ~]# nisdomainname 
example.com
[root@id ~]# Sudo -U admin -l
Matching Defaults entries for admin on this Host:
    requiretty, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR
    LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME
    LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User admin may run the following commands on this Host:
    (root) /usr/bin/bash
[root@id ~]# LANG=en_US.utf8 ipa sudorule-show admins --all
  dn: ipaUniqueID=83814998-68c1-11e3-a7ad-001a4a418612,cn=sudorules,cn=Sudo,dc=example,dc=com
  Rule name: admins
  Enabled: TRUE
  User Groups: admins
  Hosts: id.example.com
  Sudo Allow Commands: /usr/bin/bash
  RunAs External User: root
  ipauniqueid: 83814998-68c1-11e3-a7ad-001a4a418612
  objectclass: ipaassociation, ipasudorule
[root@id ~]# su - admin
[admin@id ~]$ Sudo /usr/bin/bash
[Sudo] password for admin: 
[root@id admin]# exit
[admin@id ~]$

Nisdomainnameが定義されていますか?

3
abbra