https://docs.openshift.com/container-platform/4.16/authentication/ldap-syncing.html
oc adm groups sync --sync-config=ldap-sync-config.yaml --confirm
https://docs.openshift.com/container-platform/4.16/authentication/ldap-syncing.html
oc adm groups sync --sync-config=ldap-sync-config.yaml --confirm
| # User passwords | |
| USER_PASS_JDOE="UserPass123" | |
| USER_PASS_JSMITH="UserPass123" | |
| USER_PASS_BJOHNSON="UserPass123" | |
| # Generate hashed passwords | |
| LDAPHASHEDPASS_JDOE=$(slappasswd -s "$USER_PASS_JDOE") | |
| LDAPHASHEDPASS_JSMITH=$(slappasswd -s "$USER_PASS_JSMITH") | |
| LDAPHASHEDPASS_BJOHNSON=$(slappasswd -s "$USER_PASS_BJOHNSON") | |
| cat <<EOF > /tmp/jdoe.ldif | |
| dn: uid=jdoe,ou=People,$DC | |
| objectClass: inetOrgPerson | |
| cn: John Doe | |
| sn: Doe | |
| givenName: John | |
| uid: jdoe | |
| mail: jdoe@$DOMAIN | |
| userPassword: $LDAPHASHEDPASS_JDOE | |
| EOF | |
| cat <<EOF > /tmp/jsmith.ldif | |
| dn: uid=jsmith,ou=People,$DC | |
| objectClass: inetOrgPerson | |
| cn: Jane Smith | |
| sn: Smith | |
| givenName: Jane | |
| uid: jsmith | |
| mail: jsmith@$DOMAIN | |
| userPassword: $LDAPHASHEDPASS_JSMITH | |
| EOF | |
| cat <<EOF > /tmp/bjohnson.ldif | |
| dn: uid=bjohnson,ou=People,$DC | |
| objectClass: inetOrgPerson | |
| cn: Bob Johnson | |
| sn: Johnson | |
| givenName: Bob | |
| uid: bjohnson | |
| mail: bjohnson@$DOMAIN | |
| userPassword: $LDAPHASHEDPASS_BJOHNSON | |
| EOF | |
| # Create users | |
| ldapadd -x -H ldaps://$DOMAIN -D "$LDAP_MANAGER_DN" -w "$LDAP_ROOT_PASS" -f /tmp/jdoe.ldif | |
| ldapadd -x -H ldaps://$DOMAIN -D "$LDAP_MANAGER_DN" -w "$LDAP_ROOT_PASS" -f /tmp/jsmith.ldif | |
| ldapadd -x -H ldaps://$DOMAIN -D "$LDAP_MANAGER_DN" -w "$LDAP_ROOT_PASS" -f /tmp/bjohnson.ldif | |
| # Verify users | |
| ldapsearch -x -H ldaps://$DOMAIN -D "$LDAP_MANAGER_DN" -w "$LDAP_ROOT_PASS" -b "$DC" "(uid=jdoe)" | |
| ldapsearch -x -H ldaps://$DOMAIN -D "$LDAP_MANAGER_DN" -w "$LDAP_ROOT_PASS" -b "$DC" "(uid=jsmith)" | |
| ldapsearch -x -H ldaps://$DOMAIN -D "$LDAP_MANAGER_DN" -w "$LDAP_ROOT_PASS" -b "$DC" "(uid=bjohnson)" | |
| ############## | |
| ### Groups ### | |
| ############## | |
| cat <<EOF > /tmp/groups_ou.ldif | |
| dn: ou=Groups,$DC | |
| objectClass: organizationalUnit | |
| ou: Groups | |
| EOF | |
| ldapadd -x -H ldaps://$DOMAIN -D "$LDAP_MANAGER_DN" -w "$LDAP_ROOT_PASS" -f /tmp/groups_ou.ldif | |
| cat <<EOF > /tmp/developers_group.ldif | |
| dn: cn=developers,ou=Groups,$DC | |
| objectClass: groupOfNames | |
| cn: developers | |
| member: uid=jdoe,ou=People,$DC | |
| member: uid=jsmith,ou=People,$DC | |
| EOF | |
| cat <<EOF > /tmp/admins_group.ldif | |
| dn: cn=admins,ou=Groups,$DC | |
| objectClass: groupOfNames | |
| cn: admins | |
| member: uid=bpandey,ou=People,$DC | |
| member: uid=bjohnson,ou=People,$DC | |
| EOF | |
| cat <<EOF > /tmp/superadmins_group.ldif | |
| dn: cn=superadmins,ou=Groups,$DC | |
| objectClass: groupOfNames | |
| cn: superadmins | |
| member: uid=bpandey,ou=People,$DC | |
| EOF | |
| ldapadd -x -H ldaps://$DOMAIN -D "$LDAP_MANAGER_DN" -w "$LDAP_ROOT_PASS" -f /tmp/developers_group.ldif | |
| ldapadd -x -H ldaps://$DOMAIN -D "$LDAP_MANAGER_DN" -w "$LDAP_ROOT_PASS" -f /tmp/admins_group.ldif | |
| ldapadd -x -H ldaps://$DOMAIN -D "$LDAP_MANAGER_DN" -w "$LDAP_ROOT_PASS" -f /tmp/superadmins_group.ldif | |
| # Verify groups | |
| ldapsearch -x -H ldaps://$DOMAIN -D "$LDAP_MANAGER_DN" -w "$LDAP_ROOT_PASS" -b "ou=Groups,$DC" "(cn=developers)" |
| kind: LDAPSyncConfig | |
| apiVersion: v1 | |
| url: ldaps://dtldap.xtoph152.dfw.ocp.run:636 | |
| bindDN: cn=Directory Manager | |
| bindPassword: "LDAPRootPass123" | |
| ca: /tmp/ldap-ca.crt | |
| rfc2307: | |
| groupsQuery: | |
| baseDN: ou=Groups,dc=dtldap,dc=xtoph152,dc=dfw,dc=ocp,dc=run | |
| scope: sub | |
| derefAliases: never | |
| filter: (objectClass=groupOfNames) | |
| groupUIDAttribute: dn | |
| groupNameAttributes: [ cn ] | |
| groupMembershipAttributes: [ member ] | |
| usersQuery: | |
| baseDN: ou=People,dc=dtldap,dc=xtoph152,dc=dfw,dc=ocp,dc=run | |
| scope: sub | |
| derefAliases: never | |
| pageSize: 0 | |
| userUIDAttribute: dn | |
| userNameAttributes: [ uid ] | |
| tolerateMemberNotFoundErrors: false | |
| tolerateMemberOutOfScopeErrors: false |
| apiVersion: config.openshift.io/v1 | |
| kind: OAuth | |
| metadata: | |
| annotations: | |
| include.release.openshift.io/ibm-cloud-managed: "true" | |
| include.release.openshift.io/self-managed-high-availability: "true" | |
| release.openshift.io/create-only: "true" | |
| name: cluster | |
| spec: | |
| identityProviders: | |
| - ldap: | |
| attributes: | |
| email: | |
| id: | |
| - dn | |
| name: | |
| - cn | |
| preferredUsername: | |
| - uid | |
| bindDN: cn=Directory Manager | |
| bindPassword: | |
| name: ldap-bind-password-l489k | |
| ca: | |
| name: ldap-ca-mb5k5 | |
| insecure: false | |
| url: ldaps://dtldap.xtoph152.dfw.ocp.run:636/ou=People,dc=dtldap,dc=xtoph152,dc=dfw,dc=ocp,dc=run?uid | |
| mappingMethod: claim | |
| name: ldap | |
| type: LDAP |
| #!/bin/bash | |
| set -x | |
| # Ensure the script is run as root | |
| if [ "$EUID" -ne 0 ]; then | |
| echo "Please run as root" | |
| exit | |
| fi | |
| # Variables | |
| DOMAIN="dtldap.xtoph152.dfw.ocp.run" | |
| DC="dc=dtldap,dc=xtoph152,dc=dfw,dc=ocp,dc=run" | |
| LDAP_ROOT_PASS="LDAPRootPass123" | |
| LDAP_USER_PASS="UserPass123" | |
| LDAP_MANAGER_DN="cn=Directory Manager" | |
| INSTANCE_NAME="ldap" | |
| CERTDB_DIR="/etc/dirsrv/slapd-$INSTANCE_NAME" | |
| # Install 389 Directory Server and OpenLDAP clients | |
| dnf install -y 389-ds-base openldap-clients | |
| # Remove existing instance if any | |
| systemctl stop dirsrv@$INSTANCE_NAME | |
| dsctl $INSTANCE_NAME remove --do-it | |
| # Create an instance configuration file without SSL certificates | |
| cat <<EOF > /tmp/ds_setup.inf | |
| [general] | |
| config_version = 2 | |
| [slapd] | |
| instance_name = $INSTANCE_NAME | |
| root_password = $LDAP_ROOT_PASS | |
| [backend-userroot] | |
| suffix = $DC | |
| sample_entries = yes | |
| EOF | |
| # Create the directory server instance and capture output | |
| dscreate from-file /tmp/ds_setup.inf | tee dscreate_output.txt | |
| # Start and enable the directory server | |
| systemctl start dirsrv@$INSTANCE_NAME | |
| systemctl enable dirsrv@$INSTANCE_NAME | |
| # Wait for the service to start | |
| sleep 5 | |
| # Generate SSL certificates using OpenSSL | |
| cat <<EOF > openssl.conf | |
| [ req ] | |
| default_bits = 2048 | |
| prompt = no | |
| default_md = sha256 | |
| req_extensions = req_ext | |
| distinguished_name = dn | |
| [ dn ] | |
| C = US | |
| ST = CO | |
| L = Denver | |
| O = Red Hat | |
| CN = $DOMAIN | |
| [ req_ext ] | |
| subjectAltName = @alt_names | |
| [ alt_names ] | |
| DNS.1 = $DOMAIN | |
| EOF | |
| openssl genrsa -out ldap_server.key 2048 | |
| openssl req -new -key ldap_server.key -out ldap_server.csr -config openssl.conf | |
| openssl x509 -req -days 365 -in ldap_server.csr -signkey ldap_server.key -out ldap_server.crt -extensions req_ext -extfile openssl.conf | |
| # Convert certificates to PKCS#12 format | |
| openssl pkcs12 -export -inkey ldap_server.key -in ldap_server.crt -out ldap_server.p12 -name "Server-Cert" -passout pass:"" | |
| # Stop the LDAP instance | |
| systemctl stop dirsrv@$INSTANCE_NAME | |
| # Remove existing certificates | |
| certutil -D -d $CERTDB_DIR -n "Server-Cert" | |
| certutil -D -d $CERTDB_DIR -n "Self-Signed-CA" | |
| # Import the new certificate | |
| pk12util -i ldap_server.p12 -d $CERTDB_DIR -K '' | |
| # Set trust attributes | |
| certutil -M -n "Server-Cert" -t "u,u,u" -d $CERTDB_DIR | |
| # Start the LDAP instance | |
| systemctl start dirsrv@$INSTANCE_NAME | |
| # Export the server certificate | |
| certutil -L -d $CERTDB_DIR -n "Server-Cert" -a > ldap-server.crt | |
| # Add hostname to /etc/hosts | |
| echo "127.0.0.1 $DOMAIN" >> /etc/hosts | |
| # Configure LDAP client to trust the server's certificate | |
| cp ldap-server.crt /etc/openldap/certs/ | |
| chown root:root /etc/openldap/certs/ldap-server.crt | |
| chmod 644 /etc/openldap/certs/ldap-server.crt | |
| echo "TLS_CACERT /etc/openldap/certs/ldap-server.crt" >> /etc/openldap/ldap.conf | |
| echo "TLS_REQCERT allow" >> /etc/openldap/ldap.conf | |
| # Verify the base DN exists | |
| ldapsearch -x -H ldaps://$DOMAIN -D "$LDAP_MANAGER_DN" -w "$LDAP_ROOT_PASS" -b "$DC" -s base "(objectclass=*)" | |
| # Add People organizational unit | |
| cat <<EOF > /tmp/people.ldif | |
| dn: ou=People,$DC | |
| objectClass: organizationalUnit | |
| ou: People | |
| EOF | |
| ldapadd -x -H ldaps://$DOMAIN -D "$LDAP_MANAGER_DN" -w "$LDAP_ROOT_PASS" -f /tmp/people.ldif | |
| # Add a user | |
| cat <<EOF > /tmp/user.ldif | |
| dn: uid=bpandey,ou=People,$DC | |
| objectClass: inetOrgPerson | |
| cn: Balkrishna Pandey | |
| sn: Pandey | |
| givenName: Balkrishna | |
| uid: bpandey | |
| mail: bpandey@$DOMAIN | |
| userPassword: $LDAP_USER_PASS | |
| EOF | |
| ldapadd -x -H ldaps://$DOMAIN -D "$LDAP_MANAGER_DN" -w "$LDAP_ROOT_PASS" -f /tmp/user.ldif | |
| echo "LDAP server setup complete with domain $DOMAIN." | |
| echo "User 'bpandey' has been created with password '$LDAP_USER_PASS'." |