Автор Тема: [Решено] Корректировка пользователей на основании файла  (Прочитано 27600 раз)

Оффлайн ApB

  • Завсегдатай
  • *
  • Сообщений: 412
Приветствую!
Есть файл, содержащий данные в виде:
логин,фамилия,имя,отчество,телефон1,телефон2,помещение,должность

Как посредством samba-tool возможно находя совпадения по первому значению строки (до запятой) заполнить остальные данные пользователя?
« Последнее редактирование: 25.04.2019 12:28:36 от ApB »

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Построчное чтение файла (while), разбиение строки по маркеру (cut, sed и etc), проверка через samba-tool на наличие уже такого пользователя в системе, на основе последнего результата делать выводы - обновлять данные о пользователе или нет.
Сноси Винду, переходи на Линукс ! :)

Оффлайн ApB

  • Завсегдатай
  • *
  • Сообщений: 412
samba-tool user edit {username}он позволяет редактировать только "карточку учётной записи"
а как передать конкретный параметр типа
mail: user@domain.znпо man samba-tool не удалось найти параметров

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Можно так https://forum.altlinux.org/index.php?topic=41733.msg330422#msg330422

dn: CN=petrov,CN=Users,DC=domain,DC=zn
changetype: modify
replace: mail
mail: petrov@domain.zn
-
replace: sn
sn: фамилия
-
replace: givenName
givenName: имя

Затем такой файл скормить:
ldbmodify -H /var/lib/samba/private/sam.ldb modify.ldif
Название полей sn, cn, givenName и etc лучше уточнить. Можно глянуть через ldbedit правильный набор у существующих пользователей.
Сноси Винду, переходи на Линукс ! :)

Оффлайн ApB

  • Завсегдатай
  • *
  • Сообщений: 412
Название полей sn, cn, givenName и etc лучше уточнить.

Спасибо за ответ.

Я правильно понимаю, что в следствии того, что sn имеет кирилличиское написание, необходимо его преобразовывать в base64 (открытый в vi ldif файл не имеет читаемых русских символов)?

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Я правильно понимаю, что в следствии того, что sn имеет кирилличиское написание, необходимо его преобразовывать в base64 (открытый в vi ldif файл не имеет читаемых русских символов)?
Возможно, я уже не помню.
« Последнее редактирование: 11.04.2019 12:12:06 от berkut_174 »
Сноси Винду, переходи на Линукс ! :)

Оффлайн ApB

  • Завсегдатай
  • *
  • Сообщений: 412
Вот пример, вывод samba-tool user edit familia.io:

dn: CN=familija.io,CN=Users,DC=domain,DC=zn
cn: familija.io
instanceType: 4
whenCreated: 20190214095753.0Z
uSNCreated: 7279
name: familija.io
objectGUID: c5154860-43fb-4fb3-a64d-60347ce79e0d
badPwdCount: 0
codePage: 0
badPasswordTime: 0
primaryGroupID: 513
objectSid: S-1-5-21-1998429667-3243626105-1001387784-11006
sAMAccountName: familija.io
sAMAccountType: 805306368
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=domain,DC=zn
pwdLastSet: 137919572470000000
displayName:: 0KTQsNC80LjQu9C40Y8g0JjQvNGPINCe0YLRh9C10YHRgtCy0L4K
accountExpires: 137919572470000000
lastLogoff: 137919572470000000
logonHours:: ////////////////////////////
userAccountControl: 512
uidNumber: 5003
objectClass: top
objectClass: posixAccount
objectClass: person
objectClass: organizationalPerson
objectClass: user
unixHomeDirectory: /home/familija.io
loginShell: /bin/bash
gidNumber: 5055
msSFU30NisDomain: domain
lastLogonTimestamp: 131988345164805650
memberOf: CN=2104,CN=Users,DC=domain,DC=zn
memberOf: CN=Cons_plus,CN=Users,DC=domain,DC=zn
memberOf: CN=2gis,CN=Users,DC=domain,DC=zn
memberOf: CN=zakupki,CN=Users,DC=domain,DC=zn
memberOf: CN=Kchs,CN=Users,DC=domain,DC=zn
memberOf: CN=dogovory,CN=Users,DC=domain,DC=zn
memberOf: CN=freader,CN=Users,DC=domain,DC=zn
memberOf: CN=order_1070,CN=Users,DC=domain,DC=zn
memberOf: CN=lodsman,CN=Users,DC=domain,DC=zn
memberOf: CN=rittal,CN=Users,DC=domain,DC=zn
lastLogon: 131992748328536390
logonCount: 112
givenName:: 0JjQvNGPCg==
initials:: 0Jgu0J4uCg==
sn:: 0Jgu0J4uCg==
physicalDeliveryOfficeName: 437
telephoneNumber: 2200
mail: familija.io@domain.zn
streetAddress:: 0J3QtSDQtNC+0Lwg0Lgg0L3QtSDRg9C70LjRhtCwCg==
l:: 0YHQvtCy0LXRgtGB0LrQuNC5INGB0L7RjtC3Cg==
c: RU
countryCode: 643

Значения полей, таких как:

displayName:: 0KTQsNC80LjQu9C40Y8g0JjQvNGPINCe0YLRh9C10YHRgtCy0L4K

имеют в карточке (свойствах) пользователя написание кириллическое, но тут и при открытии экспортируемого ldif такое, как отображено выше.

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Так, ну внутри-то точно в base64 хранится, а вот при импорте как надо передать, я уже не помню.
Сноси Винду, переходи на Линукс ! :)

Оффлайн ApB

  • Завсегдатай
  • *
  • Сообщений: 412
Название полей sn, cn, givenName и etc лучше уточнить. Можно глянуть через ldbedit правильный набор у существующих пользователей.

По поводу атрибутов, уже имеющихся у пользователей: например при просмотре ldap-браузером, есть атрибут title (есть и много других) но при попытке их экспорта из modify в рабочую sam.ldb - ошибка экспорта атрибута, хотя ошибки в атрибуте нету.

Не подскажите, по какой причине? Где ещё хранятся атрибуты пользователей?

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 923
    • Домашняя страница
    • Email
Название полей sn, cn, givenName и etc лучше уточнить. Можно глянуть через ldbedit правильный набор у существующих пользователей.

По поводу атрибутов, уже имеющихся у пользователей: например при просмотре ldap-браузером, есть атрибут title (есть и много других) но при попытке их экспорта из modify в рабочую sam.ldb - ошибка экспорта атрибута, хотя ошибки в атрибуте нету.

Не подскажите, по какой причине? Где ещё хранятся атрибуты пользователей?
Они описаны в схеме.
Андрей Черепанов (cas@)

Оффлайн ApB

  • Завсегдатай
  • *
  • Сообщений: 412
В целом, корректировка пользователей на основании csv получилась следующая:

#! /bin/bash
users=users_.csv
modify=modify.ldif
domain='test.zn'
dc='DC=test,dc=zn'

rm -f $modify


cat $users | while read line ; do


login=$(echo "$line" | awk -F "," '{print$1}')
surname=$(echo "$line" | awk -F "," '{print$2}')
name=$(echo "$line" | awk -F "," '{print$3 " " $4}')
# patron=$(echo "$line" | awk -F "," '{print$4}')
dname=$(echo "$line" | awk -F "," '{print$2" "$3" "$4}')
mail=$(echo "$line" | awk -F "," '{print$5}')
tel=$(echo "$line" | awk -F "," '{print$6 $7}')
room=$(echo "$line" | awk -F "," '{print$8}')
post=$(echo "$line" | awk -F "," '{print$9}')
dpt=$(echo "$line" | awk -F "," '{print$10}')
type=$(echo "$line" | awk -F "," '{print$11}')
company=$(echo "$line" | awk -F "," '{print$12}')


cat << EOF >> $modify

dn: CN=$login,CN=Users,$dc
changetype: modify
replace: sn
sn: $surname
-
replace: givenName
givenName: $name
-
replace: displayName
displayName: $dname
-
replace: mail
mail: $mail
-
replace: telephoneNumber
telephoneNumber: $tel
-
replace: physicalDeliveryOfficeName
physicalDeliveryOfficeName: $room
-
replace: title
title: $post
-
replace: department
department: $dpt
-
replace: company
company: $company
EOF

# fi

done

Получили ldif для модификации. Вариант с awk получается проще для вычленения данных.

Далее подсовываем файл в samba:

ldbmodify -H /var/lib/samba/private/sam.ldb modify.ldif

Поля (значения) построчно выдёргиваются из csv и конвертируются в ldif c рассовыванием по наименованию полей в зависимоти от логина, потом этот ldif запихивается в samba. Одна оговорка: учитывать необходимо обязательное заполнение полей (всех) и учитывать ограничения длинны полей (для группы и для должности, особенно гос.организаций, это может потребовать внимания).