initial commit
This commit is contained in:
commit
67a2568e52
|
@ -0,0 +1,6 @@
|
|||
# https://tools.ietf.org/html/draft-findlay-ldap-groupofentries-00
|
||||
#
|
||||
dn: cn=groupofentries,cn=schema,cn=config
|
||||
objectClass: olcSchemaConfig
|
||||
cn: groupofentries
|
||||
olcObjectClasses: {0}( 1.2.826.0.1.3458854.2.1.1.1 NAME 'groupOfEntries' DESC 'Replacement for groupOfNames object without required member attribute' SUP top STRUCTURAL MUST ( cn ) MAY ( member $ businessCategory $ seeAlso $ owner $ ou $ o $ description ) )
|
|
@ -0,0 +1,11 @@
|
|||
dn: cn=sudo,cn=schema,cn=config
|
||||
objectClass: olcSchemaConfig
|
||||
cn: sudo
|
||||
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
||||
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.2 NAME 'sudoHost' DESC 'Host(s) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
||||
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.3 NAME 'sudoCommand' DESC 'Command(s) to be executed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
||||
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.4 NAME 'sudoRunAs' DESC 'User(s) impersonated by sudo (deprecated)' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
||||
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.5 NAME 'sudoOption' DESC 'Options(s) followed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
||||
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.6 NAME 'sudoRunAsUser' DESC 'User(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
||||
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.7 NAME 'sudoRunAsGroup' DESC 'Group(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
||||
olcObjectClasses: ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top STRUCTURAL DESC 'Sudoer Entries' MUST ( cn ) MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $ sudoRunAsGroup $ sudoOption $ description ) )
|
|
@ -0,0 +1,10 @@
|
|||
dn: olcDatabase={1}{{ LDAP_BACKEND }},cn=config
|
||||
changetype: modify
|
||||
delete: olcAccess
|
||||
-
|
||||
add: olcAccess
|
||||
olcAccess: to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break
|
||||
olcAccess: to * by dn="cn=admin,{{ LDAP_BASE_DN }}" manage by * break
|
||||
olcAccess: to * by set.expand="([cn=ldap_admin,ou=groups,{{ LDAP_BASE_DN }}])/member & user" write by * break
|
||||
olcAccess: to attrs=userPassword,shadowLastChange by self =w by anonymous auth by * none
|
||||
olcAccess: to * by self read by dn="cn={{ LDAP_READONLY_USER_USERNAME }},{{ LDAP_BASE_DN }}" read by * none
|
|
@ -0,0 +1,9 @@
|
|||
dn: olcOverlay={0}memberof,olcDatabase={1}mdb,cn=config
|
||||
changetype: modify
|
||||
replace: olcMemberOfGroupOC
|
||||
olcMemberOfGroupOC: groupOfEntries
|
||||
|
||||
dn: olcOverlay={0}memberof,olcDatabase={1}mdb,cn=config
|
||||
changetype: modify
|
||||
replace: olcMemberOfMemberAD
|
||||
olcMemberOfMemberAD: member
|
|
@ -0,0 +1,15 @@
|
|||
Add your custom ldif files here if you don't want to overwrite image default boostrap ldif.
|
||||
at run time you can also mount a data volume with your ldif files to /container/service/slapd/assets/config/bootstrap/ldif/custom
|
||||
|
||||
The startup script provides some substitutions in bootstrap ldif files. Following substitutions are supported:
|
||||
|
||||
- `{{ LDAP_BASE_DN }}`
|
||||
- `{{ LDAP_BACKEND }}`
|
||||
- `{{ LDAP_DOMAIN }}`
|
||||
- `{{ LDAP_READONLY_USER_USERNAME }}`
|
||||
- `{{ LDAP_READONLY_USER_PASSWORD_ENCRYPTED }}`
|
||||
|
||||
Other `{{ * }}` substitutions are left unchanged.
|
||||
|
||||
Since startup script modifies `ldif` files,
|
||||
you **must** add `--copy-service` argument to entrypoint if you don't want to overwrite them.
|
|
@ -0,0 +1,5 @@
|
|||
dn: ou=groups,{{ LDAP_BASE_DN }}
|
||||
changetype: add
|
||||
objectClass: organizationalUnit
|
||||
objectClass: top
|
||||
ou: groups
|
|
@ -0,0 +1,5 @@
|
|||
dn: ou=hosts,{{ LDAP_BASE_DN }}
|
||||
changetype: add
|
||||
objectClass: organizationalUnit
|
||||
objectClass: top
|
||||
ou: hosts
|
|
@ -0,0 +1,5 @@
|
|||
dn: ou=mounts,{{ LDAP_BASE_DN }}
|
||||
changetype: add
|
||||
objectClass: organizationalUnit
|
||||
objectClass: top
|
||||
ou: mounts
|
|
@ -0,0 +1,5 @@
|
|||
dn: ou=sudoers,{{ LDAP_BASE_DN }}
|
||||
changetype: add
|
||||
objectClass: organizationalUnit
|
||||
objectClass: top
|
||||
ou: sudoers
|
|
@ -0,0 +1,5 @@
|
|||
dn: ou=users,{{ LDAP_BASE_DN }}
|
||||
changetype: add
|
||||
objectClass: organizationalUnit
|
||||
objectClass: top
|
||||
ou: users
|
|
@ -0,0 +1,77 @@
|
|||
services:
|
||||
openldap:
|
||||
image: osixia/openldap:1.5.0
|
||||
container_name: openldap
|
||||
restart: unless-stopped
|
||||
command: --loglevel debug --copy-service
|
||||
environment:
|
||||
LDAP_LOG_LEVEL: "256"
|
||||
LDAP_ORGANISATION: "Alice"
|
||||
LDAP_DOMAIN: "alice.ufsj"
|
||||
LDAP_BASE_DN: "dc=alice,dc=ufsj"
|
||||
LDAP_ADMIN_PASSWORD_FILE: "/run/secrets/ldap-admin"
|
||||
LDAP_CONFIG_PASSWORD_FILE: "/run/secrets/ldap-config"
|
||||
LDAP_READONLY_USER: "true"
|
||||
LDAP_READONLY_USER_USERNAME: "alice"
|
||||
LDAP_READONLY_USER_PASSWORD_FILE: "/run/secrets/ldap-readonly"
|
||||
LDAP_RFC2307BIS_SCHEMA: "true"
|
||||
LDAP_BACKEND: "mdb"
|
||||
LDAP_TLS: "false"
|
||||
|
||||
# LDAP_TLS_CRT_FILENAME: "fullchain1.pem"
|
||||
# LDAP_TLS_KEY_FILENAME: "privkey1.pem"
|
||||
# LDAP_TLS_DH_PARAM_FILENAME: "dhparam.pem"
|
||||
# LDAP_TLS_CA_CRT_FILENAME: "ca/ca-certificates.crt"
|
||||
# LDAP_TLS_ENFORCE: "false"
|
||||
# LDAP_TLS_VERIFY_CLIENT: "demand"
|
||||
# LDAP_REPLICATION: "false"
|
||||
#LDAP_REPLICATION_CONFIG_SYNCPROV: 'binddn="cn=admin,cn=config" bindmethod=simple credentials="$$LDAP_CONFIG_PASSWORD" searchbase="cn=config" type=refreshAndPersist retry="60 +" timeout=1 starttls=critical'
|
||||
#LDAP_REPLICATION_DB_SYNCPROV: 'binddn="cn=admin,$$LDAP_BASE_DN" bindmethod=simple credentials="$$LDAP_ADMIN_PASSWORD" searchbase="$$LDAP_BASE_DN" type=refreshAndPersist interval=00:00:00:10 retry="60 +" timeout=1 starttls=critical'
|
||||
#LDAP_REPLICATION_HOSTS: "#PYTHON2BASH:['ldap://ldap.example.org','ldap://ldap2.example.org']"
|
||||
KEEP_EXISTING_CONFIG: "false"
|
||||
LDAP_REMOVE_CONFIG_AFTER_SETUP: "true"
|
||||
LDAP_SSL_HELPER_PREFIX: "ldap"
|
||||
tty: true
|
||||
stdin_open: true
|
||||
secrets:
|
||||
- ldap-admin
|
||||
- ldap-config
|
||||
- ldap-readonly
|
||||
volumes:
|
||||
- data:/var/lib/ldap
|
||||
- config:/etc/ldap/slapd.d
|
||||
- ./templates:/templates
|
||||
- ./custom:/container/service/slapd/assets/config/bootstrap/ldif/custom
|
||||
networks:
|
||||
- traefik-public
|
||||
labels:
|
||||
traefik.enable: true
|
||||
traefik.tcp.routers.ldaps.entrypoints: ldaps
|
||||
traefik.tcp.routers.ldaps.tls: true
|
||||
traefik.tcp.routers.ldaps.rule: HostSNI(`*`)
|
||||
traefik.tcp.services.ldaps.loadbalancer.server.port: 389
|
||||
|
||||
# ports:
|
||||
# - "389:389"
|
||||
# - "636:636"
|
||||
|
||||
# For replication to work correctly, domainname and hostname must be
|
||||
# set correctly so that "hostname"."domainname" equates to the
|
||||
# fully-qualified domain name for the host.
|
||||
# domainname: "example.org"
|
||||
# hostname: "ldap-server"
|
||||
volumes:
|
||||
data:
|
||||
config:
|
||||
|
||||
networks:
|
||||
traefik-public:
|
||||
external: true
|
||||
|
||||
secrets:
|
||||
ldap-admin:
|
||||
file: ./secrets/ldap-admin
|
||||
ldap-config:
|
||||
file: ./secrets/ldap-config
|
||||
ldap-readonly:
|
||||
file: ./secrets/ldap-readonly
|
|
@ -0,0 +1,9 @@
|
|||
dn: olcDatabase={1}mdb,cn=config
|
||||
changetype: modify
|
||||
add: olcAccess
|
||||
olcAccess: to * by self read by dn="cn=admin,dc=alice,dc=ufsj" write by dn="cn=alice,dc=alice,dc=ufsj" read by users read by * none
|
||||
|
||||
dn: olcDatabase={1}mdb,cn=config
|
||||
changetype: modify
|
||||
delete: olcAccess
|
||||
olcAccess: {2}
|
|
@ -0,0 +1,9 @@
|
|||
dn: olcOverlay={0}memberof,olcDatabase={1}mdb,cn=config
|
||||
changetype: modify
|
||||
replace: olcMemberOfGroupOC
|
||||
olcMemberOfGroupOC: groupOfEntries
|
||||
|
||||
dn: olcOverlay={0}memberof,olcDatabase={1}mdb,cn=config
|
||||
changetype: modify
|
||||
replace: olcMemberOfMemberAD
|
||||
olcMemberOfMemberAD: member
|
|
@ -0,0 +1,6 @@
|
|||
# https://tools.ietf.org/html/draft-findlay-ldap-groupofentries-00
|
||||
#
|
||||
dn: cn=groupofentries,cn=schema,cn=config
|
||||
objectClass: olcSchemaConfig
|
||||
cn: groupofentries
|
||||
olcObjectClasses: {0}( 1.2.826.0.1.3458854.2.1.1.1 NAME 'groupOfEntries' DESC 'Replacement for groupOfNames object without required member attribute' SUP top STRUCTURAL MUST ( cn ) MAY ( member $ businessCategory $ seeAlso $ owner $ ou $ o $ description ) )
|
|
@ -0,0 +1,9 @@
|
|||
objectclass ( 1.2.826.0.1.3458854.2.1.1.1 NAME 'groupOfEntries' SUP top STRUCTURAL
|
||||
MUST ( cn )
|
||||
MAY ( member $
|
||||
businessCategory $
|
||||
seeAlso $
|
||||
owner $
|
||||
ou $
|
||||
o $
|
||||
description ) )
|
|
@ -0,0 +1,20 @@
|
|||
#
|
||||
# LDAP Public Key Patch schema for use with openssh-ldappubkey
|
||||
# Author: Eric AUGE <eau@phear.org>
|
||||
#
|
||||
# Based on the proposal of : Mark Ruijter
|
||||
#
|
||||
|
||||
|
||||
# octetString SYNTAX
|
||||
attributetype ( 1.3.6.1.4.1.24552.500.1.1.1.13 NAME 'sshPublicKey'
|
||||
DESC 'OpenSSH Public key'
|
||||
EQUALITY octetStringMatch
|
||||
SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
|
||||
|
||||
# printableString SYNTAX yes|no
|
||||
objectclass ( 1.3.6.1.4.1.24552.500.1.1.2.0 NAME 'ldapPublicKey' SUP top AUXILIARY
|
||||
DESC 'OpenSSH LPK objectclass'
|
||||
MUST uid
|
||||
MAY sshPublicKey
|
||||
)
|
|
@ -0,0 +1,11 @@
|
|||
dn: cn=sudo,cn=schema,cn=config
|
||||
objectClass: olcSchemaConfig
|
||||
cn: sudo
|
||||
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
||||
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.2 NAME 'sudoHost' DESC 'Host(s) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
||||
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.3 NAME 'sudoCommand' DESC 'Command(s) to be executed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
||||
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.4 NAME 'sudoRunAs' DESC 'User(s) impersonated by sudo (deprecated)' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
||||
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.5 NAME 'sudoOption' DESC 'Options(s) followed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
||||
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.6 NAME 'sudoRunAsUser' DESC 'User(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
||||
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.7 NAME 'sudoRunAsGroup' DESC 'Group(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
||||
olcObjectClasses: ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top STRUCTURAL DESC 'Sudoer Entries' MUST ( cn ) MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $ sudoRunAsGroup $ sudoOption $ description ) )
|
Loading…
Reference in New Issue