Исходные данные:
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 scriptROUNDCUBE
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, а там все куда сложнее...
Комментариев нет:
Отправить комментарий