ldapscripts
– набор shell
-скриптов,упрощающих работу с пользователями и группами в UNIX-системах.
Вместо создания отдельных ldif
-файлов каждый раз для добавления новой записи в LDAP – можно воспользоваться утилитами ldapadduser
или ldapaddgroup
. Кроме того, ldapscripts
предоставляют ещё несколько утилит, упрощающих работу с LDAP.
Скрипты используют объектные классы posixAccount
(ldapadduser
) и posixGroup
(ldapaddgroup
):
objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' SUP top AUXILIARY DESC 'Abstraction of an account with POSIX attributes' MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory ) MAY ( userPassword $ loginShell $ gecos $ description ) )
objectclass ( 1.3.6.1.1.1.2.2 NAME 'posixGroup' SUP top STRUCTURAL DESC 'Abstraction of a group of accounts' MUST ( cn $ gidNumber ) MAY ( userPassword $ memberUid $ description ) )
Подробнее можно посмотреть в файле схемы nis.schema
(/usr/local/etc/openldap/schema/nis.schema
во FreeBSD), на странице OpenLDAP nis.schema или в статье LDAP: добавление записи из ldif-файла на примере создания root для DIT и описание objectClass.
Устанавливаем порт:
# cd /usr/ports/ && make search key="ldapscripts" Port: ldapscripts-2.0.5_1 Path: /usr/ports/net/ldapscripts Info: Scripts to manage posix accounts in an OpenLDAP directory Maint: [email protected] B-deps: libiconv-1.14_1 openldap-client-2.4.38 R-deps: libiconv-1.14_1 openldap-client-2.4.38 WWW: http://contribs.martymac.org
# cd /usr/ports/net/ldapscripts && make install clean
В примерах используются:
# uname -or FreeBSD 9.1-RELEASE-p5
# pkg_info | grep openldap openldap-client-2.4.38 Open source LDAP client implementation openldap-server-2.4.38_1 Open source LDAP server implementation
Предполагается, что у нас имеется только созданный root
в одном DIT, пример – тоже в статье LDAP: добавление записи из ldif-файла на примере создания root для DIT и описание objectClass.
В качестве root
(base
, suffix
– кому как удобнее) будет выступать запись dc=testdn1
.
Теперь – нам необходимо создать несколько дополнительных записей (entry
), которые будут составлять собой дерево учётных записей.
Первым – создадим запись localhost
, в которую будет добавлять группы и пользователей.
Для этого – воспользуемся объектным классом organizationalUnit.
Вот как выглядит ldif
-файл для добавления этой записи:
# cat oulocalhost.ldif dn: ou=localhost,dc=testdn1 objectClass: organizationalUnit ou: localhost
Выполняем ldapadd
:
# ldapadd -x -D "cn=root,dc=testdn1" -W -f oulocalhost.ldif Enter LDAP Password: adding new entry "ou=localhost,dc=testdn1"
Далее, добавим запись в которой будут храниться записи о группах:
# cat ougroups.ldif dn: ou=sysgroups,ou=localhost,dc=testdn1 objectClass: organizationalUnit ou: sysgroups
# ldapadd -x -D "cn=root,dc=testdn1" -W -f ougroups.ldif Enter LDAP Password: adding new entry "ou=sysgroups,ou=localhost,dc=testdn1"
Теперь – для пользователей:
# cat ouusers.ldif dn: ou=sysusers,ou=localhost,dc=testdn1 objectClass: organizationalUnit ou: sysusers
# ldapadd -x -D "cn=root,dc=testdn1" -W -f ouusers.ldif Enter LDAP Password: adding new entry "ou=sysusers,ou=localhost,dc=testdn1"
Если что-то пошло не так, и вы хотите удалить запись – воспользуйтесь утилитой ldapdelete
. С ключами -n
и -v
утилита просто покажет какие действия будут выполнены – но не выполнит их:
# ldapdelete -nv "ou=sysusers,ou=localhost,dc=testdn1" ldap_initialize( ) !deleting entry "ou=sysusers,ou=localhost,dc=testdn1"
Что бы выполнить удаление:
# ldapdelete -D "cn=root,dc=testdn1" -W "ou=sysusers,ou=localhost,dc=testdn1" Enter LDAP Password:
Итак, мы добавили группу sysusers
– посмотрим как она выглядит и убедимся что всё нормально:
# ldapsearch -x -b "dc=testdn1" "ou=sysusers" # extended LDIF # # LDAPv3 # base <dc=testdn1> with scope subtree # filter: ou=sysusers # requesting: ALL # # sysusers, localhost, testdn1 dn: ou=sysusers,ou=localhost,dc=testdn1 objectClass: organizationalUnit ou: sysusers
Так выглядят записи для групп и пользователей в phpLdapAdmin:
Переходим к настройке ldapscripts
– редактируем файл /usr/local/etc/ldapscripts/ldapscripts.conf
:
# LDAP server SERVER="127.0.0.1" # Suffixes SUFFIX="dc=testdn1" # Global suffix GSUFFIX="ou=sysgroups,ou=localhost" # Groups ou (just under $SUFFIX) USUFFIX="ou=sysusers,ou=localhost" # Users ou (just under $SUFFIX) #MSUFFIX="ou=machines" # Machines ou (just under $SUFFIX) // тут закомментировано, т.к. требуются только пользователи и группы # Else, use the value as an SASL authentication mechanism SASLAUTH="" # Указываем учётную запись пользователя, который имеет права на запись/редактирование в базе BINDDN="cn=root,dc=testdn1" # И его пароль BINDPWD="PASSWORD" # Стартовые ID *если записи ещё нет LDAP* GIDSTART="10000" # Group ID UIDSTART="10000" # User ID #MIDSTART="20000" # Machine ID # the former is a subset of the latter. The ldapscripts wouldn't cope well with this configuration. GCLASS="posixGroup" # Leave "posixGroup" here if not sure ! # Настройки создания пользователей USHELL="/usr/local/bin/bash" UHOMES="/home/%u" # You may use %u for username here CREATEHOMES="yes" # Create home directories and set rights ? HOMESKEL="/etc/skel" # Directory where the skeleton files are located. Ignored if undefined or nonexistant. HOMEPERMS="700" # Default permissions for home directories #PASSWORDGEN="cat /dev/random | LC_ALL=C tr -dc 'a-zA-Z0-9' | head -c8" PASSWORDGEN="pwgen" PASSWORDGEN="echo changeme" PASSWORDGEN="echo %u" PASSWORDGEN="" # WARNING !!!! DO NOT FORGET TO TURN OFF RECORDING WHEN DONE ! RECORDPASSWORDS="no" PASSWORDFILE="/var/log/ldapscripts_passwd.log" # Путь к файлу лога LOGFILE="/var/log/ldapscripts.log" # Temporary folder TMPDIR="/tmp" # OpenLDAP client commands LDAPSEARCHBIN="/usr/local/bin/ldapsearch" LDAPADDBIN="/usr/local/bin/ldapadd" LDAPDELETEBIN="/usr/local/bin/ldapdelete" LDAPMODIFYBIN="/usr/local/bin/ldapmodify" LDAPMODRDNBIN="/usr/local/bin/ldapmodrdn" LDAPPASSWDBIN="/usr/local/bin/ldappasswd"
Добавляем первую группу в корень дерева ou=sysgroups,ou=localhost,dc=testdn1
:
# ldapaddgroup sysusers1 Warning : using command-line passwords, ldapscripts may not be safe Successfully added group sysusers1 to LDAP
Находим её:
# ldapsearch -x -b "dc=testdn1" "cn=sysusers" # extended LDIF # # LDAPv3 # base <dc=testdn1> with scope subtree # filter: cn=sysusers # requesting: ALL # # sysusers, sysgroups, localhost, testdn1 dn: cn=sysusers,ou=sysgroups,ou=localhost,dc=testdn1 objectClass: posixGroup cn: sysusers gidNumber: 10000 description: Group account
Так же можно воспользоваться утилитой lsldap
из того же набора ldapscripts
:
# lsldap Warning : using command-line passwords, ldapscripts may not be safe dn: dc=testdn1 objectClass: top objectClass: dcObject objectClass: organization dc: testdn1 o: TestLDAP description: Testing LDAP server DIT number one dn: ou=localhost,dc=testdn1 objectClass: organizationalUnit ou: localhost dn: ou=sysgroups,ou=localhost,dc=testdn1 objectClass: organizationalUnit ou: sysgroups dn: ou=sysusers,ou=localhost,dc=testdn1 objectClass: organizationalUnit ou: sysusers dn: cn=sysusers,ou=sysgroups,ou=localhost,dc=testdn1 objectClass: posixGroup cn: sysusers gidNumber: 10000 description: Group account
Добавим вторую группу:
# ldapaddgroup wheel Warning : using command-line passwords, ldapscripts may not be safe Successfully added group wheel to LDAP
Теперь – добавляем первого пользователя, в группу sysusers
– это будет его primary
, т.е. – основная группа. Как в LDAP пользователя добавить во вторую группу с помощью ldapscripts
– будет показано дальше:
# ldapadduser sysuser1 sysusers Warning : using command-line passwords, ldapscripts may not be safe Successfully added user sysuser1 to LDAP Setting password for user sysuser1 New Password: Retype New Password: Successfully set password for user sysuser1 Successfully created home directory for user sysuser1
Проверим домашнюю директорию:
# ls -l /home/ | grep sys drwx------ 2 10000 10000 512 Dec 4 2012 sysuser1
Директория создана, права доступа установлены в соответствии с его UID
и GID
.
Снова воспользуемся утилитой lsldap
с ключём -u
, что бы вывести список пользователей:
# lsldap -u Warning : using command-line passwords, ldapscripts may not be safe dn: uid=sysuser1,ou=sysusers,ou=localhost,dc=testdn1 objectClass: account objectClass: posixAccount cn: sysuser1 uid: sysuser1 uidNumber: 10000 gidNumber: 10000 homeDirectory: /home/sysuser1 loginShell: /usr/local/bin/bash gecos: sysuser1 description: User account userPassword:: e1NTSEF9aFJ3UXlUV09PNndLRXV4VzErQzdHeXVZZjVqV0M3a3Y=
Или – утилитой ldapid
из этого же набора:
# ldapid sysuser1 Warning : using command-line passwords, ldapscripts may not be safe uid=10000(sysuser1) gid=10000(sysusers) groups=10000(sysusers)
Ещё одна полезная утилита – ldapfinger
:
# ldapfinger -u sysuser1 Warning : using command-line passwords, ldapscripts may not be safe dn: uid=sysuser1,ou=sysusers,ou=localhost,dc=testdn1 objectClass: account objectClass: posixAccount cn: sysuser1 uid: sysuser1 uidNumber: 10000 gidNumber: 10000 homeDirectory: /home/sysuser1 loginShell: /usr/local/bin/bash gecos: sysuser1 description: User account userPassword:: e1NTSEF9aFJ3UXlUV09PNndLRXV4VzErQzdHeXVZZjVqV0M3a3Y=
Теперь – мы хотим добавить созданного пользователя во вторую группу, wheel
. Для этого – воспользуемся утилитой ldapaddusertogroup
:
# ldapaddusertogroup sysuser1 wheel Warning : using command-line passwords, ldapscripts may not be safe Successfully added user sysuser1 to group cn=wheel,ou=sysgroups,ou=localhost,dc=testdn1
Посмотрим на пользователя ещё раз:
# ldapid sysuser1 Warning : using command-line passwords, ldapscripts may not be safe uid=10000(sysuser1) gid=10000(sysusers) groups=10000(sysusers),10001(wheel)
Ссылки по теме
http://manpages.ubuntu.com
http://www.zytrax.com
И её перевод на Pro-LDAP:
http://pro-ldap.ru