LINUX.ORG.RU
ФорумAdmin

ldap - userPassword поменять значение на уже зашифрованное.


0

0

Есть 2 лдап каталога c разной структурой и файлик smbpasswd.

Есть некоторое количество юзеров, которым нужно создать учетки в новом лдап каталоге, и перенести их данные: ФИО, отдел... и пароли. Пароли - соответственно для pam (squid,ssh...) и smb авторизации.

С паролями косяк, поле userPassword при записи в него воспринимает текст, который туда хотят записать как plaintxt, и на всякий случай шифрует его. Но у меня пароли уже зашифрованы - в старом лдапе. ФИО и пароли из smbpasswd - все переносится нормально.

Изменять userPassword пробовал так:

ldapsearch -w .... -D "cn=manager,..." -h ... -b "dc=vip-driver,dc=ru" "(uid=$user)" > /tmp/ldap.txt
...skip...
userPassword=`cat /tmp/ldap.txt | grep userPassword | awk -F ": " {'print $2'}`
...skip...
echo replace: userPassword >> $ldif
echo userPassword: $userPassword >> $ldif
echo - >> $ldif

ldapmodify -c -f $ldif -w $ldap_pw -x -D $ldap_dn
и так перлом:
use Net::LDAP;
use Net::LDAP::Entry;

$ldap = Net::LDAP->new('127.0.0.1') or die "$@";
$mesg = $ldap->bind( 'cn=ldapadmin,dc=calculate', password => '...' );
$entry = Net::LDAP::Entry->new;

$mesg = $ldap->search( base => "ou=Users,ou=Samba,ou=Services,dc=calculate", filter => "uid=$user" );
$entry = $mesg->entry($index);

$entry->replace (
userPassword => '$pwd_hash'
);
$entry->update ( $ldap );

Вопрос знатокам: как внести в userPassword _уже_ зашифрованное значение?

Единственный способ который, как мне кажется, поможет - это slapcat + slapadd, но он мне не нравится тем, что придется ldiff редактировать вручную.

>но он мне не нравится тем, что придется ldiff редактировать вручную.
шаблоны? зачем вручную?

dimon555 ★★★★★ ()
Ответ на: комментарий от dimon555

Шаблоны - можно, grep+sed справятся. Но мне кажется что это все таки изобретение велосипеда.

Еще перед slapadd нужно погасить принимающий лдап каталог и очистить его базу. Потом соответственно запустить. Вариант годится для одноразового переноса, но боюсь у меня некоторое время всетаки будут использоваться оба лдапа параллельно - нужно будет перенастроить софт на боевом сервере. К тому же есть еще 11 зеркал лдап каталога - на удаленных территориях, и софт который привязан к ним...

Если не найду более изящного решения - применю slapadd, а пока воздержусь. Понадеюсь на мудрость всезнающего ALL.

hellstad ()

man slappasswd

Я сам скрипт создавал, который пароли генерировал и шифровал их этой программой с последующим импортом в LDAP.

Noldor ()
Ответ на: комментарий от Noldor

slappasswd если мне не изменяют глаза и man только делает из пасса хеш. У меня все пароли уже успешно зашифрованы, более того - я их не знаю.

hellstad ()

Поковырялся и нашел сам.

Поковырялся и нашел сам.

В лдап каталоге многие поля - включая поля userPassword хранятся в base64. Тип хеша пароля указывается перед паролем {SSHA}/{SHA}/{MD5}. Итого:


echo replace: userPassword >> $ldif 
echo userPassword:: {MD5}$userPasswordMD5HashInBase64 >> $ldif 
echo - >> $ldif 

ldapmodify -c -f $ldif -w $ldap_pw -x -D $ldap_dn 

"::" после userPassword означает, что значение поля уже кодировано base64, если указать ":" - текстовое значение, которое подвергнется кодированию.

То, что поле автоматически шифруется - я ошибался. Оно только кодируется в base64.

hellstad ()
Ответ на: Поковырялся и нашел сам. от hellstad

Slappasswd is used to generate an userPassword value suitable for use with ldapmodify(1) or slapd.conf(5) rootpw configuration directive.
...
{CLEARTEXT} indicates that the new password should be added to userPassword as clear text.

zgen ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.