Тепер статті може редагувати кожен. Приєднуйтесь до нашої вікі-спільноти!

Розгортання технології LDAP

Матеріал з USIC Wiki
Перейти до: навігація, пошук

Інформація лише для історичної довідки


Зміст

[ред.] Проблеми приватного робочого середовища користувача, домашня папка

Працюючи в місцях надання "громадського доступу в Інтернет", люди часто відчувають потребу щось зберегти для подальшого користування. Але, на жаль, під рукою не завжди є носії інформації. Також виникає бажання мати "власний острів" у величезних просторах Всесвітньої мережі (допоможіть написати вступ, бо з мене жахливий письменник). Коротше кажучи, постає завдання: надати користувачам власний дисковий простір, тобто домашню папку та забезпечити нормальне її використання. У разі наявності домашньої папки користувач зможе зберігати там необхідну інформацію, зокрема запам'ятовувати паролі та встановлювати власні налаштування.

Як же вирішити цю проблему, якщо користувачів уже більше тисячі, а комп'ютерів лише 47 (чи скільки там - треба глянути)?

По-перше, необхідно десь зберігати інформацію про користуівачів (як мінімум, їх логіни та паролі). Причому так, щоб цю інформацію могла легко та швидко отримати будь-яка робоча станція. На допомогу приходить LDAP (Lightweight Directory Access Protocol). Інформацією щодо його виникнення та особливостей вантажити не буду, кому цікаво - є посилання у відповідному розділі.

LDAP підійшов нам завдяки своїй легкості та гнучкості. Він природно інтегрується в більшість необхідних сервісів, і користувачі не помічають, що вони працюють не з тією робочою станцією, за якою вони сидять, а з сервером директорії.

[ред.] Програмне забезпечення, що реалізує протокол LDAP і використовується в USIC

Сервер директорій працює під керуванням Fedora Core 4 (треба його якось оновити). У ролі сервера використовується slapd з пакету OpenLDAP. На клієнтах теж є OpenLDAP.

[ред.] Домашні папки

Друга проблема, яка постала перед нами - розміщення домашніх папок користувачів. Знову ж таки, комп'ютерів набагато менше за користувачів, тому було вирішено розподілити дисковий простір таким чином: кожному юзеру відводиться 500 Мб місця на жорсткому диску. На кожній робочій станції під юзерські папки відведено 30 Гб, отже, можна забезпечити "домівками" приблизно 2800 користувачів. Щоб не прив'язувати юзерів до тих комп'ютерів, на яких розташовані їх папки (це було б страшно незручно), ми організували приєднання цих папок за допомогою NFS.

Докладніше про NFS у USIC.

[ред.] Реєстрація користувачів

Раніше реєстрація користувачів та зміна інформації про них відбувалася через bash-скрипти (автори: Артем Пилипчук та Ростислав Голда). Це було справжнім проривом, оскільки до впровадження аутентифікації за допомогою LDAP користувачі заходили на робочі станції під логіном guest, цей аккаунт був створений локально на кожному комп'ютері. Ні про який особистий простір не йшлося. Але все таки було багато простору для вдосконалення. Оператор мав уважно вводити дані, слідкуючи за їх коректністю. Якщо відбувалася якась помилка, то доводилося починати все спочатку. Крім того, реєстрація складалася з двох частин: занесення даних до LDAP-директорії та створення домашньої папки на одній з робочих станцій. Якщо одна з цих операцій завершалася невдачею, виникали проблеми.

Тому навесні 2007 року Микола Найчук розпочав роботу над веб-інтерфейсом реєстрації, який став частиною UMS (USIC Management System). Стало набагато зручніше додавати та видаляти користувачів, шукати та редагувати інформацію про них. Система постійно оновлюється, виправляються помилки та додаються нові функції.

[ред.] Полегшений доступ та робота користувачів центру

Отже, проблему з реєстрацією користувачів та надання їм дискового простору вирішено. Тепер треба забезпечити їм можливість заходити (логінитися) в операційну систему на робочих станціях.

Перш за все треба повідомити системні служби, що для авторизації та аутентифікації користувачів використовується LDAP. Це робиться за допомогою редагування конфігураційних файлів.

File: /etc/pam.d/system-auth

auth       [success=1 default=ignore]   pam_ldap.so use_first_pass
account    [success=done default=ignore]        pam_ldap.so
password   sufficient   pam_ldap.so use_authtok
session    optional     pam_ldap.so
session    required     pam_sessionrun.so use_authtok 
start=/etc/scripts/login stop=/etc/scripts/logout optional_pass

File: /etc/nsswitch.conf

 passwd: files ldap
 shadow: files ldap
 group: files ldap

File: /etc/openldap/ldap.conf

 host 172.16.200.3
 base dc=usic,dc=lan

Потім необхідно забезпечити монтування домашньої папки користувача на робочу станцію, з якою він працює. Це відбувається у скрипті login-script, який викликається від імені root'а з програми login, яка, в свою чергу, викликається системою PAM після успішної аутентифікації. Операції супроводжуються детальним записом до системного журналу (syslog).

 #!/bin/bash
 # Login script based on local-login adapted for use in pam-sessionrun PAM module
 # (c) Elf-Eluna-Alina & local-login authors
 # 9.09.2007 - added 'ADDING FLASH ICONS' part
 #define Jaris Elf-Eluna-Alina
 # for localusers always success
 if [ `id -u $USER` -eq 999 ]; then
    mkdir /home/usic
    chown usic /home/usic
 fi
 if [ `id -u $USER` -le 1000 ]; then
    exit 0
 fi
 # determining some variables
 HOMEHOST=$(ldapsearch -x "uid=$USER" | grep homedirhost | sed s/homedirhost:\ //)
 export HOME=/home/$USER
 logger -p auth.info -t usic-login "Beginning login procedure for $USER, home host  $HOMEHOST"
 mount | grep -q $HOME
 if [ $? -eq 0 ]; then
    logger -p auth.notice -t usic-login "Directory $HOME already mounted,
                                      skipping mount  operation"
 else
 #    mkdir $HOME 2> /dev/null
    if [ -d $HOME ]; then
        logger -p auth.warn -t usic-login "Directory $HOME already exists, 
                                      overmounting it"
    else mkdir $HOME 2> /dev/null
        chown $USER $HOME 2> /dev/null
    fi
    mount -t nfs $HOMEHOST:/usichome/$USER $HOME -o soft,timeo=10 2> /dev/null
    if [ $? -ne 0 ]; then
        logger -p auth.crit -t usic-login "Directory $HOME on $HOMEHOST mounting failed.                  
                                        Using temporary folder";
    else
        logger -p auth.info -t usic-login "$HOME successfully mounted"
    fi
 fi
 # Regenerating Flash icons in case some dumb user deleted them or 
                they somehow failed to be created (c) Jaris
 if [ ! -d $HOME/Desktop ]; then
    mkdir $HOME/Desktop
    chown $USER:users $HOME/Desktop
 fi
 for i in $(cd /etc/scripts/flash_icons; ls); do
    if [ ! -e $HOME/Desktop/$i ]; then
        cp /etc/scripts/flash_icons/$i $HOME/Desktop/
        chown $USER:users $HOME/Desktop/$i
    fi
 done

Аналогічним чином після виходу (логауту) користувача виконується скрипт, який відмонтовує його домашню папку.

 #!/bin/bash
 # Login script based on local-login adapted for use in pam-sessionrun PAM module
 # (c) Elf-Eluna-Alina & local-login authors
 # for localusers always success
 if [ `id -u $USER` -le 1000 ]; then
    exit 0
 fi
 # finding whether we are the last instance ever
 # TODO: 1 or 0?
 # TODO: locks for simultaneous logouts
 LEFT=`w -s | cut -d" " -f1 | grep $USER | wc -l`
 # if [ $LEFT -eq 1 ] || [ $LEFT -eq 0 ]; then // WTF WHAT THE HELL? ElfElunaAlina
 if [ $LEFT -eq 0 ]; then
    umount /home/$USER -l 2> /dev/null
    if [ $? -ne 0 ]; then
        logger -p auth.crit -t usic-logout "/home/$USER failed to umount"
        exit 1
    else
        logger -p auth.info -t usic-logout "$USER logged out, home directory umounted"
    fi
    rmdir /home/$USER 2> /dev/null
    if [ $? -ne 0 ]; then
       logger -p auth.info -t usic-logout "Couldn't remove directory /home/$USER"
    else logger -p auth.info -t usic-logout "Directory /home/$USER removed"
    fi
 else
    logger -p auth.info -t usic-logout "$USER logout registered,
                               but the user was not  the last one"
 fi

Також є ряд допоміжних скриптів (наприклад, створення, видалення та переміщення папок користувачів, копіювання на робочий стіл значків пристроїв змінних носіїв тощо), які безпосередньо з LDAP не працюють.

[ред.] Посилання

Особисті інструменти
Простори назв
Варіанти
Дії
Навігація
Інструменти