Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Глава 17. Серверное программное обеспечение (сервис баз данных)

Linux OpenLDAP сервер

Краткий обзор.

Если мы говорим в этой книге о безопасности и оптимизации, то почему вдруг возникает глава, посвященная OpenLDAP? Сервер каталогов OpenLDAP расширит Ваши горизонты за счет использования его возможностей. Мы можем использовать его возможности дублирования для централизации и объединения различной информации на одном сервере для всех других серверов нашей сети. Представьте себе возможности добавления и отключения учетных записей Unix или NT, установку доступа к веб-серверу для служебного использования, добавление почтовых адресов и псевдонимов, и все с единственной операцией, доступной, как NIS-сервис, с добавлением возможности SSL-шифрования и скоростью объектно-ориентированных иерархий. Другое интересное использование: создание надежного списка разработчиков на одном или более LDAP-сервере, доступ к которому может быть открыт из приватной сети или из Интернет.

Как сказано на веб-сервере OpenLDAP:

LDAP (Lightweight Directory Access Protocol) это открытый протокол для доступа к информационным сервисам. Он работает через транспортные протоколы Интернет такие, как TCP, и может быть использован для доступа к автономным серверам каталогов или каталогам X.500.

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам /var/tmp (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем root.
OpenLDAP версии 1.2.10.

Пакеты.
Домашняя страница OpenLDAP: http://www.openldap.org,
FTP-сервер OpenLDAP: 204.152.186.57,
Вы должны скачать: openldap-1.2.10.tgz.

Архивы.
Хорошей идеей будет создать список файлов, установленных в Вашей системе до инсталляции OpenLDAP и после, в результате, с помощью утилиты diff, Вы сможете узнать, какие файлы были установлены. Например, до инсталляции:
find /* > OpenLDAP1
После инсталляции:
find /* > OpenLDAP2
Для получения списка установленных файлов:
diff OpenLDAP1 OpenLDAP2 > OpenLDAP-Installed

Раскройте архив:

[root@deep /]# cp openldap-version.tgz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf openldap-version.tgz

Компиляция и оптимизация

Шаг 1.

Важно заметить, что Вы можете настроить три различных вида баз данных на использование с LDAP. Высокопроизводительная, с памятью на диске база данных LDBM, интерфейс базы данных к произвольным UNIX-командам или shell-скриптам, называемый-SHELL, и простейшая база данных, используемая в файле паролей PASSWD.

По умолчанию OpenLDAP подразумевает использование базы данных LDBM, так что если Вы хотите настроиться на другой тип базы данных, Вы должны при инсталляции определить ее. Для SHELL Вы должны добавить опцию --enable-shell, а для PASSWD (используется как замена сервису NIS) --enable-passwd.

Перейдите в новый каталог OpenLDAP и введите следующие команды на Вашем терминале:

CC="egcs"
CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro \
        -march=pentiumpro -fomit-frame-pointer -fno-exceptions -D_REENTRANT"
./configure --prefix=/usr --libexecdir=/usr/sbin --localstatedir=/var/run \
            --sysconfdir=/etc --enable-dns --enable-shared \
            --with-gnu-ld --disable-debug

Эти опции настраивают OpenLDAP на следующее:

  • Включить поддержку dns.
  • Создавать совместно используемые библиотеки.
  • Предполагаем, что компилятор C использует GNU ld.

ЗАМЕЧАНИЕ. Опции компиляции, предложенные выше, предполагают использование базы данных LDBM. Для других типов баз данных используйте соответствующие опции, описанные выше.

Шаг 2

Сейчас мы должны скомпилировать и инсталлировать OpenLDAP на сервере:

[root@deep openldap-1.2.10]# make depend
[root@deep openldap-1.2.10]# make
[root@deep openldap-1.2.10]# cd tests
[root@deep tests]# make
[root@deep tests]# cd ..
[root@deep openldap-1.2.10]# make install

Команда make depend будет создавать необходимые зависимости для различных файлов, make компилирует все файлы с исходными кодами в исполняемые двоичные файлы, а затем make install инсталлирует исполняемые файлы и файлы поддержки в необходимые каталоги. Команда make в подкаталоге /test будет делать некоторые важные тесты для проверки функциональности Вашего LDAP-сервера перед инсталляцией. Если некоторые тесты закончатся ошибкой, необходимо исправить их перед продолжением инсталляции.

[root@deep openldap-1.2.10]# install -d -m 700 /var/ldap
[root@deep openldap-1.2.10]# echo localhost > /etc/openldap/ldapserver
[root@deep openldap-1.2.10]# strip /usr/lib/liblber.so.1.0.0
[root@deep openldap-1.2.10]# strip /usr/lib/libldap.so.1.0.0
[root@deep openldap-1.2.10]# strip /usr/lib/libldap.a
[root@deep openldap-1.2.10]# strip /usr/lib/liblber.a
[root@deep openldap-1.2.10]# strip /usr/sbin/in.xfingerd
[root@deep openldap-1.2.10]# strip /usr/sbin/go500
[root@deep openldap-1.2.10]# strip /usr/sbin/go500gw
[root@deep openldap-1.2.10]# strip /usr/sbin/mail500
[root@deep openldap-1.2.10]# strip /usr/sbin/rp500
[root@deep openldap-1.2.10]# strip /usr/sbin/rcpt500
[root@deep openldap-1.2.10]# strip /usr/sbin/fax500
[root@deep openldap-1.2.10]# strip /usr/sbin/slapd
[root@deep openldap-1.2.10]# strip /usr/sbin/slurpd
[root@deep openldap-1.2.10]# strip /usr/sbin/ldif
[root@deep openldap-1.2.10]# strip /usr/sbin/ldif2ldbm
[root@deep openldap-1.2.10]# strip /usr/sbin/ldif2index
[root@deep openldap-1.2.10]# strip /usr/sbin/ldif2id2entry
[root@deep openldap-1.2.10]# strip /usr/sbin/ldif2id2children
[root@deep openldap-1.2.10]# strip /usr/sbin/ldbmcat
[root@deep openldap-1.2.10]# strip /usr/sbin/ldbmtest
[root@deep openldap-1.2.10]# strip /usr/sbin/centipede
[root@deep openldap-1.2.10]# strip /usr/bin/ud
[root@deep openldap-1.2.10]# strip /usr/bin/ldapadd
[root@deep openldap-1.2.10]# strip /usr/bin/ldapsearch
[root@deep openldap-1.2.10]# strip /usr/bin/ldapmodify
[root@deep openldap-1.2.10]# strip /usr/bin/ldapmodrdn
[root@deep openldap-1.2.10]# strip /usr/bin/ldappasswd
[root@deep openldap-1.2.10]# strip /usr/bin/ldapdelete

Команда install будет создавать новый подкаталог с именем ldap в каталоге /var и установит режим доступа к нему: чтение, запись и исполнение (700) только для суперпользователя root из соображений безопасности. Команда strip будет удалять все символы из объектных файлов. Это необходимо, чтобы сделать исполняемые файлы меньшего размера.

Очистка после работы

[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf openldap-version/ openldap-version.tgz

Команды rm будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции OpenLDAP. Также будет удален сжатый архив OpenLDAP из каталога /var/tmp.

Конфигурации

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве floppy.tgz, включающем все конфигурационные файлы для всех программ. Если Вы скачаете этот файл, то Вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файлы, связанные с OpenLDAP, из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями Вы можете скачать с адреса http://www.openna.com/books/floppy.tgz.

Для запуска OpenLDAP-сервера следующие файлы должны быть созданы или скопированы в нужный каталог:

Копируйте файл slapd.conf в каталог /etc/openldap.
Копируйте файл ldap в каталог /etc/rc.d/init.d.
Вы можете взять эти файлы из нашего архива floppy.tgz.

Конфигурация файла /etc/ldap/slapd.conf

Файл /etc/openldap/slapd.conf это основной конфигурационный файл для автономного LDAP-демона. Все опции: права доступа, пароль, тип базы данных, месторасположение базы данных и прочие могут быть настроены в нем и применены к демону slapd. Нижеприведенный пример настраивает файл slapd.conf на использование базы данных LDBM.

Редактируйте файл slapd.conf (vi /etc/openldap/slapd.conf) и добавьте/измените следующую информацию:

# Смотрите slapd.conf(5) для деталей о конфигурационных опциях.
# Этот файл не должен быть доступен для чтения всем пользователям.
include /etc/openldap/slapd.at.conf
include /etc/openldap/slapd.oc.conf
schemacheck off
#referral ldap://ldap.itd.umich.edu
pidfile /var/run/slapd.pid
argsfile /var/run/slapd.args
#####################################################################
##
# определения базы данных ldbm
#####################################################################
##
database ldbm
suffix "o=openna, c=com"
directory /var/ldap
rootdn "cn=admin, o=openna, c=com"
rootpw secret
# избегайте использование пароля, записанного открытым текстом, особенно
# для пользователя rootdn. Смотрите slapd.conf(5) для деталей.
# определение индексируемых атрибутов ldbm
index cn,sn,uid
index objectclass pres,eq
index default none
# определение прав доступа к ldbm
defaultaccess read
access to attr=userpassword
                by self write
                by dn="cn=admin, o=openna, c=com" write
                by * compare

Вы должны убедиться, что установили следующие опции в Вашем файле slapd.conf перед запуском демона slapd:

suffix "o=openna, c=com"
Эта опция определяет DN (отличительное имя) корня поддерева, которое Вы пытаетесь создать. Другими словами, это показывает какие элементы должны храниться в этой базе данных.

directory /var/ldap
Эта опция определяет каталог, где должны размещаться база данных и соответствующие индексные файлы LDAP. Мы должны установить этот параметр в /var/ldap, потому что мы создали этот каталог на более ранней стадии инсталляции специально для этих целей.

rootdn "cn=admin, o=openna, c=com"
Эта опция определяет DN (отличительное имя) элемента, которому разрешено делать все, что угодно в каталоге LDAP. Имя, введенное здесь, может фактически не существовать в файле /etc/passwd.

rootpw secret
Эта опция определяет пароль, который может использоваться для аутентификации элемента "super-user" базы данных. Это пароль для опции rootdn, определенной выше. Важно не использовать пароли, записанные открытым текстом, а использовать вместо них шифрованные пароли.

index cn,sn,uid|index objectclass pres,eq|index default none
Эти опции определяет индексные определения, которые Вы хотите создать и управлять ими в определении базы данных. Параметры, которые мы определили в нашем файле slapd.conf, указывают поддерживать индексы для атрибутов cn, sn и uid (index cn,sn,uid), индексы наличия и эквивалентности для атрибута objectclass (index objectclass pres,eq) и не создавать индексы для всех остальных атрибутов (index default none). Смотрите руководство пользователя для большей информации.

Последние опции в файле slapd.conf связаны с контролем доступа к каталогу LDAP.

defaultaccess read
access to attr=userpassword
                by self write
                by dn="cn=admin, o=openna, c=com" write
                by * compare

Этот пример применяется для элементов в поддереве "o=openna, c=com". Доступ на чтение разрешается всем, и сам элемент может записывать все свои атрибуты, исключая userpassword. Атрибут userpassword может быть записан только определенным элементом (admin), и сопоставим со всеми. Смотрите Ваше руководство пользователя для получения большей информации.

Конфигурация скрипта /etc/rc.d/init.d/ldap

Настроим скрипт /etc/rc.d/init.d/ldap для старта и остановки LDAP-сервера. Создайте скрипт ldap (touch /etc/rc.d/init.d/ldap) и добавьте в него следующее:

#!/bin/sh
#
# ldap. Это shell-скрипт, заботящийся о запуске и остановке
# сервера ldap (slapd и slurpd).
#
# chkconfig: - 70 40
# описание: LDAP (Lightweight Directory Access Protocol) используется
# для реализации индустриального стандарта службы каталогов.
# имя процесса: slapd
# конфигурационный файл: /etc/openldap/slapd.conf
# pid файл: /var/run/slapd.pid
# библиотека исходных функций.
. /etc/rc.d/init.d/functions
# Исходная сетевая конфигурация.
. /etc/sysconfig/network
# Проверка, что сеть работает.
[ ${NETWORKING} = "no" ] && exit 0
[ -f /usr/sbin/slapd ] || exit 0
[ -f /usr/sbin/slurpd ] || exit 0
RETVAL=0
# See how we were called.
case "$1" in
  start)
   # Запуск демонов.
   echo -n "Starting ldap: "
   daemon slapd
   RETVAL=$?
   if [ $RETVAL -eq 0 ]; then
     if grep -q "^replogfile" /etc/openldap/slapd.conf; then
       daemon slurpd
       RETVAL=$?
       [ $RETVAL -eq 0 ] && pidof slurpd | cut -f 1 -d " " > /var/run/slurpd
     fi
   fi
   echo
   [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ldap
  ;;
  stop)
    # Остановка демонов.
    echo -n "Shutting down ldap: "
    killproc slapd
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
      if grep -q "^replogfile" /etc/openldap/slapd.conf; then
        killproc slurpd
        RETVAL=$?
      fi
    fi
    echo
    if [ $RETVAL -eq 0 ]; then
       rm -f /var/lock/subsys/ldap
       rm -f /var/run/slapd.args
    fi
  ;;
  status)
     status slapd
     RETVAL=$?
     if [ $RETVAL -eq 0 ]; then
       if grep -q "^replogfile" /etc/openldap/slapd.conf; then
         status slurpd
         RETVAL=$?
       fi
     fi
  ;;
  restart)
    $0 stop
    $0 start
    RETVAL=$?
  ;;
  reload)
    killproc -HUP slapd
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
      if grep -q "^replogfile" /etc/openldap/slapd.conf; then
        killproc -HUP slurpd
        RETVAL=$?
      fi
    fi
  ;;
  *)
   echo "Usage: $0 start|stop|restart|status}"
   exit 1
esac
exit $RETVAL
Сейчас сделаем этот скрипт исполняемым и изменим права доступа:
[root@deep /]# chmod 700 /etc/rc.d/init.d/ldap
Создадим символическую ссылку в rc.d для OpenLDAP командой:
[root@deep /]# chkconfig --add ldap
Скрипт OpenLDAP не будет автоматически стартовать демон slapd, когда Вы перезагружаете сервер. Вы можете изменить это, выполнив команду:
[root@deep /]# chkconfig --level 345 ldap on
Запустите сервер OpenLDAP вручную следующей командой:
[root@deep /]# /etc/rc.d/init.d/ldap start
Starting ldap:                  [ OK ]

Организация защиты OpenLDAP

Иммунизация важнейших конфигурационных файлов

Бит постоянства может быть использован для предотвращения случайного удаления или переписывания защищаемых файлов. Он также предотвращает возможность создания символических ссылок к этим файлам. После того, как Ваш файл slapd.conf настроен, можно его иммунизировать следующей командой:

[root@deep /]# chattr +i /etc/openldap/slapd.conf

Дополнительная документация

Для получения большей информации, Вы можете прочитать несколько страниц руководства:

$ man ldapd (8) демон LDAP-протокла X.500
$ man ldapdelete (1) утилита для удаления элементов ldap
$ man ldapfilter.conf (5) конфигурационный файл для LDAP, осуществляющий фильтр операций
$ man ldapfriendly (5) файл данных для дружественных операций LDAP
$ man ldapmodify, ldapadd (1) утилита для изменения и добавления элементов ldap
$ man ldapmodrdn (1) RDN-утилита для модификации элементов ldap
$ man ldappasswd (1) изменение пароля элементов LDAP
$ man ldapsearch (1) утилита поиска ldap
$ man ldapsearchprefs.conf (5) конфигурационный файл для поиска предпочтительных операций LDAP
$ man ldaptemplates.conf (5) конфигурационный файл для операций отображения образцов LDAP
$ man ldif (5) LDAP Data Interchange Format
$ man slapd (8) автономный демон LDAP
$ man slapd.conf (5) конфигурационный файл для slapd, автономного демона LDAP
$ man slurpd (8) автономный LDAP Update Replication Daemon
$ man ud (1) интерактивная программа запросов к серверу каталогов LDAP.

Утилиты создания и поддержки OpenLDAP

Создание базы данных LDMB

Есть два метода создания базы данных для LDAP, первый оффлайновый с помощью утилиты ldif2ldbm, а второй онлайновый при помощи утилиты ldapadd. Обычно Вы будете использовать оффлайновый метод, когда хотите добавить несколько тысяч элементов в базу данных, и онлайновый, когда надо добавить небольшое число элементов. Также важно заметить, что оффлайновый метод требует, чтобы демон slapd не был запущен, а онлайновый требует работы slapd.

Создание базы данных LDMB оффлайновым методом при помощи утилиты ldif2ldbm

Первое, что Вы должны сделать, это создать входной файл LDIF, содержащий текстовое представление Ваших элементов. Текстовый файл, именуемый my-data-file, может быть использован как пример (конечно, Ваш реальный входной LDIF-файл будет содержать много больше информации). Когда Вы инсталлируете OpenLDAP первый раз и имеете много элементов, которые нужно положить в базу данных, всегда будет хорошей идеей положить всю эту информацию в текстовый файл и добавить ее в Вашу базу данных при помощи утилиты ldif2ldbm.

Шаг 1.

Создайте файл my-data-file (touch /tmp/my-data-file) и добавьте в него, например, следующие строки:

dn: o=openna, c=com
o: openna
objectclass: organization
dn: cn=Gerhard Mourani, o=openna, c=com
cn: Gerhard Mourani
sn: Mourani
mail: gmourani@videotron.ca
title: Author
objectclass: person
dn: cn=Anthony Bay, o=openna, c=com
cn: Anthony Bay
sn: Bay
homephone: (444) 111-2233
mobile: (444) 555-6677
mail: abay@openna.com
objectclass: person
dn: cn=George Parker, o=openna, c=com
cn: George Parker
sn: Parker
telephonenumber: (555) 234-5678
fax: (543) 987-6543
mobile: (543) 321-4354
description: E-Commerce
objectclass: person

Вышеприведенный пример показывает Вам как конвертирует Вашу информацию в LDIF-файлы перед добавлением ее в Ваш новый каталог. Консультируйтесь с Вашей OpenLDAP документацией или книгой для получения большей информации.

Шаг 2.

Как только входной LDIF-файл, содержащий все элементы создан, мы можем добавить их в наш LDAP-сервер каталогов. Для этого используйте следующую команду:

[root@deep tmp]# ldif2ldbm -i inputfile -f slapdconfigfile
[root@deep tmp]# ldif2ldbm -i my-data-file -f /etc/openldap/slapd.conf

Опция -i с опцией inputfile оперделяет месторасположения LDIF-файла. Опция slapdconfigfile задает месторасположение конфигурационного файла slapd, который определяет, где создавать индексы, какие индексы создавать и т. д.

ЗАМЕЧАНИЕ. Важно заметить, что при этом режиме создания демон slapd не должен быть запущен.

Создание базы данных LDMB онлайновым методом при помощи утилиты ldapadd

Если элементы в Вашем сервере каталогов уже созданы, или Вы хотите добавить небольшое количество информации в Вашу базу данных, то Вы можете предпочесть использовать утилиту ldapadd, чтобы выполнить Вашу работу онлайн. Например, чтобы добавить элемент Europe Mourani, используя утилиту ldapadd, Вы должны создать файл, называемый newentry в каталоге /tmp.

Шаг 1.

Создайте файл newentry (touch /tmp/newentry) и добавьте в него следующие строки:
cn=Europe Mourani, o=openna, c=com
cn=Europe Mourani
sn=Mourani
mail=emourani@old.com
description=Marketing relation
objectClass=person

Шаг 2.

После того, как файл newentry создан, мы должны добавить элемены в сервер каталогов LDAP. Для этого используйте следующую команду:

[root@deep /]# ldapadd -f /tmp/newentry -D "cn=admin, o=openna, c=com" -W
Enter LDAP Password :

Вышеприведенная команда подразумевает, что Вы установили rootdn в "cn=admin, o=openna, c=com" и rootpw в "secret". Вам будет предложено ввести пароль.

ЗАМЕЧАНИЕ. Важно заметить, что во время использования этой утилиты демон slapd должен быть запущен.

ldapmodify

В отличие от реляционных баз данных, где данные постоянно изменяются, сервер каталогов содержит информацию, которая единожды введенная изменяется редко. Но иногда Вам все же приходится модифицировать данные, и в этом может помочь утилита ldapmodify. Она позволяет добавлять и модифицировать элементы, хранящиеся на сервере каталогов. Допустим, что мы хотим заменить содержимое элемента Europe Mourani, атрибут почты, на новое значение emourani@new.com, для этого нам понадобятся следующие шаги:

Шаг 1.

Создаем файл modifyentry (touch /tmp/modifyentry) и добавляем в него следующее содержимое:

cn=Europe Mourani, o=openna, c=com
-mail=emourani@old.com
# будет удален старый почтовый адрес для Europe Mourani из базы данных.
+mail=emourani@new.com
# будет добавлен новый почтовый адрес для Europe Mourani в базу данных.

Шаг 2.

После создания файла modifyentry, мы должны заменить элемнты каталога LDAP-сервера в соответствии с содержимым этого файла. Это делается следующей командой:

[root@deep /]# ladpmodify -D `cn=Admin, o=openna, c=com' -W -f inputfile
[root@deep /]# ladpmodify -D `cn=Admin, o=openna, c=com' -W -f modifyentry

Здесь inputfile задает имя файла modifyentry, который был создан на шаге 1.

Утилиты пользователя OpenLDAP

Поиск элемента на сервере каталогов LDAP

Утилита ldapsearch ищет в базе данных каталога LDAP информацию, которую Вы запрашиваете. Искать в каталоге LDAP элемент, используя команду:

[root@deep /]# ldapsearch -b `dn' `attrs'
[root@deep /]# ldapsearch -b `o=openna, c=com' `cn=europe*'
cn=Europe Mourani, o=openna, c=com
cn=Europe Mourani
sn=Mourani
mail=emourani@old.com
description=Marketing relation
objectClass=person

Эта команда будет возвращать все элементы и значения с именем europe и будет выводить результаты на стандартный вывод Вашего терминала.

Некоторые возможны варианты использования OpenLDAP

OpenLDAP может использоваться как:

  1. Сервер веб-каталога.
  2. Сервер "белых страниц".
  3. Сертификационный сервер.
  4. Сервер контроля доступа.
  5. Сетевой сервер имен.

Клиент Netscape Address Book для LDAP

Если Вы имеете Netscape, проинсталлированный на Вашей Linux-системе, или любой другой операционной системе, то Вы можете использовать его возможности Address Book для доступа к серверу каталогов LDAP, только что установленному на Вашей Linux-системе и запросить сервер каталогов об информации, подобной той, что Вы получали используя команду ldapsearch. Если Вы интересуетесь, как сделать это, то следуйте по шагам, описанным ниже:

  1. Открыть Netscape Communicator.
  2. Перейти в меню Communicator.
  3. Открыть Address Book.
  4. Перейти в меню File.
  5. Кликнуть на New Directory.
  6. Заполнить поля Вашей информацией о сервере.

Например:

  • Описание: Open Network Architecture.
  • LDAP-сервер: 208.164.186.3.
  • Корень сервера: o=openna, c=com.

Сейчас Вы сделаи все, что нужно, чтобы иметь возможность создавать запросы к Вашему серверу каталогов LDAP на Linux, используя блок с именем Show names Containing: для запуска поиска и кликните на кнопке Search For: для получения результатов.

Инсталлированные файлы

> /etc/openldap
> /etc/openldap/ldap.conf
> /etc/openldap/ldap.conf.default
> /etc/openldap/ldapfilter.conf
> /etc/openldap/ldapfilter.conf.default
> /etc/openldap/ldaptemplates.conf
> /etc/openldap/ldaptemplates.conf.default
> /etc/openldap/ldapsearchprefs.conf
> /etc/openldap/ldapsearchprefs.conf.default
> /etc/openldap/slapd.conf
> /etc/openldap/slapd.conf.default
> /etc/openldap/slapd.at.conf
> /etc/openldap/slapd.at.conf.default
> /etc/openldap/slapd.oc.conf
> /etc/openldap/slapd.oc.conf.default
> /etc/openldap/ldapserver
> /etc/rc.d/init.d/ldap
> /etc/rc.d/rc0.d/K40ldap
> /etc/rc.d/rc1.d/K40ldap
> /etc/rc.d/rc2.d/K40ldap
> /etc/rc.d/rc3.d/S70ldap
> /etc/rc.d/rc4.d/S70ldap
> /etc/rc.d/rc5.d/S70ldap
> /etc/rc.d/rc6.d/K40ldap
> /usr/bin/ud
> /usr/bin/ldapsearch
> /usr/bin/ldapmodify
> /usr/bin/ldapdelete
> /usr/bin/ldapmodrdn
> /usr/bin/ldappasswd
> /usr/bin/ldapadd
> /usr/include/ldap.h
> /usr/include/lber.h
> /usr/include/ldap_cdefs.h
> /usr/include/disptmpl.h
> /usr/include/srchpref.h
> /usr/lib/liblber.so.1.0.0
> /usr/lib/liblber.so.1
> /usr/lib/liblber.so
> /usr/lib/liblber.la
> /usr/lib/liblber.a
> /usr/lib/libldap.so.1.0.0
> /usr/lib/libldap.so.1
> /usr/lib/libldap.so
> /usr/lib/libldap.la
> /usr/lib/libldap.a
> /usr/man/man1/ud.1
> /usr/man/man1/ldapdelete.1
> /usr/man/man1/ldapmodify.1
> /usr/man/man1/ldapadd.1
> /usr/man/man1/ldapmodrdn.1
> /usr/man/man1/ldappasswd.1
> /usr/man/man1/ldapsearch.1
> /usr/man/man3/cldap_close.3
> /usr/man/man3/cldap_open.3
> /usr/man/man3/cldap_search_s.3
> /usr/man/man3/cldap_setretryinfo.3
> /usr/man/man3/lber-decode.3
> /usr/man/man3/lber-encode.3
> /usr/man/man3/ldap_open.3
> /usr/man/man3/ldap_errlist.3
> /usr/man/man3/ldap_err2string.3
> /usr/man/man3/ldap_first_attribute.3
> /usr/man/man3/ldap_next_attribute.3
> /usr/man/man3/ldap_first_entry.3
> /usr/man/man3/ldap_next_entry.3
> /usr/man/man3/ldap_count_entries.3
> /usr/man/man3/ldap_friendly.3
> /usr/man/man3/ldap_friendly_name.3
> /usr/man/man3/ldap_free_friendlymap.3
> /usr/man/man3/ldap_get_dn.3
> /usr/man/man3/ldap_explode_dn.3
> /usr/man/man3/ldap_explode_dns.3
> /usr/man/man3/ldap_dn2ufn.3
> /usr/man/man3/ldap_is_dns_dn.3
> /usr/man/man3/ldap_get_values.3
> /usr/man/man3/ldap_get_values_len.3
> /usr/man/man3/ldap_value_free.3
> /usr/man/man3/ldap_value_free_len.3
> /usr/man/man3/ldap_count_values.3
> /usr/man/man3/ldap_count_values_len.3
> /usr/man/man3/ldap_getfilter.3
> /usr/man/man3/ldap_init_getfilter.3
> /usr/man/man3/ldap_init_getfilter_buf.3
> /usr/man/man3/ldap_getfilter_free.3
> /usr/man/man3/ldap_getfirstfilter.3
> /usr/man/man3/ldap_getnextfilter.3
> /usr/man/man3/ldap_setfilteraffixes.3
> /usr/man/man3/ldap_build_filter.3
> /usr/man/man3/ldap_modify.3
> /usr/man/man3/ldap_modify_s.3
> /usr/man/man3/ldap_mods_free.3
> /usr/man/man3/ldap_modrdn.3
> /usr/man/man3/ldap_modrdn_s.3
> /usr/man/man3/ldap_modrdn2.3
> /usr/man/man3/ldap_modrdn2_s.3
> /usr/man/man3/ldap_init.3
> /usr/man/man3/ldap_result.3
> /usr/man/man3/ldap_msgfree.3
> /usr/man/man3/ldap_search.3
> /usr/man/man3/ldap_search_s.3
> /usr/man/man3/ldap_search_st.3
> /usr/man/man3/ldap_searchprefs.3
> /usr/man/man3/ldap_init_searchprefs.3
> /usr/man/man3/ldap_init_searchprefs_buf.3
> /usr/man/man3/ldap_free_searchprefs.3
> /usr/man/man3/ldap_first_searchobj.3
> /usr/man/man3/ldap_next_searchobj.3
> /usr/man/man3/ldap_sort.3
> /usr/man/man3/ldap_sort_entries.3
> /usr/man/man3/ldap_sort_values.3
> /usr/man/man3/ldap_sort_strcasecmp.3
> /usr/man/man3/ldap_ufn.3
> /usr/man/man3/ldap_ufn_search_s.3
> /usr/man/man3/ldap_ufn_search_c.3
> /usr/man/man3/ldap_ufn_search_ct.3
> /usr/man/man3/ldap_ufn_setprefix.3
> /usr/man/man3/ldap_ufn_setfilter.3
> /usr/man/man3/ldap.3
> /usr/man/man3/cldap.3
> /usr/man/man3/ldap_abandon.3
> /usr/man/man3/ldap_add.3
> /usr/man/man3/ldap_add_s.3
> /usr/man/man3/ldap_bind.3
> /usr/man/man3/ldap_bind_s.3
> /usr/man/man3/ldap_simple_bind.3
> /usr/man/man3/ldap_simple_bind_s.3
> /usr/man/man3/ldap_kerberos_bind_s.3
> /usr/man/man3/ldap_kerberos_bind1.3
> /usr/man/man3/ldap_kerberos_bind1_s.3
> /usr/man/man3/ldap_kerberos_bind2.3
> /usr/man/man3/ldap_kerberos_bind2_s.3
> /usr/man/man3/ldap_unbind.3
> /usr/man/man3/ldap_unbind_s.3
> /usr/man/man3/ldap_set_rebind_proc.3
> /usr/man/man3/ldap_cache.3
> /usr/man/man3/ldap_enable_cache.3
> /usr/man/man3/ldap_disable_cache.3
> /usr/man/man3/ldap_destroy_cache.3
> /usr/man/man3/ldap_flush_cache.3
> /usr/man/man3/ldap_uncache_entry.3
> /usr/man/man3/ldap_uncache_request.3
> /usr/man/man3/ldap_set_cache_options.3
> /usr/man/man3/ldap_charset.3
> /usr/man/man3/ldap_set_string_translators.3
> /usr/man/man3/ldap_enable_translation.3
> /usr/man/man3/ldap_translate_from_t61.3
> /usr/man/man3/ldap_translate_to_t61.3
> /usr/man/man3/ldap_t61_to_8859.3
> /usr/man/man3/ldap_8859_to_t61.3
> /usr/man/man3/ldap_compare.3
> /usr/man/man3/ldap_compare_s.3
> /usr/man/man3/ldap_delete.3
> /usr/man/man3/ldap_delete_s.3
> /usr/man/man3/ldap_disptmpl.3
> /usr/man/man3/ldap_init_templates.3
> /usr/man/man3/ldap_init_templates_buf.3
> /usr/man/man3/ldap_free_templates.3
> /usr/man/man3/ldap_first_disptmpl.3
> /usr/man/man3/ldap_next_disptmpl.3
> /usr/man/man3/ldap_oc2template.3
> /usr/man/man3/ldap_tmplattrs.3
> /usr/man/man3/ldap_first_tmplrow.3
> /usr/man/man3/ldap_next_tmplrow.3
> /usr/man/man3/ldap_first_tmplcol.3
> /usr/man/man3/ldap_next_tmplcol.3
> /usr/man/man3/ldap_entry2text.3
> /usr/man/man3/ldap_entry2text_search.3
> /usr/man/man3/ldap_vals2text.3
> /usr/man/man3/ldap_entry2html.3
> /usr/man/man3/ldap_entry2html_search.3
> /usr/man/man3/ldap_vals2html.3
> /usr/man/man3/ldap_error.3
> /usr/man/man3/ldap_perror.3
> /usr/man/man3/ld_errno.3
> /usr/man/man3/ldap_result2error.3
> /usr/man/man3/ldap_ufn_timeout.3
> /usr/man/man3/ldap_url.3
> /usr/man/man3/ldap_is_ldap_url.3
> /usr/man/man3/ldap_url_parse.3
> /usr/man/man3/ldap_free_urldesc.3
> /usr/man/man3/ldap_url_search.3
> /usr/man/man3/ldap_url_search_s.3
> /usr/man/man3/ldap_url_search_st.3
> /usr/man/man5/ldap.conf.5
> /usr/man/man5/ldapfilter.conf.5
> /usr/man/man5/ldapfriendly.5
> /usr/man/man5/ldapsearchprefs.conf.5
> /usr/man/man5/ldaptemplates.conf.5
> /usr/man/man5/ldif.5
> /usr/man/man5/slapd.conf.5
> /usr/man/man5/slapd.replog.5
> /usr/man/man5/ud.conf.5
> /usr/man/man8/centipede.8
> /usr/man/man8/chlog2replog.8
> /usr/man/man8/edb2ldif.8
> /usr/man/man8/go500.8
> /usr/man/man8/go500gw.8
> /usr/man/man8/in.xfingerd.8
> /usr/man/man8/ldapd.8
> /usr/man/man8/ldbmcat.8
> /usr/man/man8/ldif.8
> /usr/man/man8/ldif2ldbm.8
> /usr/man/man8/ldif2index.8
> /usr/man/man8/ldif2id2entry.8
> /usr/man/man8/ldif2id2children.8
> /usr/man/man8/mail500.8
> /usr/man/man8/fax500.8
> /usr/man/man8/rcpt500.8
> /usr/man/man8/slapd.8
> /usr/man/man8/slurpd.8
> /usr/sbin/ldif
> /usr/sbin/in.xfingerd
> /usr/sbin/go500
> /usr/sbin/go500gw
> /usr/sbin/mail500
> /usr/sbin/rp500
> /usr/sbin/fax500
> /usr/sbin/xrpcomp
> /usr/sbin/rcpt500
> /usr/sbin/slapd
> /usr/sbin/ldif2ldbm
> /usr/sbin/ldif2index
> /usr/sbin/ldif2id2entry
> /usr/sbin/ldif2id2children
> /usr/sbin/ldbmcat
> /usr/sbin/centipede
> /usr/sbin/ldbmtest
> /usr/sbin/slurpd
> /usr/share/openldap
> /usr/share/openldap/ldapfriendly
> /usr/share/openldap/go500gw.help
> /usr/share/openldap/rcpt500.help
> /var/ldap

Linux-сервер баз данных PostgreSQL

Краткий обзор.

Однажды занявшись обслуживанием и поддержкой сервисов для пользователей, Вы неизбежно столкнетесь с тем, что Вам нужно хранить информацию о них в архиве так, чтобы она была доступна и легко модифицировалась в любое время. Эти задачи могут быть решены использованием баз данных. Много разных баз данных доступно под Linux, выбрать какую-нибудь одну очень трудно, так как она должна поддерживать несколько языков программирования, стандарты и широкий спектр возможностей. PostgreSQL, оригинально разработанная в UC Berkeley Computer Science Department, является пионером многих объектно-реляционных концепций сейчас доступных в коммерческих базах данных. Она предоставляет поддержку языков SQL92/SQL3, целостность транзакций и расширяемость типов.

Как написано на веб-сервере PostgreSQL:

PostgreSQL это изощренная объектно-реляционная система управления базами данных DBMS, поддерживающая практически все SQL-конструкции, включая вложенный select, транзакции и определяемые пользователем типы и функции. Это наиболее продвинутая база данных, доступная в исходных кодах в настоящее время.

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам /var/tmp (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем root.
PostgreSQL версии 6.5.3.

Пакеты.
Домашняя страница PostgreSQL: http://www.postgresql.org,
FTP-сервер PostgreSQL: 216.126.84.28,
Вы должны скачать: postgresql-6.5.3.tar.gz.

Предварительные требования

Перед компиляцией PostgreSQL Вам необходимо убедиться, что на Вашей системе установлен пакет egcs-c++-version.i386.rpm. Этот пакет располагается на Вашем Red Hat Linux CD-ROM в каталоге RedHat/RPMS. После компиляции и инсталляции PostgreSQL Вы можете удалить его из Вашей системы. Проверьте, что egcs-c++-version.i386.rpm уже инсталлирован, используя команду:

[root@deep /]# rpm -q egcs-c++

Для инсталляции egcs-c++-version.i386.rpm выполните следующие команды:

[root@deep /]# mount /dev/cdrom /mnt/cdrom
[root@deep /]# cd /mnt/cdrom/RedHat/RPMS
[root@deep RPMS]# rpm -Uvh egcs-c++-version.i386.rpm
egcs-c++   ##################################################
Хорошей идеей будет создать список файлов, установленных в Вашей системе до инсталляции PostgreSQL и после, в результате, с помощью утилиты diff, Вы сможете узнать, какие файлы были установлены. Например, до инсталляции:
find /* > PostgreSQL1
После инсталляции:
find /* > PostgreSQL2
Для получения списка установленных файлов:
diff PostgreSQL1 PostgreSQL2 > PostgreSQL-Installed

Раскройте архив:

[root@deep /]# cp postgresql-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf postgresql-version.tar.gz

Компиляция и оптимизация

Шаг 1.

Первое, для уменьшения риска безопасности, мы создадим непривилегированный логин пользователя postgres, который должен владеть файлами Postgres. Для этого используйте следующую команду:

[root@deep /]# useradd -M -o -r -d /var/lib/pgsql -s /bin/bash \
                       -c "PostgreSQL Server" -u 40 postgres> \
                       /dev/null 2>&1 || :

Шаг 2.

Перейдите в новый PosgreSQL каталог, а затем в подкаталог src. Введите следующие команды на Вашем терминале:

[root@deep /]# cd /var/tmp/postgresql-6.5.3
[root@deep postgresql-6.5.3]# cd src
CC="egcs"
./configure --prefix=/usr --enable-locale

Редактируйте файл Makefile.global (vi +210 Makefile.global) и измените следующие строки:

CFLAGS= -I$(SRCDIR)/include -I$(SRCDIR)/backend
Должна быть:
CFLAGS= -I$(SRCDIR)/include -I$(SRCDIR)/backend -O9 -funroll-loops \
        -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro \
        -fomit-frame-pointer -fno-exceptions

Это оптимизационные флаги для сервера PostgreSQL. Конечно, Вы должны приспособить их под Вашу систему и процессор.

Шаг 3.

Сейчас мы должны скомпилировать и инсталлировать PosgreSQL на сервере:

[root@deep src]# make all
[root@deep src]# cd ..
[root@deep postgresql-6.5.3]# make -C src install
[root@deep postgresql-6.5.3]# make -C src/man install
[root@deep postgresql-6.5.3]# mkdir -p /usr/include/pgsql
[root@deep postgresql-6.5.3]# mv /usr/include/access /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/commands /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/executor /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/lib /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/libpq /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/libpq++ /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/port /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/utils /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/fmgr.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/os.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/config.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/c.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/postgres.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/postgres_ext.h \
                                 /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/libpq-fe.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/libpq-int.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/ecpgerrno.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/ecpglib.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/ecpgtype.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/sqlca.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/libpq++.H /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mkdir -p /usr/lib/pgsql
[root@deep postgresql-6.5.3]# mv /usr/lib/*source /usr/lib/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/lib/*sample /usr/lib/pgsql/
[root@deep postgresql-6.5.3]# mkdir -p /var/lib/pgsql
[root@deep postgresql-6.5.3]# chown -R postgres.postgres /var/lib/pgsql/
[root@deep postgresql-6.5.3]# chmod 755 /usr/lib/libpq.so.2.0
[root@deep postgresql-6.5.3]# chmod 755 /usr/lib/libecpg.so.3.0.0
[root@deep postgresql-6.5.3]# chmod 755 /usr/lib/libpq++.so.3.0
[root@deep postgresql-6.5.3]# strip /usr/bin/postgres
[root@deep postgresql-6.5.3]# strip /usr/bin/postmaster
[root@deep postgresql-6.5.3]# strip /usr/bin/ecpg
[root@deep postgresql-6.5.3]# strip /usr/bin/pg_id
[root@deep postgresql-6.5.3]# strip /usr/bin/pg_version
[root@deep postgresql-6.5.3]# strip /usr/bin/pg_dump
[root@deep postgresql-6.5.3]# strip /usr/bin/pg_passwd
[root@deep postgresql-6.5.3]# strip /usr/bin/psql
[root@deep postgresql-6.5.3]# rm -f /usr/lib/global1.description
[root@deep postgresql-6.5.3]# rm -f /usr/lib/local1_template1.description

Команда make компилирует все исходные файлы в исполняемые двоичные файлы и команды make install инсталлирует исполняемые и все сопутствующие файлы в необходимое место. mkdir создаст новый каталог pgsql в каталогах /usr/include и /usr/lib, и затем мы переместим все подкаталоги и файлы, связанные с PostgreSQL, из каталогов /usr/include и /usr/lib в /usr/include/pgsql и /usr/lib/pgsql соответственно. Команда chown установит правильного владельца и группу для каталога /var/lib/pgsql. Команда strip удалит все символы из объектных файлов. Это приведет к уменьшению размеров соответствующих файлов, что улучшит производительность программ. Команда rm удалит файлы global1.description и local1_template1.description, которые не нужны программе PosgreSQL.

Создание базы данных инсталлированной из-под логина суперпользователя Postgres

После того, как Вы проинсталлировали PostgreSQL на сервере, необходимо создать базу данных до запуска PostgreSQL сервера. Для создания базы данных используйте следующую команду:

[root@deep /]# su postgres
[postgres@deep /]$ initdb --pglib=/usr/lib/pgsql --pgdata=/var/lib/pgsql
We are initializing the database system with username postgres (uid=40).
This user will own all the files and must also own the server process.
Creating Postgres database system directory /var/lib/pgsql/base
Creating template database in /var/lib/pgsql/base/template1
Creating global classes in /var/lib/pgsql/base
Adding template1 database to pg_database...
Vacuuming template1
Creating public pg_user view
Creating view pg_rules
Creating view pg_views
Creating view pg_tables
Creating view pg_indexes
Loading pg_description
[postgres@deep /]$ chmod 640 /var/lib/pgsql/pg_pwd
[postgres@deep /]$ exit
exit
[root@deep /]#

Опция --pglib будет задавать месторасположение библиотек PostgreSQL, а --pgdata определит место, где будут располагаться Ваши базы данных.

ЗАМЕЧАНИЕ. Не создавайте базы данных из-под пользователя root! Это создаст большую дыру в безопасности.

Очистка после работы

[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf postgresql-version/ postgresql-version.tar.gz

Удаление пакета egcs-c++-version.i386.rpm для экономии дискового пространства.

[root@deep /]# rpm -e egcs-c++

Команды rm будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции PostgreSQL. Также будет удален сжатый архив PostgreSQL из каталога /var/tmp.

Команда rpm -e удалит пакет egcs-c++ при помощи которого мы компилировали сервер PosgreSQL. Заметим, что пакет egcs-c++ требуется только для компиляции программ, подобных PostgreSQL, и может быть спокойно удален после окончания этой процедуры.

Конфигурации

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве floppy.tgz, включающем все конфигурационные файлы для всех программ. Если Вы скачаете этот файл, то не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файлы, связанные с PostgreSQL, из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями Вы можете скачать с адреса: http://www.openna.com/books/floppy.tgz.

Для запуска PostgreSQL сервера следующие файлы должны быть созданы или скопированы в нужный каталог:

Копируйте файл postgresql в каталог /etc/rc.d/init.d.

Вы можете взять эти файлы из нашего архива floppy.tgz.

Конфигурация скрипта /etc/rc.d/init.d/postgresql

Настроим скрипт /etc/rc.d/init.d/postgresql, который будет отвечать за запуск и остановку сервера PostgreSQL. Создадим скрипт postgresql (touch /etc/rc.d/init.d/postgresql) и добавьте в него следующие строки:

#! /bin/sh
# postgresql. Это инициализационный скрипт для запуска сервера PostgreSQL
#
# chkconfig: 345 85 15
# описание: запуск и остановка демона PostgreSQL, отвечающего за обработку
# всех запросов к базе данных.
# имя процесса: postmaster
# pid файл: /var/run/postmaster.pid
# библиотека исходных функций.
. /etc/rc.d/init.d/functions
# Get config.
. /etc/sysconfig/network
# Проверка работает ли сеть.
# это нужно для postmaster.
[ ${NETWORKING} = "no" ] && exit 0
[ -f /usr/bin/postmaster ] || exit 0
# Этот скрипт немного необычен тем, что имя демона (postmaster)
# не совпадает с именем подсистемы (postgresql)
# Смотрите, как мы осуществляем вызов.
case "$1" in
  start)
    echo -n "Checking postgresql installation: "
    # Проверка структуры PGDATA
    if [ -f /var/lib/pgsql/PG_VERSION ] && [ -d /var/lib/pgsql/base/template1 ]
    then
      # Проверка версии существующие PGDATA
      if [ `cat /var/lib/pgsql/PG_VERSION` != '6.5' ]
      then
         echo "old version. Need to Upgrade."
         echo "See /usr/doc/postgresql-6.5.2/README.rpm for more information."
         exit 1
      else
         echo "looks good!"
      fi
      # PGDATAне существуе! Нужно выполнить Initdb.
    else
      echo "no database files found."
      if [ ! -d /var/lib/pgsql ]
      then
        mkdir -p /var/lib/pgsql
        chown postgres.postgres /var/lib/pgsql
      fi
      su -l postgres -c '/usr/bin/initdb --pglib=/usr/lib/pgsql --pgdata=/var/lib/pgsql'
    fi
    # Проверка, запущен ли уже postmaster...
    pid=`pidof postmaster`
    if [ $pid ]
    then
      echo "Postmaster already running."
    else
      # все системы запущены, удаление старых блокирующих файлов
      rm -f /tmp/.s.PGSQL.* > /dev/null
      echo -n "Starting postgresql service: "
      su -l postgres -c '/usr/bin/postmaster -i -S -D/var/lib/pgsql'
      sleep 1
      pid=`pidof postmaster`
      if [ $pid ]
      then
         echo -n "postmaster [$pid]"
         touch /var/lock/subsys/postgresql
         echo $pid > /var/run/postmaster.pid
         echo
      else
         echo "failed."
      fi
    fi
  ;;
  stop)
     echo -n "Stopping postgresql service: "
     killproc postmaster
     sleep 2
     rm -f /var/run/postmaster.pid
     rm -f /var/lock/subsys/postgresql
     echo
  ;;
  status)
     status postmaster
  ;;
  restart)
     $0 stop
     $0 start
  ;;
  *)
     echo "Usage: postgresql {start|stop|status|restart}"
     exit 1
esac
exit 0

Сейчас мы должны сделать этот скрипт исполняемым и изменить права доступа к нему:

[root@deep /]# chmod 700 /etc/rc.d/init.d/postgresql

Создайте символическую ссылку в rc.d для PostgreSQL следующей командой:

[root@deep /]# chkconfig --add postgresql

Запустите Ваш новый сервер PostgreSQL вручную следующей командой:

[root@deep /]# /etc/rc.d/init.d/postgresql start
Checking postgresql installation: looks good!
Starting postgresql service:      postmaster [22401]

Команды

Команды, описанные ниже, мы будем часто использовать, но на самом деле их много больше, и Вы должны изучить страницы руководства (man) и документацию, чтобы получить более подробную информацию.

Для определения нового пользователя в Вашей базе данных используйте утилиту createuser:

[root@deep /]# su postgres
[postgres@deep /]$ createuser
Enter name of user to add ---> admin
Enter user's postgres ID or RETURN to use unix user ID: 500 ->
Is user "admin" allowed to create databases (y/n) y
Is user "admin" a superuser? (y/n) y
createuser: admin was successfully added

Для удаления пользователя из базы данных используйте утилиту destroyuser:

[root@deep /]# su postgres
[postgres@deep /]$ destroyuser
Enter name of user to delete ---> admin
destroyuser: delete of user admin was successful.

Для создания новой базы данных запустите утилиту createdb:

[root@deep /]# su postgres
[postgres@deep /]$ createdb dbname
(dbname имя создаваемой базы данных).

Или из терминальной программы Postgres (psql)

[root@deep /]# su admin
[admin@deep /]$ psql template1
Welcome to the POSTGRESQL interactive sql monitor:
Please read the file COPYRIGHT for copyright terms of POSTGRESQL
[PostgreSQL 6.5.3 on i686-pc-linux-gnu, compiled by egcs ]
type \? for help on slash commands
type \q to quit
type \g or terminate with semicolon to execute query
You are currently connected to the database: template1
template1 _ > create database foo;
CREATEDB

ЗАМЕЧАНИЕ. Клиентское соединение должно быть разрешено с этого IP-адреса и/или имени пользователя в файле pg_hba.conf, расположенного в PG_DATA.

Другие полезные команды, выполняемые в терминальной программе Postgres (psql):

Соединение с новой базой данных:

template1 _ > \c foo
connecting to new database: foo
foo _ >

Создание таблицы:

foo _ > create table bar (i int4, c char(16));
CREATE
foo _ >

Для проверки новой таблицы используйте команду:

foo _ > \d bar
Table = bar
+-----+------+------+
|Field|Type  |Length|
+-----+------+------+
|    I|int4  |   4  |
|    c|char()|   16 |
+------+------+------+
foo _ >

Для уничтожения таблицы, индекса, представления (view) используйте команду:

foo _ > drop table table_name;
foo _ > drop index index_name;
foo _ > drop view view_name;

Для вставки данных в (таблица уже должна быть создана):

foo _ > insert into table_name (name_of_attr1, name_of_attr2, \
               name_of_attr3);
foo _ > values (value1, value2, value3);

Инсталлированные файлы

> /etc/rc.d/init.d/postgresql
> /etc/rc.d/rc0.d/K15postgresql
> /etc/rc.d/rc1.d/K15postgresql
> /etc/rc.d/rc2.d/K15postgresql
> /etc/rc.d/rc3.d/S85postgresql
> /etc/rc.d/rc4.d/S85postgresql
> /etc/rc.d/rc5.d/S85postgresql
> /etc/rc.d/rc6.d/K15postgresql
> /usr/bin/postgres
> /usr/bin/postmaster
> /usr/bin/ecpg
> /usr/bin/pg_id
> /usr/bin/pg_version
> /usr/bin/psql
> /usr/man/manl/begin.l
> /usr/man/manl/close.l
> /usr/man/manl/cluster.l
> /usr/man/manl/commit.l
> /usr/man/manl/copy.l
> /usr/man/manl/create_aggregate.l
> /usr/man/manl/create_database.l
> /usr/man/manl/create_function.l
> /usr/man/manl/create_index.l
> /usr/man/manl/create_language.l
> /usr/man/manl/create_operator.l
> /usr/man/manl/create_rule.l
> /usr/man/manl/create_sequence.l
> /usr/man/manl/create_table.l
> /usr/bin/pg_dump
> /usr/bin/pg_dumpall
> /usr/bin/pg_upgrade
> /usr/bin/pg_passwd
> /usr/bin/cleardbdir
> /usr/bin/createdb
> /usr/bin/createlang
> /usr/bin/createuser
> /usr/bin/destroydb
> /usr/bin/destroylang
> /usr/bin/destroyuser
> /usr/bin/initdb
> /usr/bin/vacuumdb
> /usr/bin/initlocation
> /usr/bin/ipcclean
> /usr/include/lib
> /usr/include/lib/dllist.h
> /usr/include/pgsql
> /usr/include/pgsql/access
> /usr/include/pgsql/access/attnum.h
> /usr/include/pgsql/commands
> /usr/include/pgsql/commands/trigger.h
> /usr/include/pgsql/executor
> /usr/include/pgsql/executor/spi.h
> /usr/include/pgsql/libpq
> /usr/include/pgsql/libpq/pqcomm.h
> /usr/include/pgsql/libpq/libpq-fs.h
> /usr/include/pgsql/libpq++
> /usr/include/pgsql/libpq++/pgconnection.h
> /usr/include/pgsql/libpq++/pgdatabase.h
> /usr/include/pgsql/libpq++/pgtransdb.h
> /usr/include/pgsql/libpq++/pgcursordb.h
> /usr/include/pgsql/libpq++/pglobject.h
> /usr/include/pgsql/port
> /usr/include/pgsql/port/linux
> /usr/include/pgsql/utils
> /usr/include/pgsql/utils/geo_decls.h
> /usr/include/pgsql/utils/elog.h
> /usr/include/pgsql/utils/palloc.h
> /usr/include/pgsql/utils/mcxt.h
> /usr/include/pgsql/fmgr.h
> /usr/include/pgsql/os.h
> /usr/include/pgsql/config.h
> /usr/include/pgsql/c.h
> /usr/include/pgsql/postgres.h
> /usr/include/pgsql/postgres_ext.h
> /usr/include/pgsql/libpq-fe.h
> /usr/include/pgsql/libpq-int.h
> /usr/include/pgsql/ecpgerrno.h
> /usr/include/pgsql/ecpglib.h
> /usr/include/pgsql/ecpgtype.h
> /usr/include/pgsql/sqlca.h
> /usr/include/pgsql/libpq++.H
> /usr/lib/libpq.a
> /usr/lib/libpq.so.2.0
> /usr/lib/libpq.so.2
> /usr/lib/libpq.so
> /usr/lib/libecpg.a
> /usr/lib/libecpg.so.3.0.0
> /usr/lib/libecpg.so.3
> /usr/lib/libecpg.so
> /usr/lib/libpq++.a
> /usr/lib/libpq++.so.3.0
> /usr/lib/libpq++.so.3
> /usr/lib/libpq++.so
> /usr/lib/plpgsql.so
> /usr/lib/pgsql
> /usr/lib/pgsql/global1.bki.source
> /usr/lib/pgsql/local1_template1.bki.source
> /usr/lib/pgsql/pg_geqo.sample
> /usr/man/manl/create_trigger.l
> /usr/man/manl/create_type.l
> /usr/man/manl/create_user.l
> /usr/man/manl/create_version.l
> /usr/man/manl/create_view.l
> /usr/man/manl/declare.l
> /usr/man/manl/delete.l
> /usr/man/manl/drop.l
> /usr/man/manl/drop_aggregate.l
> /usr/man/manl/drop_database.l
> /usr/man/manl/drop_function.l
> /usr/man/manl/drop_index.l
> /usr/man/manl/drop_language.l
> /usr/man/manl/drop_operator.l
> /usr/man/manl/drop_rule.l
> /usr/man/manl/drop_sequence.l
> /usr/man/manl/drop_table.l
> /usr/man/manl/drop_trigger.l
> /usr/man/manl/drop_type.l
> /usr/man/manl/drop_user.l
> /usr/man/manl/drop_view.l
> /usr/man/manl/end.l
> /usr/man/manl/explain.l
> /usr/man/manl/fetch.l
> /usr/man/manl/grant.l
> /usr/man/manl/insert.l
> /usr/man/manl/listen.l
> /usr/man/manl/load.l
> /usr/man/manl/lock.l
> /usr/man/manl/move.l
> /usr/man/manl/notify.l
> /usr/man/manl/reset.l
> /usr/man/manl/revoke.l
> /usr/man/manl/rollback.l
> /usr/man/manl/select.l
> /usr/man/manl/set.l
> /usr/man/manl/show.l
> /usr/man/manl/sql.l
> /usr/man/manl/update.l
> /usr/man/manl/vacuum.l
> /var/lib/pgsql
> /var/lib/pgsql/base
> /var/lib/pgsql/base/template1
> /var/lib/pgsql/base/template1/pg_proc
> /var/lib/pgsql/base/template1/pg_type
> /var/lib/pgsql/base/template1/pg_attribute
> /var/lib/pgsql/base/template1/pg_class
> /var/lib/pgsql/base/template1/pg_inherits
> /var/lib/pgsql/base/template1/pg_index
> /var/lib/pgsql/base/template1/pg_statistic
> /var/lib/pgsql/base/template1/pg_operator
> /var/lib/pgsql/base/template1/pg_opclass
> /var/lib/pgsql/base/template1/pg_am
> /var/lib/pgsql/base/template1/pg_amop
> /var/lib/pgsql/base/template1/pg_amproc
> /var/lib/pgsql/base/template1/pg_language
> /var/lib/pgsql/base/template1/pg_aggregate
> /var/lib/pgsql/base/template1/pg_ipl
> /var/lib/pgsql/base/template1/pg_inheritproc
> /var/lib/pgsql/base/template1/pg_rewrite
> /var/lib/pgsql/base/template1/pg_listener
> /var/lib/pgsql/base/template1/pg_description
> /var/lib/pgsql/base/template1/pg_attribute_relid_attnam_index
> /var/lib/pgsql/base/template1/pg_attribute_relid_attnum_index
> /var/lib/pgsql/base/template1/pg_attribute_attrelid_index
> /var/lib/pgsql/base/template1/pg_proc_oid_index
> /var/lib/pgsql/base/template1/pg_proc_proname_narg_type_index
> /var/lib/pgsql/base/template1/pg_proc_prosrc_index
> /var/lib/pgsql/base/template1/pg_type_oid_index
> /var/lib/pgsql/base/template1/pg_type_typname_index
> /usr/lib/pgsql/pg_hba.conf.sample
> /usr/man/man1/cleardbdir.1
> /usr/man/man1/createdb.1
> /usr/man/man1/createuser.1
> /usr/man/man1/destroydb.1
> /usr/man/man1/destroyuser.1
> /usr/man/man1/ecpg.1
> /usr/man/man1/initdb.1
> /usr/man/man1/initlocation.1
> /usr/man/man1/ipcclean.1
> /usr/man/man1/pg_dump.1
> /usr/man/man1/pg_dumpall.1
> /usr/man/man1/pg_passwd.1
> /usr/man/man1/pg_upgrade.1
> /usr/man/man1/postgres.1
> /usr/man/man1/postmaster.1
> /usr/man/man1/psql.1
> /usr/man/man3/catalogs.3
> /usr/man/man3/libpq.3
> /usr/man/man5/pg_hba.conf.5
> /usr/man/manl
> /usr/man/manl/abort.l
> /usr/man/manl/alter_table.l
> /usr/man/manl/alter_user.l
> /var/lib/pgsql/base/template1/pg_class_oid_index
> /var/lib/pgsql/base/template1/pg_class_relname_index
> /var/lib/pgsql/base/template1/pg_attrdef
> /var/lib/pgsql/base/template1/pg_attrdef_adrelid_index
> /var/lib/pgsql/base/template1/pg_relcheck
> /var/lib/pgsql/base/template1/pg_relcheck_rcrelid_index
> /var/lib/pgsql/base/template1/pg_trigger
> /var/lib/pgsql/base/template1/pg_trigger_tgrelid_index
> /var/lib/pgsql/base/template1/pg_description_objoid_index
> /var/lib/pgsql/base/template1/PG_VERSION
> /var/lib/pgsql/base/template1/pg_user
> /var/lib/pgsql/base/template1/pg_rules
> /var/lib/pgsql/base/template1/pg_views
> /var/lib/pgsql/base/template1/pg_tables
> /var/lib/pgsql/base/template1/pg_indexes
> /var/lib/pgsql/pg_variable
> /var/lib/pgsql/pg_database
> /var/lib/pgsql/pg_shadow
> /var/lib/pgsql/pg_group
> /var/lib/pgsql/pg_log
> /var/lib/pgsql/PG_VERSION
> /var/lib/pgsql/pg_hba.conf
> /var/lib/pgsql/pg_geqo.sample
> /var/lib/pgsql/pg_pwd