diff options
author | Jan Cholasta <jcholast@redhat.com> | 2015-12-01 10:42:38 +0100 |
---|---|---|
committer | Jan Cholasta <jcholast@redhat.com> | 2015-12-07 08:13:23 +0100 |
commit | a8d7ce5cf1ccd6c8a81fa5b4569afa3aa3c2882d (patch) | |
tree | 86844beabf8c524d2f9f6d46ccf4ee1449ad48ba | |
parent | ee853a3d35701d1d799f902f823b8a8cedb90013 (diff) | |
download | freeipa-a8d7ce5cf1ccd6c8a81fa5b4569afa3aa3c2882d.tar.gz freeipa-a8d7ce5cf1ccd6c8a81fa5b4569afa3aa3c2882d.tar.xz freeipa-a8d7ce5cf1ccd6c8a81fa5b4569afa3aa3c2882d.zip |
aci: add IPA servers host group 'ipaservers'
https://fedorahosted.org/freeipa/ticket/3416
Reviewed-By: Martin Basti <mbasti@redhat.com>
Reviewed-By: Simo Sorce <ssorce@redhat.com>
-rw-r--r-- | ACI.txt | 4 | ||||
-rw-r--r-- | install/share/bootstrap-template.ldif | 11 | ||||
-rw-r--r-- | install/updates/20-ipaservers_hostgroup.update | 13 | ||||
-rw-r--r-- | install/updates/Makefile.am | 1 | ||||
-rw-r--r-- | ipalib/plugins/host.py | 6 | ||||
-rw-r--r-- | ipalib/plugins/hostgroup.py | 26 | ||||
-rw-r--r-- | ipaserver/install/krbinstance.py | 7 |
7 files changed, 66 insertions, 2 deletions
@@ -119,7 +119,7 @@ aci: (targetattr = "usercertificate")(targetfilter = "(objectclass=ipahost)")(ve dn: cn=computers,cn=accounts,dc=ipa,dc=example aci: (targetattr = "userpassword")(targetfilter = "(objectclass=ipahost)")(version 3.0;acl "permission:System: Manage Host Enrollment Password";allow (write) groupdn = "ldap:///cn=System: Manage Host Enrollment Password,cn=permissions,cn=pbac,dc=ipa,dc=example";) dn: cn=computers,cn=accounts,dc=ipa,dc=example -aci: (targetattr = "krblastpwdchange || krbprincipalkey")(targetfilter = "(objectclass=ipahost)")(version 3.0;acl "permission:System: Manage Host Keytab";allow (write) groupdn = "ldap:///cn=System: Manage Host Keytab,cn=permissions,cn=pbac,dc=ipa,dc=example";) +aci: (targetattr = "krblastpwdchange || krbprincipalkey")(targetfilter = "(&(!(memberOf=cn=ipaservers,cn=hostgroups,cn=accounts,dc=ipa,dc=example))(objectclass=ipahost))")(version 3.0;acl "permission:System: Manage Host Keytab";allow (write) groupdn = "ldap:///cn=System: Manage Host Keytab,cn=permissions,cn=pbac,dc=ipa,dc=example";) dn: cn=computers,cn=accounts,dc=ipa,dc=example aci: (targetattr = "createtimestamp || entryusn || ipaallowedtoperform;read_keys || ipaallowedtoperform;write_keys || modifytimestamp || objectclass")(targetfilter = "(objectclass=ipahost)")(version 3.0;acl "permission:System: Manage Host Keytab Permissions";allow (compare,read,search,write) groupdn = "ldap:///cn=System: Manage Host Keytab Permissions,cn=permissions,cn=pbac,dc=ipa,dc=example";) dn: cn=computers,cn=accounts,dc=ipa,dc=example @@ -137,7 +137,7 @@ aci: (targetfilter = "(objectclass=ipahost)")(version 3.0;acl "permission:System dn: cn=hostgroups,cn=accounts,dc=ipa,dc=example aci: (targetfilter = "(objectclass=ipahostgroup)")(version 3.0;acl "permission:System: Add Hostgroups";allow (add) groupdn = "ldap:///cn=System: Add Hostgroups,cn=permissions,cn=pbac,dc=ipa,dc=example";) dn: cn=hostgroups,cn=accounts,dc=ipa,dc=example -aci: (targetattr = "member")(targetfilter = "(objectclass=ipahostgroup)")(version 3.0;acl "permission:System: Modify Hostgroup Membership";allow (write) groupdn = "ldap:///cn=System: Modify Hostgroup Membership,cn=permissions,cn=pbac,dc=ipa,dc=example";) +aci: (targetattr = "member")(targetfilter = "(&(!(cn=ipaservers))(objectclass=ipahostgroup))")(version 3.0;acl "permission:System: Modify Hostgroup Membership";allow (write) groupdn = "ldap:///cn=System: Modify Hostgroup Membership,cn=permissions,cn=pbac,dc=ipa,dc=example";) dn: cn=hostgroups,cn=accounts,dc=ipa,dc=example aci: (targetattr = "cn || description")(targetfilter = "(objectclass=ipahostgroup)")(version 3.0;acl "permission:System: Modify Hostgroups";allow (write) groupdn = "ldap:///cn=System: Modify Hostgroups,cn=permissions,cn=pbac,dc=ipa,dc=example";) dn: cn=hostgroups,cn=accounts,dc=ipa,dc=example diff --git a/install/share/bootstrap-template.ldif b/install/share/bootstrap-template.ldif index 357062780..628a8e2e0 100644 --- a/install/share/bootstrap-template.ldif +++ b/install/share/bootstrap-template.ldif @@ -261,6 +261,17 @@ description: Limited admins who can edit other users cn: editors ipaUniqueID: autogenerate +dn: cn=ipaservers,cn=hostgroups,cn=accounts,$SUFFIX +changetype: add +objectClass: top +objectClass: groupOfNames +objectClass: nestedGroup +objectClass: ipaobject +objectClass: ipahostgroup +description: IPA server hosts +cn: ipaservers +ipaUniqueID: autogenerate + dn: cn=sshd,cn=hbacservices,cn=hbac,$SUFFIX changetype: add objectclass: ipahbacservice diff --git a/install/updates/20-ipaservers_hostgroup.update b/install/updates/20-ipaservers_hostgroup.update new file mode 100644 index 000000000..47c9100ca --- /dev/null +++ b/install/updates/20-ipaservers_hostgroup.update @@ -0,0 +1,13 @@ +dn: cn=ipaservers,cn=hostgroups,cn=accounts,$SUFFIX +default: objectClass: top +default: objectClass: groupOfNames +default: objectClass: nestedGroup +default: objectClass: ipaobject +default: objectClass: ipahostgroup +default: description: IPA server hosts +default: cn: ipaservers +default: ipaUniqueID: autogenerate + +# Add local host to ipaservers +dn: cn=ipaservers,cn=hostgroups,cn=accounts,$SUFFIX +add: member: fqdn=$FQDN,cn=computers,cn=accounts,$SUFFIX diff --git a/install/updates/Makefile.am b/install/updates/Makefile.am index 6c8fa11e5..b04ab48a0 100644 --- a/install/updates/Makefile.am +++ b/install/updates/Makefile.am @@ -14,6 +14,7 @@ app_DATA = \ 20-dna.update \ 20-host_nis_groups.update \ 20-indices.update \ + 20-ipaservers_hostgroup.update \ 20-nss_ldap.update \ 20-replication.update \ 20-sslciphers.update \ diff --git a/ipalib/plugins/host.py b/ipalib/plugins/host.py index fa867f370..842dff042 100644 --- a/ipalib/plugins/host.py +++ b/ipalib/plugins/host.py @@ -395,6 +395,12 @@ class host(LDAPObject): }, 'System: Manage Host Keytab': { 'ipapermright': {'write'}, + 'ipapermtargetfilter': [ + '(objectclass=ipahost)', + '(!(memberOf=%s))' % DN('cn=ipaservers', + api.env.container_hostgroup, + api.env.basedn), + ], 'ipapermdefaultattr': {'krblastpwdchange', 'krbprincipalkey'}, 'replaces': [ '(targetattr = "krbprincipalkey || krblastpwdchange")(target = "ldap:///fqdn=*,cn=computers,cn=accounts,$SUFFIX")(version 3.0;acl "permission:Manage host keytab";allow (write) groupdn = "ldap:///cn=Manage host keytab,cn=permissions,cn=pbac,$SUFFIX";)', diff --git a/ipalib/plugins/hostgroup.py b/ipalib/plugins/hostgroup.py index 596290fcd..f3e0d7250 100644 --- a/ipalib/plugins/hostgroup.py +++ b/ipalib/plugins/hostgroup.py @@ -72,6 +72,8 @@ def get_complete_hostgroup_member_list(hostgroup): register = Registry() +PROTECTED_HOSTGROUPS = (u'ipaservers',) + @register() class hostgroup(LDAPObject): @@ -121,6 +123,10 @@ class hostgroup(LDAPObject): }, 'System: Modify Hostgroup Membership': { 'ipapermright': {'write'}, + 'ipapermtargetfilter': [ + '(objectclass=ipahostgroup)', + '(!(cn=ipaservers))', + ], 'ipapermdefaultattr': {'member'}, 'replaces': [ '(targetattr = "member")(target = "ldap:///cn=*,cn=hostgroups,cn=accounts,$SUFFIX")(version 3.0;acl "permission:Modify Hostgroup membership";allow (write) groupdn = "ldap:///cn=Modify Hostgroup membership,cn=permissions,cn=pbac,$SUFFIX";)', @@ -229,6 +235,14 @@ class hostgroup_del(LDAPDelete): msg_summary = _('Deleted hostgroup "%(value)s"') + def pre_callback(self, ldap, dn, *keys, **options): + if keys[0] in PROTECTED_HOSTGROUPS: + raise errors.ProtectedEntryError(label=_(u'hostgroup'), + key=keys[0], + reason=_(u'privileged hostgroup')) + + return dn + @register() class hostgroup_mod(LDAPUpdate): @@ -283,6 +297,18 @@ class hostgroup_add_member(LDAPAddMember): class hostgroup_remove_member(LDAPRemoveMember): __doc__ = _('Remove members from a hostgroup.') + def pre_callback(self, ldap, dn, found, not_found, *keys, **options): + if keys[0] in PROTECTED_HOSTGROUPS and 'host' in options: + result = api.Command.hostgroup_show(keys[0]) + hosts_left = set(result['result'].get('member_host', [])) + hosts_deleted = set(options['host']) + if hosts_left.issubset(hosts_deleted): + raise errors.LastMemberError(key=sorted(hosts_deleted)[0], + label=_(u'hostgroup'), + container=keys[0]) + + return dn + def post_callback(self, ldap, completed, failed, dn, entry_attrs, *keys, **options): assert isinstance(dn, DN) self.obj.suppress_netgroup_memberof(ldap, dn, entry_attrs) diff --git a/ipaserver/install/krbinstance.py b/ipaserver/install/krbinstance.py index 1dd807c71..f928e501f 100644 --- a/ipaserver/install/krbinstance.py +++ b/ipaserver/install/krbinstance.py @@ -117,6 +117,13 @@ class KrbInstance(service.Service): host_entry['krbticketflags'] = service_entry['krbticketflags'] self.admin_conn.add_entry(host_entry) + # Add the host to the ipaserver host group + hostgroup_dn = DN(('cn', 'ipaservers'), ('cn', 'hostgroups'), + ('cn', 'accounts'), self.suffix) + hostgroup_entry = self.admin_conn.get_entry(hostgroup_dn, ['member']) + hostgroup_entry.setdefault('member', []).append(host_dn) + self.admin_conn.update_entry(hostgroup_entry) + def __common_setup(self, realm_name, host_name, domain_name, admin_password): self.fqdn = host_name self.realm = realm_name.upper() |