From 92e350ca0a1fda0dc9fe6e073dd7afe19a62d9ec Mon Sep 17 00:00:00 2001 From: Rob Crittenden Date: Tue, 4 May 2010 15:24:54 -0400 Subject: Create default HBAC rule allowing any user to access any host from any host This is to make initial installation and testing easier. Use the --no_hbac_allow option on the command-line to disable this when doing an install. To remove it from a running server do: ipa hbac-del allow_all --- install/share/Makefile.am | 1 + install/share/default-hbac.ldif | 14 ++++++++++++++ install/tools/ipa-server-install | 7 +++++-- install/tools/man/ipa-server-install.1 | 3 +++ ipaserver/install/dsinstance.py | 11 +++++++++-- 5 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 install/share/default-hbac.ldif diff --git a/install/share/Makefile.am b/install/share/Makefile.am index 92d50775f..5f3536835 100644 --- a/install/share/Makefile.am +++ b/install/share/Makefile.am @@ -13,6 +13,7 @@ app_DATA = \ bootstrap-template.ldif \ caJarSigningCert.cfg.template \ default-aci.ldif \ + default-hbac.ldif \ default-keytypes.ldif \ delegation.ldif \ dns.ldif \ diff --git a/install/share/default-hbac.ldif b/install/share/default-hbac.ldif new file mode 100644 index 000000000..541ff0df3 --- /dev/null +++ b/install/share/default-hbac.ldif @@ -0,0 +1,14 @@ +# default HBAC policy that grants permission to all services +dn: ipauniqueid=$UUID,cn=hbac,$SUFFIX +changetype: add +objectclass: ipaassociation +objectclass: ipahbacrule +cn: allow_all +accessruletype: allow +usercategory: all +hostcategory: all +sourcehostcategory: all +ipaenabledflag: TRUE +description: Allow all users to access any host from any host +# ipauniqueid gets added for us by 389-ds + diff --git a/install/tools/ipa-server-install b/install/tools/ipa-server-install index 4fd520a6e..c7fe6608e 100755 --- a/install/tools/ipa-server-install +++ b/install/tools/ipa-server-install @@ -122,6 +122,9 @@ def parse_options(): help="The starting gid value (default random)") parser.add_option("--subject", dest="subject", default="O=IPA", help="The certificate subject base (default O=IPA)") + parser.add_option("--no_hbac_allow", dest="hbac_allow", default=False, + action="store_true", + help="Don't install allow_all HBAC rule") options, args = parser.parse_args() if not options.setup_dns: @@ -722,11 +725,11 @@ def main(): if options.dirsrv_pkcs12: pkcs12_info = (options.dirsrv_pkcs12, pw_name) try: - ds.create_instance(ds_user, realm_name, host_name, domain_name, dm_password, pkcs12_info, subject_base=options.subject) + ds.create_instance(ds_user, realm_name, host_name, domain_name, dm_password, pkcs12_info, subject_base=options.subject, hbac_allow=not options.hbac_allow) finally: os.remove(pw_name) else: - ds.create_instance(ds_user, realm_name, host_name, domain_name, dm_password, self_signed_ca=options.selfsign, uidstart=options.uidstart, gidstart=options.gidstart, subject_base=options.subject) + ds.create_instance(ds_user, realm_name, host_name, domain_name, dm_password, self_signed_ca=options.selfsign, uidstart=options.uidstart, gidstart=options.gidstart, subject_base=options.subject, hbac_allow=not options.hbac_allow) # Create a kerberos instance krb = krbinstance.KrbInstance(fstore) diff --git a/install/tools/man/ipa-server-install.1 b/install/tools/man/ipa-server-install.1 index edd541633..a64a2eba1 100644 --- a/install/tools/man/ipa-server-install.1 +++ b/install/tools/man/ipa-server-install.1 @@ -101,6 +101,9 @@ The starting group id number (default random) \fB\-\-subject\fR=\fISUBJECT\fR The certificate subject base (default O=IPA) .TP +\fB\-\-no_hbac_allow\fR +Don't install allow_all HBAC rule. This rule lets any user from any host access any service on any other host. It is expected that users will remove this rule before moving to production. +.TP .SH "EXIT STATUS" 0 if the installation was successful diff --git a/ipaserver/install/dsinstance.py b/ipaserver/install/dsinstance.py index 3987f08ee..d6dbb80bc 100644 --- a/ipaserver/install/dsinstance.py +++ b/ipaserver/install/dsinstance.py @@ -38,7 +38,7 @@ from ldap.dn import escape_dn_chars from ipaserver import ipaldap from ipaserver.install import ldapupdate from ipaserver.install import httpinstance -from ipalib import util +from ipalib import util, uuid SERVER_ROOT_64 = "/usr/lib64/dirsrv" SERVER_ROOT_32 = "/usr/lib/dirsrv" @@ -157,7 +157,7 @@ class DsInstance(service.Service): else: self.suffix = None - def create_instance(self, ds_user, realm_name, host_name, domain_name, dm_password, pkcs12_info=None, self_signed_ca=False, uidstart=1100, gidstart=1100, subject_base=None): + def create_instance(self, ds_user, realm_name, host_name, domain_name, dm_password, pkcs12_info=None, self_signed_ca=False, uidstart=1100, gidstart=1100, subject_base=None, hbac_allow=True): self.ds_user = ds_user self.realm_name = realm_name.upper() self.serverid = realm_to_serverid(self.realm_name) @@ -194,6 +194,8 @@ class DsInstance(service.Service): self.__add_master_entry_first_master) self.step("initializing group membership", self.init_memberof) + if hbac_allow: + self.step("creating default HBAC rule allow_all", self.add_hbac) self.step("configuring directory to start on boot", self.__enable) @@ -411,6 +413,11 @@ class DsInstance(service.Service): def __enable_ldapi(self): self._ldap_mod("ldapi.ldif", self.sub_dict) + def add_hbac(self): + self.sub_dict['UUID'] = str(uuid.uuid1()) + self._ldap_mod("default-hbac.ldif", self.sub_dict) + del self.sub_dict['UUID'] + def change_admin_password(self, password): logging.debug("Changing admin password") dirname = config_dirname(self.serverid) -- cgit