https://wiki.ubuntu.com/Enterprise/Authentication/sssd https://help.ubuntu.com/community/SingleSignOn https://help.ubuntu.com/lts/serverguide/openldap-server.html http://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_ldap.html https://fedorahosted.org/sssd/wiki/DesignDocs/NSSWithKerberosPrincipal
Na serverech, kde se chci přihlašovat (takže jak na LDAP/Kerberos serveru, tak na klientech): sudo apt-get -y install sssd libpam-sss libnss-sss sssd-tools vi /etc/sssd/sssd.conf [sssd] config_file_version = 2 services = nss, pam, ssh, sudo domains = cesal.cz [nss] debug_level = 7 filter_users = root,lightdm,ldap,named,avahi,haldaemon,dbus,radvd,tomcat,radiusd,news,mailman,nscd filter_groups = root [pam] pam_verbosity = 3 debug_level = 9 [sudo] [domain/cesal.cz] debug_level = 7 chpass_provider = krb5 id_provider = ldap ldap_uri = ldap://ldap.cesal.cz ldap_search_base = dc=cesal,dc=cz ldap_user_principal = krbPrincipalName sudo_provider = ldap ldap_sudo_search_base = ou=Sudoers,ou=Apps,dc=cesal,dc=cz ldap_sudo_full_refresh_interval=86400 ldap_sudo_smart_refresh_interval=3600 auth_provider = krb5 krb5_realm = CESAL.CZ krb5_server = ldap.cesal.cz krb5_kpasswd = ldap.cesal.cz cache_credentials = true enumerate = false
vi /etc/nsswitch.conf
passwd: files sss group: files sss shadow: files sss sudoers: files sss
publickey: files
hosts: files dns myhostname networks: files
protocols: files services: files ethers: files rpc: files
netgroup: files
Upravit práva a spustit
chmod 700 /etc/sssd/sssd.conf && chown root:root /etc/sssd/sssd.conf
systemctl restart sssd
———
Nainstalovat OpenLDAP server – už jen samozřejmě na LDAP serveru
sudo apt-get -y install slapd ldap-utils sasl2-bin libsasl2-2 libsasl2-modules libsasl2-modules-gssapi-mit
Kontrola
sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config
Naplnění LDAP databáze
containers.ldif dn: ou=Users,dc=cesal,dc=cz objectClass: top objectClass: organizationalUnit ou: Users description: Uživatelské účty dn: ou=Groups,dc=cesal,dc=cz objectClass: top objectClass: organizationalUnit ou: Groups description: Uživatelské skupiny dn: ou=Computers,dc=cesal,dc=cz objectClass: top objectClass: organizationalUnit ou: Groups description: Počítače dn: ou=Apps,dc=cesal,dc=cz objectClass: top objectClass: organizationalUnit ou: Groups description: Aplikace
ldapadd -x -D cn=admin,dc=cesal,dc=cz -W -f containers.ldif
groups.ldif dn: cn=Administrators,ou=Groups,dc=cesal,dc=cz objectClass: posixGroup cn: Administrators gidNumber: 5000 dn: cn=Users,ou=Groups,dc=cesal,dc=cz objectClass: posixGroup cn: Users gidNumber: 5001
ldapadd -x -D cn=admin,dc=cesal,dc=cz -W -f groups.ldif
Logování logging.ldif dn: cn=config changetype: modify add: olcLogLevel olcLogLevel: stats ldapmodify -Y EXTERNAL -H ldapi:/// -f logging.ldif
Indexování - index_ldap.ldif - možná používáte MDB, tak změnit na mdb:
dn: olcDatabase={1}mdb,cn=config changetype: modify replace: olcDbIndex olcDbIndex: uid,uidNumber,gidNumber,memberUid,uniqueMember,objectClass,cn eq
ldapmodify -Y EXTERNAL -H ldapi:/// -f index_ldap.ldif
access.ldif
- Přístup administrátora
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcAccess
olcAccess: to * by dn=“cn=admin,dc=cesal,dc=cz“
ldapmodify -Y EXTERNAL -H ldapi:/// -f access.ldif
Přeindexovat a spustit OpenLDAP
sudo service slapd stop sudo su - openldap -c slapindex sudo service slapd start
Instalace Kerbera – na serveru
sudo apt-get -y install krb5-{admin-server,kdc} krb5-kdc-ldap
Říše: CESAL.CZ
zcat /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz >/etc/ldap/schema/kerberos.schema echo "include /etc/ldap/schema/kerberos.schema" > schema_convert.conf mkdir /tmp/ldif_output slaptest -f schema_convert.conf -F /tmp/ldif_output/
Edit the file /tmp/ldif_output/cn\=config/cn\=schema/cn\=\{0\}kerberos.ldif .
ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/ldif_output/cn\=config/cn\=schema/cn\=\{0\}kerberos.ldif
vi /etc/krb5.conf (server)
[libdefaults] default_realm = CESAL.CZ noaddresses = true forwardable = true proxiable = true k5login_directory = /usr/share/ssh/%u k5login_authoritative = true ignore_acceptor_hostname = true [realms] CESAL.CZ = { kdc = ldap.cesal.cz admin_server = ldap.cesal.cz default_domain = cesal.cz database_module = openldap_cesal } [domain_realm] .cesal.cz = CESAL.CZ cesal.cz = CESAL.CZ [dbdefaults] ldap_kerberos_container_dn = cn=krbcontainer,dc=cesal,dc=cz [dbmodules] openldap_cesal = { db_library = kldap ldap_kdc_dn = "cn=admin,dc=cesal,dc=cz" ldap_kadmind_dn = "cn=admin,dc=cesal,dc=cz" ldap_service_password_file = /etc/krb5kdc/service.keyfile ldap_servers = ldap://ldap.cesal.cz ldap_conns_per_server = 5 } [plugins] localauth = { module = sssd:/usr/lib/x86_64-linux-gnu/sssd/modules/sssd_krb5_localauth_plugin.so enable_only = sssd } [logging] kdc = SYSLOG:info:local1 admin-server = SYSLOG:info:local2 default = SYSLOG:err:auth
sudo kdb5_ldap_util -D cn=admin,dc=cesal,dc=cz create -subtrees ou=Users,dc=cesal,dc=cz -r CESAL.CZ -s
Vymyslet si nějaké heslo pro Kerbera (složité).
Kerberos potřebuje heslo pro přístup k LDAPu, bere si ho z /etc/krb5kdc/service.keyfile:
kdb5_ldap_util -D cn=admin,dc=cesal,dc=cz stashsrvpw -f /etc/krb5kdc/service.keyfile cn=admin,dc=cesal,dc=cz
kadmin.local - vytvořit pravidla a přidat admin uživatele krbadmin: add_policy -minlength 8 -minclasses 2 admin add_policy -minlength 8 -minclasses 2 host add_policy -minlength 8 -minclasses 2 service add_policy -minlength 8 -minclasses 2 user addprinc -policy admin krbadmin/admin
Přidat práva přístupu cat /etc/krb5kdc/kdc.conf|grep acl_file */admin@CESAL.CZ * */*@CESAL.CZ i *@CESAL.CZ i
Restartovat sudo service krb5-kdc restart sudo service krb5-admin-server restart Zkouška kadmin -p krbadmin/admin listprincs
Na serveru i klientovi – vi /etc/ldap/ldap.conf
apt-get -y install ldap-utils
BASE dc=cesal,dc=cz URI ldap://ldap.cesal.cz ldap://ldap.cesal.cz:666 SASL_MECH GSSAPI SASL_REALM CESAL.CZ TLS_REQCERT allow
Kerberos na klientovi
apt-get -y install krb5-user
vi /etc/krb5.conf (klient)
[libdefaults] default_realm = CESAL.CZ noaddresses = true forwardable = true proxiable = true [realms] CESAL.CZ = { admin_server = ldap.cesal.cz } Na klientovi zkouška kinit -p krbadmin/admin klist
Pro autentizaci přes Kerberos a autorizaci přes LDAP není zabezpečení třeba. Ale při komunikaci přes internetu je vhodné zabezpečení použít.
Získání certifikátu
Použijeme nejnovější autoritu Let’s Encrypt, která je zároveň důvěryhodná.
apt-get install git
openssl genrsa 4096 > user.key openssl rsa -in user.key -pubout > user.pub
openssl genrsa 4096 > ldap.cesal.cz.key openssl req -new -sha256 -key ldap.cesal.cz.key -subj "/CN=ldap.cesal.cz" > ldap.cesal.cz.csr
git clone https://github.com/diafygi/letsencrypt-nosudo enc python ./enc/sign_csr.py --public-key user.pub ldap.cesal.cz.csr > ldap.cesal.cz.signed.crt
Musíte dočasně povolit přístup přes port 80 na cílový počítač (ldap.cesal.cz). Nejen v NATu, ale také v iptables.
Kontrola vydaného certifikátu
openssl x509 -in ldap.cesal.cz.signed.crt -noout -text
Nastavení certifikátu v LDAPu (LDAP server)
wget https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem /etc/ssl/certs/
chmod 777 /etc/ssl/certs/lets-encrypt-x1-cross-signed.pem
mkdir /etc/ldap/ssl/
mv ldap.cesal.cz.signed.crt /etc/ldap/ssl/
mv ldap.cesal.cz.key /etc/ldap/ssl/
chown openldap:openldap /etc/ldap -R && chmod 770 /etc/ldap -R
ssl.ldif
dn: cn=config
changetype: modify
add: olcTLSCipherSuite
olcTLSCipherSuite: NORMAL
-
add: olcTLSCRLCheck
olcTLSCRLCheck: none
-
add: olcTLSVerifyClient
olcTLSVerifyClient: never
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/ssl/ldap.cesal.cz.signed.crt
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap.cesal.cz.key
-
add: olcSecurity
olcSecurity: tls=1
ldapmodify -Y EXTERNAL -H ldapi:/// -f ssl.ldif -v
/etc/default/slapd
SLAPD_SERVICES=“ldap:/// ldapi:/// ldaps:///“
service slapd restart
netstat -tualpn -A inet| grep ‚LISTEN‘ |egrep „636|389“
Do /etc/ldap/ldap.conf
TLS_REQCERT allow
ldapsearch -d 9 -D „cn=admin,dc=cesal,dc=cz“ -W -b „dc=cesal,dc=cz“ -H „ldaps://ldap.cesal.cz“ „objectClass=*“
Nastavení u klienta
Server – LDAP
kadmin -p krbadmin/admin
addprinc -policy service -randkey ldap/ldap.cesal.cz@CESAL.CZ
ktadd -k /etc/ldap/ldap.keytab ldap/ldap.cesal.cz@CESAL.CZ
chown openldap:openldap /etc/ldap -R && chmod 770 /etc/ldap -R
/etc/default/slapd
export KRB5_KTNAME=/etc/ldap/ldap.keytab
service slapd restart
kadmin -p krbadmin/admin
addprinc -policy host -randkey host/ldap.cesal.cz@CESAL.CZ
ktadd -k /etc/krb5.keytab host/ldap.cesal.cz@CESAL.CZ
kadmin -p krbadmin/admin
addprinc -policy host -randkey host/dev.cesal.cz@CESAL.CZ
ktadd -k /etc/krb5.keytab host/dev.cesal.cz@CESAL.CZ
Uživatel petr v LDAP: adduser.ldif dn: uid=petr,ou=Users,dc=cesal,dc=cz cn: Petr Novák givenName: Petr uid: petr uidNumber: 10001 gidNumber: 5001 homeDirectory: /home/petr mail: petr@mail.local objectClass: top objectClass: posixAccount objectClass: shadowAccount objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person loginShell: /bin/bash
ldapadd -x -D cn=admin,dc=cesal,dc=cz -W -f adduser.ldif
Uživatel petr v Kerberosu: addprinc -policy user -x dn="uid=petr,ou=Users,dc=cesal,dc=cz" petr If the user object is already created the -x dn="..." option is needed to add the Kerberos attributes. Otherwise a new principal object will be created in the realm subtree. Takže se nepřidá další principal v krbcontainer, ale jen se přidají Kerberos parametry do ou=Users,uid=petr. Tak je to správně.
vi /etc/ssh/sshd_config (server – démon)
GSSAPIAuthentication yes GSSAPICleanupCredentials yes UsePAM yes
vi /etc/ssh/ssh_config (klient)
GSSAPIAuthentication yes GSSAPIDelegateCredentials yes
Nyní by mělo fungovat přihlášení bez hesla (pokud jste přihlášeni do Kerberosu přes kinit). Musíte mít také SSSD nainstalované.
Automatické vytvoření domovského adresáře
/etc/pam.d/common-session by hand and adding the following line before any pam_ldap and pam_krb5 settings:
session required pam_mkhomedir.so umask=0022 skel=/etc/skel
SUDO – přidat schéma do LDAPu
Zkopírovat schéma z https://www.sudo.ws/man/1.8.14/sudoers.ldap.man.html#x4558414d504c4553 do /etc/ldap/schema/sudoers.schema .
echo "include /etc/ldap/schema/sudoers.schema" > schema_convert.conf mkdir /tmp/sudo_ldif slaptest -f schema_convert.conf -F /tmp/sudo_ldif/ Edit the file /tmp/sudo_ldif/cn=config/cn=schema/cn\=\{0\}sudoers.ldif .
ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/sudo_ldif/cn=config/cn=schema/cn\=\{0\}sudoers.ldif SUDO - vytvořit strukturu vi sudo_ou.ldif
dn: ou=Sudoers,ou=Apps,dc=cesal,dc=cz objectClass: top objectClass: organizationalUnit ou: Sudoers description: Sudoers container
ldapadd -x -D cn=admin,dc=cesal,dc=cz -W -f sudo_ou.ldif
Do /etc/ldap/ldap.conf přidat: SUDOERS_BASE ou=Sudoers,ou=Apps,dc=cesal,dc=cz SUDOERS_TIMED no SUDOERS_DEBUG 0 Nezapomenout to mít také v /etc/nsswitch.conf SUDO - indexovat
Indexování - index_ldap.ldif - možná používáte MDB, tak změnit na mdb:
dn: olcDatabase={1}mdb,cn=config changetype: modify replace: olcDbIndex olcDbIndex: uid,uidNumber,gidNumber,memberUid,uniqueMember,objectClass,cn,sudoUser eq
SUDO - přidat pravidla
add_sudoers.ldif
dn: cn=root,ou=Sudoers,ou=Apps,dc=cesal,dc=cz objectClass: top objectClass: sudoRole cn: root sudoUser: root sudoHost: ALL sudoCommand: ALL
dn: cn=%Administrators,ou=Sudoers,ou=Apps,dc=cesal,dc=cz objectClass: top objectClass: sudoRole cn: %Administrators sudoUser: %Administrators sudoHost: ALL sudoCommand: ALL
ldapadd -x -D cn=admin,dc=cesal,dc=cz -W -f add_sudoers.ldif
Zjistit, do jaké skupiny uživatel patří: id