Hits : 4832
openLDAP :: Centralized Authentication
openLDAP
A Quick-Start Guide
http://www.openldap.org/doc/admin24/quickstart.html
Αυθεντικοποίηση Χρηστών μέσω LDAP
[ Οι οδηγίες γράφτηκαν Δεκ 2013 χρησιμοποιώντας archlinux ]
1. Εγκατάσταση OpenLDAP
# pacman -S openldap nss-pam-ldapd
2. Έλεγχος έκδοσης
# /usr/bin/slapd -VVV @(#) $OpenLDAP: slapd 2.4.38 (Nov 20 2013 22:51:42) $ nobody@mnt-storage-buildroots-extra-x86_64-eric:/build/openldap/src/openldap-2.4.38/servers/slapd Included static backends: config ldif monitor bdb hdb mdb relay
# /usr/bin/nslcd --version nss-pam-ldapd 0.8.13 Written by Luke Howard and Arthur de Jong. Copyright (C) 1997-2013 Luke Howard, Arthur de Jong and West Consulting This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
3. Βασικά αρχεία ρύθμισης
- /etc/openldap/slapd.conf
- /etc/nslcd.conf
- /etc/nsswitch.conf
4. slapd.conf
Για την δημιουργία των χρηστών στον ldap πρέπει να προσομοιώσουμε τα πεδία ενός χρήστη από τα αρχεία passwd, group & shadow σε ldap attributes. Για να γίνει αυτό, θα πρέπει να προσθέσουμε στον ldap τα απαραίτητα "σχήματα" – αρχεία.
include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema
Έπειτα πρέπει να ορίσουμε την "βάση του καταλόγου" μας και τον διαχειριστή αυτής:
suffix "dc=mydomain,dc=lan" rootdn "cn=admin,dc=mydomain,dc=lan"
Θα πρέπει να αντικαταστήσουμε το default συνθηματικό του rootdn:
# slappasswd New password: [admin] Re-enter new password: [admin] {SSHA}3ZD5fVfs+/ZYe9SdQEd2+txGusdF8/Y1
Αντικαθιστούμε το "{SSHA}3ZD5fVfs+/ZYe9SdQEd2+txGusdF8/Y1" με το secret
5. Δικαιώματα και κατάλογοι
Για να κάνουμε τις πρώτες δοκιμές μας, πληκτρολογούμε την παρακάτω εντολή:
# slaptest -f /etc/openldap/slapd.conf
Εάν μας βγάλει το παρακάτω μήνυμα λάθους:
"no DB_CONFIG file found in directory /var/lib/openldap/openldap-data"
πρέπει να δημιουργήσουμε το απαραίτητο αρχείο:
# cp /var/lib/openldap/openldap-data/DB_CONFIG.example /var/lib/openldap/openldap-data/DB_CONFIG
Για να ξεκινήσουμε τον δαίμονα openldap σε debug mode θα πρέπει να τρέξουμε την παρακάτω εντολή:
# /usr/bin/slapd -u ldap -g ldap -d 1 -4
Μερικές ενέργειες που πρέπει να κάνουμε:
Δημιουργία του καταλόγου: /run/openldap/ κι αλλαγή δικαιωμάτων στον χρήστη ldap σε όλους τους relative openldap καταλόγους:
# mkdir -pv /run/openldap/ # chown -R ldap:ldap /var/lib/openldap/ /etc/openldap/ /run/openldap/
Αφού γίνουν όλα αυτά, και τρέξουμε τον openldap daemon, θα δημιουργηθούν όλα τα κατάλληλα bdb αρχεία. Τα bdb αρχεία (berkeley database files) αποτελούν το backend του openldap για το directory informational structure που έχουμε.
6. Έλεγχος λειτουργίας του openldap
# ldapsearch -LLL -x -b '' -s base '(objectclass=*)' namingContexts dn: namingContexts: dc=mydomain,dc=lan
Το slaptest θα πρέπει να μας επιστρέψει το εξής:
# slaptest -f /etc/openldap/slapd.conf config file testing succeeded
top
7. base
Η εισαγωγή/εξαγωγή δεδομένων/πληροφοριών στον ldap γίνεται μέσω text based αρχείων που ονομάζονται ldif (LDAP Data Interchange Format).
Για να δημιουργήσουμε την απαραίτητη δομή αποθηκεύουμε τις παρακάτω γραμμές σε ένα text αρχείο, έστω: base.ldif
# mydomain.lan dn: dc=mydomain,dc=lan dc: mydomain o: mydomain Organization objectClass: dcObject objectClass: organization # admin, mydomain.lan dn: cn=admin,dc=mydomain,dc=lan cn: admin description: LDAP administrator objectClass: organizationalRole objectClass: top roleOccupant: dc=mydomain,dc=lan
και το εισάγουμε στον ldap με την παρακάτω εντολή:
# ldapmodify -a -f base.ldif -D "dc=admin,dc=mydomain,dc=lan" -W Enter LDAP Password: [admin]
Μπορούμε να το επιβεβαιώσουμε με το εξής:
# ldapsearch -LLL -x -D "cn=admin,dc=mydomain,dc=lan" -b "dc=mydomain,dc=lan" -W Enter LDAP Password: [admin] dn: dc=mydomain,dc=lan dc: mydomain o: mydomain Organization objectClass: dcObject objectClass: organization dn: cn=admin,dc=mydomain,dc=lan cn: admin description: LDAP administrator objectClass: organizationalRole objectClass: top roleOccupant: dc=mydomain,dc=lan
top
8. user/group ldif
Έπειτα θα πρέπει να δημιουργήσουμε την δομή για τους χρήστες και τις ομάδες. Όταν ολοκληρωθεί αυτό οι χρήστες που θα φτιάξουμε, θα μπορούν να ανήκουν (όπως δλδ και οι φυσικοί χρήστες) σε users/groups.
Ας δημιουργήσουμε το user_group.ldif
# user @ mydomain.lan dn: ou=user,dc=mydomain,dc=lan ou: user objectClass: top objectClass: organizationalUnit # group @ mydomain.lan dn: ou=group,dc=mydomain,dc=lan ou: group objectClass: top objectClass: organizationalUnit
# ldapmodify -a -f user_group.ldif -D "cn=admin,dc=mydomain,dc=lan" -W Enter LDAP Password: [admin] adding new entry "ou=user,dc=mydomain,dc=lan" adding new entry "ou=group,dc=mydomain,dc=lan"
Μπορούμε να επιβεβαιώσουμε με την παραπάνω ldapsearch εντολή.
9. users ldif
Δημιουργούμε το users.ldif – θα περιέχει όλες τις απαραίτητες πληροφορίες για να εισάγουμε έναν virtual χρήστη.
dn: uid=ebal2,ou=user,dc=mydomain,dc=lan objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount # posixAccount # Must Have uid: ebal2 uidNumber: 9999 gidNumber: 9999 homeDirectory: /home/ebal2/ cn: Evaggelos Balaskas loginShell: /bin/bash # shadowAccount # Must Have userPassword: test dn: cn=ebal2,ou=group,dc=mydomain,dc=lan objectClass: top objectClass: posixGroup # Must Have cn: ebal2 gidNumber: 9999 # May Have ## description: This is ebal2 group ## memberUid: 500
και περνάμε τα στοιχεία με την παρακάτω εντολή:
# ldapmodify -a -f users.ldif -D "cn=admin,dc=mydomain,dc=lan" -W Enter LDAP Password: adding new entry "uid=ebal2,ou=user,dc=mydomain,dc=lan" adding new entry "cn=ebal2,ou=group,dc=mydomain,dc=lan"
επιβεβαιώνουμε με την παραπάνω ldapsearch εντολή.
10. nslcd – nss-pam-ldapd
http://arthurdejong.org/nss-pam-ldapd/
Το πρόγραμμα αυτό (nss-pam-ldapd) μας προσφέρει την διασύνδεση μεταξύ του pluggable authentication module (PAM) και του openLDAP. To PAM είναι ένας μηχανισμός για να μεταφέρουμε/υλοποιήσουμε το κομμάτι της αυθεντικοποίησης σε ένα πρόγραμμα (όπως είναι το login,sudo ή το ssh) με το σύστημά μας. Έτσι για να "δει" ένα από τα παραπάνω προγράμματα τους χρήστες που έχουμε υλοποιήσει στον openLDAP χρειάζεται να γίνει μέσα από το nss-pam-ldapd.
To nss-pam-ldapd ενεργοποιεί ένα service, που εκτελείται στο background μας. Το βασικό του αρχείο ρυθμίσεων είναι το /etc/nslcd.conf και χρειάζεται ελάχιστες ρυθμίσεις από εμάς.
# grep -Ev '^$|#' /etc/nslcd.conf uid nslcd gid nslcd uri ldap://127.0.0.1/ base dc=mydomain,dc=lan
Εάν θέλουμε να τρέξει στο προσκήνιο σε debug mode πληκτρολογούμε το παρακάτω:
# /usr/bin/nslcd -d
top
11. Name Service Switch
Χρειάζεται να επεξεργαστούμε το αρχείο: /etc/nsswitch.conf ώστε να δείχνει ως εξής:
passwd: files ldap group: files ldap shadow: files ldap
Με αυτό το τρόπο το σύστημά μας θα γνωρίζει ότι όταν θα χρειαστεί εκτός από τα αρχεία /etc/passwd /etc/group & /etc/shadow να ρωτήσει και τον ldap. Οι ερωτήσεις φυσικά θα γίνουν μέσω του nslcd
12. getent
Με την χρήση του getent (get entries from Name Service Switch libraries) θα επιβεβαιώσουμε ότι υπάρχει επικοινωνία και μπορούμε να μιλήσουμε με τον openLDAP από το σύστημά μας. Για το παράδειγμά μας θα πρέπει να φέρει τα παρακάτω αποτελέσματα:
# getent passwd | grep ebal2 ebal2:x:9999:9999:Evaggelos Balaskas:/home/ebal2/:/bin/bash # getent group | grep ebal2 ebal2:*:9999: # getent shadow | grep ebal2 ebal2:*:::::::0
top
13. PAM
Είμαστε έτοιμοι για να τροποποιήσουμε τα απαραίτητα service pam configuration files για να "συνδέσουμε" τις υπηρεσίες που θέλουμε να μιλάνε με ldap. Κάθε διανομή μπορεί να έχει τις δικές της "ιδιαιτερότητες" μα η βασική αρχή είναι μια. Χρειάζεται να προσθέσουμε τις απαραίτητες ρυθμίσεις ώστε:
a. Να μπορεί να κάνει local login
b. Να μπορεί να αλλάξει το συνθηματικό του
c. Να μπορεί να συνδεθεί μέσω ssh
d. Να μπορεί κάποιος να αλλάξει σε αυτόν τον χρήστη (su)
Η βασική αρχή είναι πριν από κάθε pam_unix.so να προσθέσουμε το
SERVICE sufficient pam_ldap.so
a. /etc/pam.d/login
διαβάζοντας προσεκτικά, θα δούμε ότι κάνει include το system-local-login, το οποίο με την σειρά του καλεί το system-login
Για το συνθηματικό θα δούμε ότι καλεί το system-auth
Οπότε κι αρκεί να επεξεργαστούμε το τελευταίο αρχείο κατάλληλα:
/etc/pam.d/system-auth
auth sufficient pam_ldap.so account sufficient pam_ldap.so password sufficient pam_ldap.so session sufficient pam_ldap.so
b. /etc/pam.d/passwd
password sufficient pam_ldap.so
(δες 14.)
c. /etc/pam.d/sshd
Δεν χρειάζεται να κάνουμε κάτι, γιατί καλεί το system-remote-login που καλεί το system-login που όπως είδαμε και παραπάνω καλεί το system-auth
d.
Πρακτικά πρέπει και τα δύο αρχεία να είναι πανομοιότυπα.
Πριν από κάθε pam_unix.so (auth,account & session) προσθέτουμε τα παρακάτω:
auth sufficient pam_ldap.so account sufficient pam_ldap.so session sufficient pam_ldap.so
1. /etc/pam.d/su-l
[~]> su ebal2 [password: test]
2. /etc/pam.d/su-l
και δοκιμάζουμε ως εξής:
[~]> su - ebal2 [password: test]
14. Αλλαγή συνθηματικού
Για να μπορούμε να αλλάξουμε το συνθηματικό ενός ldap account μέσω της εντολής passwd, θα πρέπει να έχουμε πρόσβαση στο πεδίο userPassword. Το πεδίο αυτό ναι μεν είναι encrypt αλλά δεν σημαίνει ότι θέλουμε να δώσουμε πρόσβαση σε όλους ώστε να μπορούν να το διαβάσουν.
ΠΡΟΣΟΧΗ: ο χρήστης rootDN έχει πρόσβαση σε όλα
έτσι στο αρχείο: /etc/openldap/slapd.conf
πρέπει να προσθέσουμε τα παρακάτω:
access to attrs=userPassword by self write by anonymous auth by * none access to * by self write by * read
και να κάνουμε restart το openldap service.
# systemctl restart slapd.service