⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 provision.py

📁 samba最新软件
💻 PY
📖 第 1 页 / 共 4 页
字号:
            hostguid = samdb.searchone(basedn=domaindn, attribute="objectGUID",                                       expression="(&(objectClass=computer)(cn=%s))" % names.hostname,                                       scope=SCOPE_SUBTREE)            assert isinstance(hostguid, str)            create_zone_file(paths.dns, setup_path, dnsdomain=names.dnsdomain,                             domaindn=names.domaindn, hostip=hostip,                             hostip6=hostip6, hostname=names.hostname,                             dnspass=dnspass, realm=names.realm,                             domainguid=domainguid, hostguid=hostguid)            message("Please install the zone located in %s into your DNS server" % paths.dns)            create_named_conf(paths.namedconf, setup_path, realm=names.realm,                              dnsdomain=names.dnsdomain, private_dir=paths.private_dir,                              keytab_name=paths.dns_keytab)            message("See %s for example configuration statements for secure GSS-TSIG updates" % paths.namedconf)            create_krb5_conf(paths.krb5conf, setup_path, dnsdomain=names.dnsdomain,                             hostname=names.hostname, realm=names.realm)            message("A Kerberos configuration suitable for Samba 4 has been generated at %s" % paths.krb5conf)    create_phpldapadmin_config(paths.phpldapadminconfig, setup_path,                                ldapi_url)    message("Please install the phpLDAPadmin configuration located at %s into /etc/phpldapadmin/config.php" % paths.phpldapadminconfig)    message("Once the above files are installed, your Samba4 server will be ready to use")    message("Server Role:    %s" % serverrole)    message("Hostname:       %s" % names.hostname)    message("NetBIOS Domain: %s" % names.domain)    message("DNS Domain:     %s" % names.dnsdomain)    message("DOMAIN SID:     %s" % str(domainsid))    message("Admin password: %s" % adminpass)    result = ProvisionResult()    result.domaindn = domaindn    result.paths = paths    result.lp = lp    result.samdb = samdb    return resultdef provision_become_dc(setup_dir=None,                        smbconf=None, targetdir=None, realm=None,                         rootdn=None, domaindn=None, schemadn=None, configdn=None,                        serverdn=None,                        domain=None, hostname=None, domainsid=None,                         adminpass=None, krbtgtpass=None, domainguid=None,                         policyguid=None, invocationid=None, machinepass=None,                         dnspass=None, root=None, nobody=None, nogroup=None, users=None,                         wheel=None, backup=None, aci=None, serverrole=None,                         ldap_backend=None, ldap_backend_type=None, sitename=None):    def message(text):        """print a message if quiet is not set."""        print text    return provision(setup_dir, message, system_session(), None,              smbconf=smbconf, targetdir=targetdir, samdb_fill=FILL_DRS, realm=realm,               rootdn=rootdn, domaindn=domaindn, schemadn=schemadn, configdn=configdn, serverdn=serverdn,              domain=domain, hostname=hostname, hostip="127.0.0.1", domainsid=domainsid, machinepass=machinepass, serverrole="domain controller", sitename=sitename)    def setup_db_config(setup_path, dbdir):    """Setup a Berkeley database.        :param setup_path: Setup path function.    :param dbdir: Database directory."""    if not os.path.isdir(os.path.join(dbdir, "bdb-logs")):        os.makedirs(os.path.join(dbdir, "bdb-logs"), 0700)    if not os.path.isdir(os.path.join(dbdir, "tmp")):        os.makedirs(os.path.join(dbdir, "tmp"), 0700)        setup_file(setup_path("DB_CONFIG"), os.path.join(dbdir, "DB_CONFIG"),               {"LDAPDBDIR": dbdir})    def provision_backend(setup_dir=None, message=None,                      smbconf=None, targetdir=None, realm=None,                       rootdn=None, domaindn=None, schemadn=None, configdn=None,                      domain=None, hostname=None, adminpass=None, root=None, serverrole=None,                       ldap_backend_type=None, ldap_backend_port=None):    def setup_path(file):        return os.path.join(setup_dir, file)    if hostname is None:        hostname = socket.gethostname().split(".")[0].lower()    if root is None:        root = findnss(pwd.getpwnam, ["root"])[0]    if smbconf is None:        etcdir = os.path.join(targetdir, "etc")        os.makedirs(etcdir)        smbconf = os.path.join(etcdir, "smb.conf")    # only install a new smb.conf if there isn't one there already    if not os.path.exists(smbconf):        make_smbconf(smbconf, setup_path, hostname, domain, realm,                               serverrole, targetdir)    lp = param.LoadParm()    lp.load(smbconf)    names = guess_names(lp=lp, hostname=hostname, domain=domain,                         dnsdomain=realm, serverrole=serverrole,                         rootdn=rootdn, domaindn=domaindn, configdn=configdn,                         schemadn=schemadn)    paths = provision_paths_from_lp(lp, names.dnsdomain)    if not os.path.isdir(paths.ldapdir):        os.makedirs(paths.ldapdir)    schemadb_path = os.path.join(paths.ldapdir, "schema-tmp.ldb")    try:        os.unlink(schemadb_path)    except:        pass    schemadb = Ldb(schemadb_path, lp=lp)     setup_add_ldif(schemadb, setup_path("provision_schema_basedn.ldif"),                    {"SCHEMADN": names.schemadn,                    "ACI": "#",                    "EXTENSIBLEOBJECT": "# no objectClass: extensibleObject for local ldb"                    })    setup_modify_ldif(schemadb,                       setup_path("provision_schema_basedn_modify.ldif"), \                          {"SCHEMADN": names.schemadn,                           "NETBIOSNAME": names.netbiosname,                           "DEFAULTSITE": DEFAULTSITE,                           "CONFIGDN": names.configdn,                           "SERVERDN": names.serverdn                           })        setup_add_ldif(schemadb, setup_path("schema_samba4.ldif"),                    {"SCHEMADN": names.schemadn })    setup_add_ldif(schemadb, setup_path("schema.ldif"),                    {"SCHEMADN": names.schemadn})    if ldap_backend_type == "fedora-ds":        if ldap_backend_port is not None:            serverport = "ServerPort=%d" % ldap_backend_port        else:            serverport = ""        setup_file(setup_path("fedorads.inf"), paths.fedoradsinf,                    {"ROOT": root,                    "HOSTNAME": hostname,                    "DNSDOMAIN": names.dnsdomain,                    "LDAPDIR": paths.ldapdir,                    "DOMAINDN": names.domaindn,                    "LDAPMANAGERDN": names.ldapmanagerdn,                    "LDAPMANAGERPASS": adminpass,                     "SERVERPORT": serverport})                setup_file(setup_path("fedorads-partitions.ldif"), paths.fedoradspartitions,                    {"CONFIGDN": names.configdn,                    "SCHEMADN": names.schemadn,                    })                mapping = "schema-map-fedora-ds-1.0"        backend_schema = "99_ad.ldif"                slapdcommand="Initailise Fedora DS with: setup-ds.pl --file=%s" % paths.fedoradsinf           elif ldap_backend_type == "openldap":        attrs = ["linkID", "lDAPDisplayName"]    res = schemadb.search(expression="(&(&(linkID=*)(!(linkID:1.2.840.113556.1.4.803:=1)))(objectclass=attributeSchema))", base=names.schemadn, scope=SCOPE_SUBTREE, attrs=attrs)    memberof_config = "# Generated from schema in %s\n" % schemadb_path    refint_attributes = ""    for i in range (0, len(res)):            expression = "(&(objectclass=attributeSchema)(linkID=%d))" % (int(res[i]["linkID"][0])+1)            target = schemadb.searchone(basedn=names.schemadn,                                         expression=expression,                                         attribute="lDAPDisplayName",                                         scope=SCOPE_SUBTREE)            if target is not None:                refint_attributes = refint_attributes + " " + target + " " + res[i]["lDAPDisplayName"][0]                memberof_config += """overlay memberofmemberof-dangling errormemberof-refint TRUEmemberof-group-oc topmemberof-member-ad """ + res[i]["lDAPDisplayName"][0] + """memberof-memberof-ad """ + target + """memberof-dangling-error 32"""    memberof_config += """overlay refintrefint_attributes""" + refint_attributes + "\n"        setup_file(setup_path("slapd.conf"), paths.slapdconf,                   {"DNSDOMAIN": names.dnsdomain,                    "LDAPDIR": paths.ldapdir,                    "DOMAINDN": names.domaindn,                    "CONFIGDN": names.configdn,                    "SCHEMADN": names.schemadn,                    "LDAPMANAGERDN": names.ldapmanagerdn,                    "LDAPMANAGERPASS": adminpass,                    "MEMBEROF_CONFIG": memberof_config})    setup_file(setup_path("modules.conf"), paths.modulesconf,                   {"REALM": names.realm})            setup_db_config(setup_path, os.path.join(paths.ldapdir, os.path.join("db", "user")))    setup_db_config(setup_path, os.path.join(paths.ldapdir, os.path.join("db", "config")))    setup_db_config(setup_path, os.path.join(paths.ldapdir, os.path.join("db", "schema")))    mapping = "schema-map-openldap-2.3"    backend_schema = "backend-schema.schema"    ldapi_uri = "ldapi://" + urllib.quote(os.path.join(paths.private_dir, "ldap", "ldapi"), safe="")    if ldap_backend_port is not None:        server_port_string = " -h ldap://0.0.0.0:%d" % ldap_backend_port    else:        server_port_string = ""    slapdcommand="Start slapd with:    slapd -f " + paths.ldapdir + "/slapd.conf -h " + ldapi_uri + server_port_string    schema_command = "bin/ad2oLschema --option=convert:target=" + ldap_backend_type + " -I " + setup_path(mapping) + " -H tdb://" + schemadb_path + " -O " + os.path.join(paths.ldapdir, backend_schema)    os.system(schema_command)    message("Your %s Backend for Samba4 is now configured, and is ready to be started" % ldap_backend_type)    message("Server Role:         %s" % serverrole)    message("Hostname:            %s" % names.hostname)    message("DNS Domain:          %s" % names.dnsdomain)    message("Base DN:             %s" % names.domaindn)    message("LDAP admin DN:       %s" % names.ldapmanagerdn)    message("LDAP admin password: %s" % adminpass)    message(slapdcommand)def create_phpldapadmin_config(path, setup_path, ldapi_uri):    """Create a PHP LDAP admin configuration file.    :param path: Path to write the configuration to.    :param setup_path: Function to generate setup paths.    """    setup_file(setup_path("phpldapadmin-config.php"), path,             {"S4_LDAPI_URI": ldapi_uri})def create_zone_file(path, setup_path, dnsdomain, domaindn,                      hostip, hostip6, hostname, dnspass, realm, domainguid, hostguid):    """Write out a DNS zone file, from the info in the current database.    :param path: Path of the new zone file.    :param setup_path: Setup path function.    :param dnsdomain: DNS Domain name    :param domaindn: DN of the Domain    :param hostip: Local IPv4 IP    :param hostip6: Local IPv6 IP    :param hostname: Local hostname    :param dnspass: Password for DNS    :param realm: Realm name    :param domainguid: GUID of the domain.    :param hostguid: GUID of the host.    """    assert isinstance(domainguid, str)    if hostip6 is not None:        hostip6_base_line = "            IN AAAA    " + hostip6        hostip6_host_line = hostname + "        IN AAAA    " + hostip6    else:        hostip6_base_line = ""        hostip6_host_line = ""    setup_file(setup_path("provision.zone"), path, {            "DNSPASS_B64": b64encode(dnspass),            "HOSTNAME": hostname,            "DNSDOMAIN": dnsdomain,            "REALM": realm,            "HOSTIP": hostip,            "DOMAINGUID": domainguid,            "DATESTRING": time.strftime("%Y%m%d%H"),            "DEFAULTSITE": DEFAULTSITE,            "HOSTGUID": hostguid,            "HOSTIP6_BASE_LINE": hostip6_base_line,            "HOSTIP6_HOST_LINE": hostip6_host_line,        })def create_named_conf(path, setup_path, realm, dnsdomain,                      private_dir, keytab_name):    """Write out a file containing zone statements suitable for inclusion in a    named.conf file (including GSS-TSIG configuration).        :param path: Path of the new named.conf file.    :param setup_path: Setup path function.    :param realm: Realm name    :param dnsdomain: DNS Domain name    :param private_dir: Path to private directory    :param keytab_name: File name of DNS keytab file    """    setup_file(setup_path("named.conf"), path, {            "DNSDOMAIN": dnsdomain,            "REALM": realm,            "REALM_WC": "*." + ".".join(realm.split(".")[1:]),            "DNS_KEYTAB": keytab_name,            "DNS_KEYTAB_ABS": os.path.join(private_dir, keytab_name),        })def create_krb5_conf(path, setup_path, dnsdomain, hostname, realm):    """Write out a file containing zone statements suitable for inclusion in a    named.conf file (including GSS-TSIG configuration).        :param path: Path of the new named.conf file.    :param setup_path: Setup path function.    :param dnsdomain: DNS Domain name    :param hostname: Local hostname    :param realm: Realm name    """    setup_file(setup_path("krb5.conf"), path, {            "DNSDOMAIN": dnsdomain,            "HOSTNAME": hostname,            "REALM": realm,        })def load_schema(setup_path, samdb, schemadn, netbiosname, configdn, sitename):    """Load schema for the SamDB.        :param samdb: Load a schema into a SamDB.    :param setup_path: Setup path function.    :param schemadn: DN of the schema    :param netbiosname: NetBIOS name of the host.    :param configdn: DN of the configuration    """    schema_data = open(setup_path("schema.ldif"), 'r').read()    schema_data += open(setup_path("schema_samba4.ldif"), 'r').read()    schema_data = substitute_var(schema_data, {"SCHEMADN": schemadn})    prefixmap = open(setup_path("prefixMap.txt"), 'r').read()    prefixmap = b64encode(prefixmap)    head_data = open(setup_path("provision_schema_basedn_modify.ldif"), 'r').read()    head_data = substitute_var(head_data, {                    "SCHEMADN": schemadn,                    "NETBIOSNAME": netbiosname,                    "CONFIGDN": configdn,                    "DEFAULTSITE":sitename,                    "PREFIXMAP_B64":prefixmap    })    samdb.attach_schema_from_ldif(head_data, schema_data)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -