The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"unix password sync - что не так?"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Samba, вопросы интеграции Unix и Windows (Public)
Изначальное сообщение [Проследить за развитием треда]

"unix password sync - что не так?" 
Сообщение от XAnder Искать по авторуВ закладки(??) on 12-Июл-05, 16:08  (MSK)
Совсем уже мозг сломал - не знаю, почему так получается:

FreeBSD 5.3, Samba 3.0.14a из портов.

Пытаюсь настроить синхронизацию паролей Самбы и системы. Цель - при изменении пароля в Самбе он должен меняться на такой же и в системе. Вроде всё просто. Пытаюсь использовать unix password sync. Вот smb.conf:

[global]
workgroup = WORKGROUP
netbios name = NEWSRV
security = user
dos charset = CP866
unix charset = KOI8-R
display charset = KOI8-R
encrypt passwords = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *New*Password* %n\n *Retype*New*Password* %n\n

Меняю пароль с помощью smbpasswd user. На Самбе всё прекрасно меняется. В системе нет - логин на консоль и т.п. проходит со старым паролем. Хотя в доках сказано, что если системный пароль не удаётся изменить, то и на Самбе он не сменится. Что не так?

Пытался ставить passwd chat debug = yes и log level = 100, но отладочной информации на эту тему нигде не получил, хотя она должна быть в smbd.log.

В общем так вот... Подскажите, что делать, плз.

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "unix password sync - что не так?" 
Сообщение от Sergey emailИскать по авторуВ закладки(??) on 12-Июл-05, 16:32  (MSK)
>Вроде всё просто. Пытаюсь использовать unix password sync. Вот smb.conf:
>
>[global]
>workgroup = WORKGROUP
>netbios name = NEWSRV
>security = user
>dos charset = CP866
>unix charset = KOI8-R
>display charset = KOI8-R
>encrypt passwords = yes
>unix password sync = yes
>passwd program = /usr/bin/passwd %u
>passwd chat = *New*Password* %n\n *Retype*New*Password* %n\n
>
>Меняю пароль с помощью smbpasswd user. На Самбе всё прекрасно меняется.
насколько я понял в самбе ведеться своя БД юзерей? и она не синкаеться с системной?
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "unix password sync - что не так?" 
Сообщение от XAnder Искать по авторуВ закладки(??) on 12-Июл-05, 17:32  (MSK)
>насколько я понял в самбе ведеться своя БД юзерей? и она не
>синкаеться с системной?

Совершенно верно. Разные там алгоритмы шифрования паролей, поэтому и приходится держать две базы. А чтобы хоть как-то упростить жизнь админам, есть синхронизация, которая, по идее, включается параметром "unix password sync" и управляется с помощью параметров "passwd program" и "passwd chat". Идея проста как пареная репа, но у меня почему-то этот способ не работает. Вот и пытаюсь найти решение этой проблемы. Пока безуспешно.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "unix password sync - что не так?" 
Сообщение от XAnder Искать по авторуВ закладки(??) on 14-Июл-05, 17:45  (MSK)
>Совсем уже мозг сломал - не знаю, почему так получается:
>
>FreeBSD 5.3, Samba 3.0.14a из портов.
>
>Пытаюсь настроить синхронизацию паролей Самбы и системы. Цель - при изменении пароля
>в Самбе он должен меняться на такой же и в системе.
>Вроде всё просто. Пытаюсь использовать unix password sync. Вот smb.conf:
>
>[global]
>workgroup = WORKGROUP
>netbios name = NEWSRV
>security = user
>dos charset = CP866
>unix charset = KOI8-R
>display charset = KOI8-R
>encrypt passwords = yes
>unix password sync = yes
>passwd program = /usr/bin/passwd %u
>passwd chat = *New*Password* %n\n *Retype*New*Password* %n\n
>
>Меняю пароль с помощью smbpasswd user. На Самбе всё прекрасно меняется. В
>системе нет - логин на консоль и т.п. проходит со старым
>паролем. Хотя в доках сказано, что если системный пароль не удаётся
>изменить, то и на Самбе он не сменится. Что не так?
>
>
>Пытался ставить passwd chat debug = yes и log level = 100,
>но отладочной информации на эту тему нигде не получил, хотя она
>должна быть в smbd.log.
>
>В общем так вот... Подскажите, что делать, плз.


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "unix password sync - что не так?" 
Сообщение от XAnder Искать по авторуВ закладки(??) on 14-Июл-05, 17:58  (MSK)
Извиняюсь за предыдущий пост - протормозил.

Вот что выяснил: когда запускаешь smbpasswd от root'а обращения к smbd не происходит, вместо этого файл с самбовской базой паролей правится напрямую. Естественно никакая синхронизация паролей при этом не срабатывает.

Значит пошла попытка номер два. Запускаю smbpasswd от user'а:

% smbpasswd
Old SMB password:
New SMB password:
Retype new SMB password:
machine 127.0.0.1 rejected the password change: Error was : RAP86: The specified password is invalid.
Failed to change password for user

Заметьте, "Old SMB password" ввожу правильный. При этом в логах видно следующее:

# cat /var/log/samba/log.smbd | grep chat
[2005/07/14 17:00:17, 3] smbd/chgpasswd.c:chat_with_program(347)
  chat_with_program: Cannot Allocate pty for password change: user

И как это понимать? Знающие люди, откликнитесь, пожалуйста.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "нашёл причину..." 
Сообщение от XAnder Искать по авторуВ закладки(??) on 18-Июл-05, 13:04  (MSK)
...а как лечить, пока не знаю...

Поковырявшись в исходниках Самбы, обнаружил, что за диалог с внешней программой отвечает функция chat_with_program, что в файле smbd/chgpasswd.c. Она в свою очередь вызывает функцию findpty из того же файла, которая пытается "allocate a pseudo-terminal device", то есть застолбить файл устройства /dev/ptyXX.

Делает она это довольно кособоким образом - перебирает все подобные устройства, и выбирает первое свободное. Ясное дело, что при использовании devfs (FreeBSD 5.3) такой способ не катит - в каталоге /dev устройств на все случаи в жизни нет, а создаются они как-то по требованию. Самба ничего не требует и, соответственно, ничего и не получает.

Итог - Самба и devfs несовместимы. Такой вот удар от классика...

Однако проблему синхронизации паролей нужно как-то решать. Сам я в программировании под unix не то чтобы полный ноль, но очень близко к этому. Поэтому обращаюсь к знатокам - посмотрите, кому не лень, указанные выше места в исходниках, что там можно подкрутить? Заранее благодарен.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "типа решение проблемы" 
Сообщение от XAnder Искать по авторуВ закладки(??) on 18-Июл-05, 19:53  (MSK)
Изрядно почесав репу и вспомнив полученные когда-то навыки программирования я взялся-таки за исправление этого глюка. Итак, излагаю ход решения задачи.

1. Правка исходников и пересборка Самбы:

cd /usr/ports/net/samba3
make clean extract patch
cd work/samba-3.0.14a/source/smbd  # может быть и другая версия
vi chgpasswd.c  # или ваш любимый редактор

- ищем функцию findpty,
- в ней дорисовываем локальную переменную "int i;",
- весь кусок кода, начинающийся со строки "fstrcpy(line, "/dev/ptyXX");" и заканчивающийся "closedir(dirp);" включительно, берём в комментарии или удаляем,
- вместо него пишем следующее:

fstrcpy(line, "/dev/ptypX");
for (i = 0; i < 32; i++)
{
if (i > 9) line[9] = 'a' + i - 10; else line[9] = '0' + i;
DEBUG(3, ("findpty: try to open %s\n", line));
if ((master = sys_open(line, O_RDWR, 0)) >= 0)
{
DEBUG(3, ("findpty: opened %s\n", line));
line[5] = 't';
*slave = line;
return (master);
}
}

- сохраняем, выходим.

cd ../../../..
make build deinstall reinstall clean

2. Дальше встаёт ещё проблема, связанная с тем, что штатная FreeBSD'шная программа passwd не сообщает об успешном своём завершении, а Samba этого ждёт.

Решение этой проблемы описано здесь:

http://www.freebsd.org/cgi/query-pr.cgi?pr=76494

cd /usr/src/usr.bin/passwd
vi passwd.c

правим, добавляя после метки "end:" строку

if (pam_err == PAM_SUCCESS) fprintf(stderr, "Password Changed\n");

make install clean

3. Правка smb.conf:

unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = "*New*Password*" "%n\n" "*Retype*New*Password*" "%n\n" "*Password*Changed*"

4. Запуск Самбы, проверка:

от рута:

# /usr/local/etc/rc.d/samba start

от пользователя:

% smbpasswd
Old SMB password:
New SMB password:
Retype new SMB password:
Password changed for user <имя>

Если всё так, то отлично, если нет, пишите - поглядим вместе.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру