воскресенье, 8 февраля 2015 г.

Смена пароля на сервере с Fat-client.

Исходные данные: 
Xubuntu 14.04 (32-LTSP-client и сервер 64 разряда).

Дано: LTSP-Сервер к которому подключено примерно 150 бездисковых станций по принципу fat-client. Нужно сделать смену пароля (входного и samba) удобным для пользователей способом (без терминального захода на сервер, им это не поднять).

Просматривается два варианта - через apache на сервере и посредством чего-то самописного и совсем не сложного. В обоих случаях удобно использовать smbpasswd (локально или с ключиком -r). Для смены входного пароля нужно в smb.conf иметь такой кусочек:


# For Unix password sync to work on a Debian GNU/Linux system, the following
# parameters must be set (thanks to Ian Kahan <<kahan@informatik.tu-muenchen.de>
# sending the correct chat script for the passwd program in Debian Sarge).      
   passwd program = /usr/bin/passwd %u                                          
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\
                                                                                
# This boolean controls whether PAM will be used for password changes           
# when requested by an SMB client instead of the program listed in              
# 'passwd program'. The default is 'no'.                                        
   pam password change = no                                                             
В результате smbpasswd будет заодно менять и входной пароль.

Относительно работы через apache и php можно посмотреть примеры:
Change Linux or UNIX system password using PHP script
ROUNDCUBE
Gentoo forum
horde-groupware
Какого-то совсем-совсем готового рецепта там нет. Ну и из пушки по воробьям... Скорее всего это как вариант для более глобальной системы на будущее.

Вариант альтернативный - скрипт на zenity. Вот что получилось:
#! /bin/bash
# Assigments

if [ -z $SERVER ] ; then
   SERVER=10.0.0.3
fi

###########################

FORM=`zenity --forms --title="Смена пароля" \
    --text="Все поля обязательны." \
    --separator="|" \
    --add-password="Старый пароль" \
    --add-password="Новый пароль (не менее 6 символов)" \
    --add-password="Еще раз новый пароль"`

case $? in
    0)
        OLDPW=`echo $FORM | cut -d '|' -f1`
        NEWPW=`echo $FORM | cut -d '|' -f2`
        NEWPW2=`echo $FORM | cut -d '|' -f3`
        if [ ! $NEWPW == $NEWPW2 ] ; then 
          zenity --error --text="Новые пароли не совпадают. Изменения не внесены."
          exit 1
        fi
        echo -ne "$OLDPW\n$NEWPW\n$NEWPW\n" |  smbpasswd -r $SERVER -s
        case $? in
             0)
                zenity --info --text="Пароль успешно изменен."
             ;;
             1)
                zenity --error --text="Попытка не удачна (не верный пароль?) Изменения не внесены. Самая частая ошибка - ввод пароля на русском языке... "
             ;;
             -1)
                zenity --error --text="Внутреняя ошибка 002. Изменения не внесены."
            esac

    ;;

    1)
        zenity --info --text="До свидания."
    ;;
    -1)
       zenity --error --text="Внутреняя ошибка 001. Изменения не внесены."
    ;;
esac

 Положили его в /usr/local/bin/npwd.bash (на самом деле /opt/ltsp/i386/usr/local/bin/npwd.bash) и для запуска создаем элемент меню:
[Desktop Entry]
Version=1.0
Type=Application
Name=Смена пароля
Comment=Смена пароля на сервере
Icon=access
Exec=/usr/local/bin/npwd.bash
Path=/tmp
NoDisplay=false
Categories=Other;menulibre-прочее;
StartupNotify=false
Terminal=false
Обзываем его npwd.desktop и раскладываем каждому юзеру в .local/share/application. Выглядит оное произведение вот так...

Исправления.

Добавлено через пару дней...
Смена пароля работает при наличии в smb.conf строчки
pam password change = no 
Иначе этим будет заниматься pam, а там все куда сложнее...

Комментариев нет:

Отправить комментарий