Авторизация Ubuntu клиентов на Calculate Directory Server

Для авторизации на сервере Calculate Linux Desktop клиенты используют протокол LDAP. В среде Unix это очень популярный протокол, поэтому добавить поддержку авторизации с любого Linux дистрибутива не составит труда. В примере я описал авторизацию Ubuntu клиентов.

Установим необходимые пакеты libpam-ldap и libnss-ldap:

sudo apt-get install libpam-ldap
sudo apt-get install libnss-ldap

При первой установке программа выводит диалог настройки. Нажимаем enter на все вопросы.

Создадим копии конфигурационных файлов:

cp /etc/ldap.conf /etc/ldap.conf.backup
cp /etc/nsswitch.conf /etc/nsswitch.conf.backup

Редактируем файл /etc/ldap.conf. Его содержимое должно быть следующим:

host ip_адрес_ldap_сервера_или_его_dns_имя
base ou=Services,dc=calculate
rootbinddn ou=Unix,ou=Services,dc=calculate
binddn cn=proxyuser,dc=calculate
bindpw calculate
port 389
ldap_version 3
bind_policy soft
nss_base_passwd ou=Users,ou=Unix,ou=Services,dc=calculate?one?shadowFlag=1
nss_base_shadow ou=Users,ou=Unix,ou=Services,dc=calculate?one?shadowFlag=1
nss_base_group  ou=Groups,ou=Unix,ou=Services,dc=calculate?one
nss_base_group  ou=Groups,ou=Samba,ou=Services,dc=calculate?one
pam_password md5

Если на вашем CDS не настроен Samba сервис, то необходимо удалить строку:

nss_base_group  ou=Groups,ou=Samba,ou=Services,dc=calculate?one

Редактируем файл /etc/nsswitch.conf, приведя его к следующему виду:

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

hosts:       files dns
networks:    files dns

services:    files ldap
protocols:   files ldap
rpc:         db files
ethers:      db files
netmasks:    files
netgroup:    files ldap
bootparams:  files

automount:   files ldap
aliases:     files

Редактируем файл /etc/pam.d/common-session. До редактирования в этом файле есть такие строки:

session required        pam_unix.so
session optional        pam_ldap.so

После редактирования должно быть так:

session required        pam_unix.so
session required        pam_mkhomedir.so skel=/etc/skel/
session optional        pam_ldap.so

Проверяем существование LDAP пользователя:

id имя_пользователя_ldap

Если пользователь есть перезагружаем компьютер.

Почему именно proxyuser?

binddn cn=proxyuser,dc=calculate

cn=proxyuser,dc=calculate - пользователь для просмотра дерева ldap, с ограниченными правами

Хм . не выходит каменный цветок . пробую на последнем LTC

Уже целый парк 10.04 убунт работает по этой инструкции без проблем, а вот на 12.04 системе ни в какую не работает описанный способ.

Команда id выдаёт ответ:

id: pupkin: Такого пользователя нет

Есть соображения почему?

ЗЫЖ если кому нужно скрипт по сабжу, вот он, работает на 10.04.

#!/bin/bash
aptitude install libpam-ldap libnss-ldap -y
cp /etc/ldap.conf /etc/ldap.conf.backup
cp /etc/nsswitch.conf /etc/nsswitch.conf.backup

echo "host $1
base ou=Services,dc=calculate
rootbinddn ou=Unix,ou=Services,dc=calculate
binddn cn=proxyuser,dc=calculate
bindpw $2
port $3
ldap_version 3
bind_policy soft
nss_base_passwd ou=Users,ou=Unix,ou=Services,dc=calculate?one?shadowFlag=1
nss_base_shadow ou=Users,ou=Unix,ou=Services,dc=calculate?one?shadowFlag=1
nss_base_group ou=Groups,ou=Unix,ou=Services,dc=calculate?one
nss_base_group ou=Groups,ou=Samba,ou=Services,dc=calculate?one
pam_password md5" > /etc/ldap.conf

echo "passwd:      files ldap
shadow:      files ldap
group:       files ldap

hosts:       files dns
networks:    files dns

services:    files ldap
protocols:   files ldap
rpc:         db files
ethers:      db files
netmasks:    files
netgroup:    files ldap
bootparams:  files

automount:   files ldap
aliases:     files" > /etc/nsswitch.conf

echo "session required        pam_unix.so
session required        pam_mkhomedir.so skel=/etc/skel/
session optional        pam_ldap.so" > /etc/pam.d/common-session

echo "Проверяется пользователь $4:"
id $4
echo "----------------------------"

Пользоваться так:

chmod a+x go.sh
./go.sh 192.168.1.10 calculate 389 pupkin

$1 - адрес LDAP сервера
$2 - пароль пользователя proxyuser (на чтение схемы LDAP)
$3 - порт LDAP сервера
$4 - пользователь для проверки

В общем после долгих и упорных мучений это чудо заработало. Вот скрипт. Просто положить текст в файл и выполнить на чистой системе и Ubuntu 12.04 начнет работать в домене CDS.

#!/bin/bash
if test -z "$1"
then
  clear
  echo "--------------------------------------------------------------------------"
  echo " Sorry. Three parameters required. Try run as:"
  echo ""
  echo " $0 ldap-server-address proxyuser-password username-for-check "
  echo ""
  echo " Example:"
  echo ""
  echo " $0 192.168.1.1 qwerty pupkin "
  echo "--------------------------------------------------------------------------"
exit 0
fi

apt-get install libnss-ldap -y

cp /etc/ldap.conf /etc/ldap.conf.backup
cp /etc/nsswitch.conf /etc/nsswitch.conf.backup

echo "
base ou=Services,dc=calculate
binddn cn=proxyuser,dc=calculate
bindpw $2
port 389
ldap_version 3
bind_policy soft
nss_base_passwd ou=Users,ou=Unix,ou=Services,dc=calculate?one?shadowFlag=1
nss_base_shadow ou=Users,ou=Unix,ou=Services,dc=calculate?one?shadowFlag=1
nss_base_group ou=Groups,ou=Unix,ou=Services,dc=calculate?one
pam_password md5
uri ldap://$1
nss_initgroups_ignoreusers avahi,avahi-nss_initgroups_ignoreusers avahi,avahi-autoipd,backup,bin,colord,daemon,games,gnats,hplip,irc,kernoops,libuuid,lightdm,list,lp,mail,man,messagebus,news,nslcd,nx,openldap,proxy,pulse,root,rtkit,saned,speech-dispatcher,sshd,sync,sys,syslog,usbmux,usr1cv8,uucp,whoopsie,www-data
" > /etc/ldap.conf

echo "
passwd: files ldap
shadow: files ldap
group: files ldap

hosts:       files dns
networks:    files dns

services:    files ldap
protocols:   files ldap
rpc:         db files
ethers:      db files
netmasks:    files

netgroup: nis
bootparams:  files

automount:   files ldap
aliases:     files

session required        pam_unix.so
session required        pam_mkhomedir.so skel=/etc/skel/
session optional        pam_ldap.so
" > /etc/nsswitch.conf

echo "session required pam_mkhomedir.so skel=/etc/skel/" >> /etc/pam.d/common-session

echo "Check the LDAP-user $3:"
id $3
echo "----------------------------"

Авторизация в домене работает.
Как теперь сделать ,чтобы при логине доменного юзера автоматом маунтился его home с сервера

pam_mount

http://manpages.ubuntu.com/manpages/vivid/man8/pam_mount.8.html

Владимир Слугин писал(а):

pam_mount

http://manpages.ubuntu.com/manpages/vivid/man8/pam_mount.8.html

сделал так, возможно не совсем корректно

на тазике с ubuntu:

для автомонтирования

 # aptitude install libpam-mount
 # vi  /etc/security/pam_mount.conf.xml

 <!-- Volume definitions -->
<volume user="*" fstype="cifs" server="ip_server" path="unix/CLDM" mountpoint="/home/%(DOMAIN_USER)" options="sec=ntlm,nodev,nosuid" />
<volume user="*" fstype="cifs" server="ip_server" path="share" mountpoint="/home/%(DOMAIN_USER)/Share" options="sec=ntlm,nodev,nosuid" />
<volume user="*" fstype="cifs" server="ip_server" path="homes" mountpoint="/home/%(DOMAIN_USER)/Home" options="sec=ntlm,nodev,nosuid" />

для размонтирования

 # cat /etc/lightdm/lightdm.conf

[SeatDefaults]
greeter-session=unity-greeter
user-session=ubuntu
session-cleanup-script=/root/umount_share.sh
greeter-show-manual-login=true

 # cat /root/umount_share.sh

#!/bin/bash
NEW_DATE=`date +"%F %T"`
sed -i "s/^date.*/date_logout = ${NEW_DATE}/" /home/$USER/.calculate/desktop.env
umount -l /home/$USER/.gvfs
umount -l /home/$USER
exit 0

Я делал так, раз в pam_mount уже 8 лет не могут починить автоотмонтирование

sudo aptitude search libpam-script
cat /usr/share/libpam-script/pam_script_ses_close

#!/bin/bash
 # для всех точек монтирования внутри /home/имя_отлогинивающегося_пользователя/
 # , перечисленных как параметр цикла i
for i in "Документы" "Рабочий стол" "Общие документы"
do
     # выясняем примонтировано ли чего в эту точку монтирования
    yes_is_set=$(mount | grep "/home/$PAM_USER/$i" | wc -l)
     # и, если примонтировано, то отмонтируем
     # в файле /etc/sudoers для выполнения umount из-под sudo
     # должны быть строки:
     # %PEOPLES ALL=NOPASSWD: /bin/umount
     # %DEPT    ALL=NOPASSWD: /bin/umount
     # не очень, конечно, хорошо давать целым двум группам права запускать
     # umount из-под sudo, но с другой стороны это не сильно страшно...
    [ $yes_is_set -gt 0 ] && sudo umount /home/$PAM_USER/"$i"
done