2007/01/23

Инструмент совместной работы NetOffice

Следуя инструкции docs/install.txt:

1. Распаковать архив netoffice в отдельную директорию, например /var/www/netoffice

2. Создать из шаблона файл конфигурации:

cd /var/www/netoffice/includes
cp settings_blank.php settings.php

3. Расставить необходимые права доступа для пользователя от имени которого работает web-сервер (например www)

chown -R www:www /var/www/netoffice
cd /var/www/netoffice
chmod 664 includes/settings.php
chmod 775 files
chmod 775 logos_clients

4. Подручными средствами (например, phpmyadmin) создать MySQL-базу и пользователя для работы с ней.

5. Продолжить установку в броузере по адресу http://localhost/netoffice/installation/setup.php

6. После успешной установки не забыть удалить директорию /var/www/netoffice/installation. Рабочая система совместной работы находится по адресу http://localhost/netoffice.

Кое-что необходимо доделать вручную:

7. Для того, чтобы иметь возможность использовать русский, литовские и другие языки в работе с проектами, необходимо указать кодировку UTF-8 в настройках административного доступа. Залогинившись администратором:

Administration ->Edit settings ->Advanced -> MySQL client charset : utf8

8. По непонятной причине английский интерфейс по умолчанию не использует UTF-8 кодировку, поэтому, например, извещения по e-mail с использованием русских символов начинают хромать. Но и это поправимо - в файле /var/www/netoffice/languages/lang_en.php поправить значение:

$setCharset = 'UTF-8';

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

# cd /var/www/netoffice/includes
# diff library_orig.php library.php
535,543c535,544
< $sr = ldap_search($conn, $configLDAP['searchroot'], 'uid=' . $formUsername); < $info = ldap_get_entries($conn, $sr); < $user_dn = $info[0]['dn']; < < bind =" ldap_bind($conn,"> $ldap_dn = "uid=".$formUsername.", ".$configLDAP['searchroot'];
> $ldap_response = @ldap_bind($conn, $ldap_dn, $formPassword);
>
> if ($ldap_response) {
> return(true);
> }
> else {
> return(false);
> }
>

В файле конфигурации /var/www/netoffice/includes/settings.php необходимо установить значения:

$useLDAP = 'true';
$configLDAP['ldapserver'] = 'ldapserver';
$configLDAP['searchroot'] = 'ou=People, o=My company, c=ru';

Теперь администратору достаточно добавить новых пользователей в системе NetOffice, username'ы которых будут совпадать с uid пользователей в указанной LDAP-директории, и можно начинать совместную работу над проектами!

Ссылки:

  1. NetOffice - free web based project-management environment

Security Standarts

Данный список включает в себя принятые стандарты по информационной безопасности, которые могут пригодиться при планировании и реализации информационной безопасности на предприятии.

ISO:
  • ISO/IEC 15408-1:2005 Information technology — Security techniques — Evaluation criteria for IT security - Part 1: Introduction and general model [1,2Mb]
  • ISO/IEC 15408-2:2005 Information technology — Security techniques — Evaluation criteria for IT security - Part 2: Security functional requirements [1,3Mb]
  • ISO/IEC 15408-3:2005 Information technology — Security techniques — Evaluation criteria for IT security - Part 3: Security assurance requirements [0,8Mb]
  • ISO/IEC 17799:2005 Information technology - Security techniques - Code of practice for information security management [2,5Mb]
  • ISO/IEC 27001:2005 Information technology - Security techniques - Information security management systems - Fundamentals and vocabulary [0,5Mb]
Российские:
  • ГОСТ Р ИСО/МЭК 15408-1-2002 Критерии оценки безопасности информационных технологий - Часть 1: Введение и общая модель (перевод 15408-1) [1,1Mb]
  • ГОСТ Р ИСО/МЭК 15408-2-2002 Критерии оценки безопасности информационных технологий - Часть 2: Функциональные требования безопасности (перевод 15408-2) [2,1Mb]
  • ГОСТ Р ИСО/МЭК 15408-3-2002 Критерии оценки безопасности информационных технологий - Часть 3: Требования доверия к безопасности (перевод 15408-3) [1,9Mb]
  • ГОСТ Р ИСО/МЭК 17799-2005 Практические правила управления информационной безопасностью (перевод 17799:2005) [0,55Mb]

2007/01/19

Обзор groupware/collaboration систем

Потратив немало времени на поиск и ознакомление с различными collaboration-средствами, у меня сформировался список обязательных требований, которым должно удовлетворять groupware-решение:
  • хранение и оперирование данными в кодировке UTF-8
  • удобность и простота в использовании (usability)
  • наличие календарей (личного и публичных)
  • наличие графиков динамики действующих
  • проект должен активно развиваться, чтобы обнаруженные ошибки исправлялись и появлялись новые возможности
  • оповещение по e-mail в процессе работы с проектом
В приведенной ниже таблице упомянуты только те продукты, которые я самолично опробовал. Все продукты open source.

Продукт
Версия Платформа Usability UTF-8 Динамика
развития
проекта
Наличие диаграмм
Наличие календарей Примечания
moregroupware
0.7.4 Apache/PHP/MySQL 3 -
низкая + -

phprojekt
5.1 Apache/PHP/MySQL 2 - активно
развивается
+ +
phpgroupware
0.9.16 Apache/PHP/MySQL 3 - средняя + +

conflux lite
1.3 Apache/Python/PgSQL 5 + средняя + + слишком мало функций в бесплатной версии
activeCollab
0.7.1 Apache/PHP/MySQL 5 + проект достаточно молодой - -
egroupware
1.2-105 Apache/PHP/MySQL 4 + активно
развивается
+ + неудобен в работе
hipergate
2.1 Tomcat/Java 2 + низкая - -
NetOffice
2.6.0b2 Apache/PHP/MySQL 5 + активно
развивается
+ + мой выбор!

Еще можно кратко упоминуть о:
  • Achievo - нет поддержки UTF-8, ужасный интерфейс
  • Covide - никакого usability
  • Double Choco Latte - нет поддержки UTF-8
  • Ivata - совсем сырой
  • Lucane - Java-приложение, каждое действие открывает новое окно. Крайне неудобно.
  • Open-Xchange - монстр. Даже имея полное описание установки, мне не хочется садиться за него (требует Tomcat, PostgreSQL, LDAP).
  • SugarCRM - слишком много всего лишнего. Наличие коммерческой версии наводит на мысль, что чего-то будет не хватать в свободной версии.
  • vtiger - слишком много всего лишнего.

2007/01/18

WebClient для SVN

Отличная реализация web-клиента для svn - Polarion svnwebclient.
Клиент написан на Java, поэтому для своей работы требует наличия соответствующей платформы: J2RE/J2SDK 1.4 (и выше) + Tomcat 4 (и выше). Это именно клиент - работает через WebDAV-протокол, поэтому для доступа к репозитарию необходимо предоставить аутентификационные данные (логин, пароль).

Особенности:
  • возможность добавлять директории и новые файлы (upload) в репозитарий прямо из броузера
  • наглядное сравнение двух ревизий одного файла (diff)
  • возможность забирать (download) директории из репозитария в виде zip-архива
  • возможность задавать требуемый репозитарий

Инсталляция очень проста - достаточно взять текущий shapshot и развернуть war-файл с помощью Tomcat (положить в директорию webapps). Файл WEB-INF/web.xml доступен для изменений - например, чтобы иметь возможность задавать требуемый репозитарий, необходимо изменить параметр RepositoryUrl на ParentRepositoryDirectory и задать соответствующий корень.

Ссылки:
  1. WebClient for SVN

2007/01/15

StartTLS - безопасный LDAP

TLS 1.0 (Transport Layer Security) - это протокол безопасной передачи данных, основанный на SSL 3.0 (Secure Socket Layer), отличается от него незначительно, поэтому термины SSL и TLS можно использовать как синонимы.

StartTLS - это механизм установления безопасного соединения на основе TLS-протокола. Данный механизм использует уже существующее соединение - для LDAP-соединения это 389-й порт (ldap://). Иногда его называют TLS upgrade по той же самой причине - испольузется уже установленное TCP-соединение.

LDAPS (ldaps://) - это тоже безопасное соединение, но оно инициируется на альтернативном порту (636).

После того как инициализация безопасного соединения прошла успешна, разницы между StartTLS и LDAPS нет.

Для того, чтобы LDAP-сервер умел формировать безопасное соединение, необходимо иметь SSL-сертификат для используемого сервера, подписанный Центром Сертификации (CA), сертификат которого в свою очередь находится в root-списке (ca-bundle.crt). В основной файл конфигурации как минимум должны быть добавлены следущие строки:
TLSCertificateFile /etc/ssl/public/server.crt  # сертификат ldap-сервера
TLSCertificateKeyFile /etc/ssl/private/server.key # ключ ldap-сервера
TLSCACertificateFile /etc/ssl/public/ca-bundle.crt # root-список

После перезапуска ldap-сервиса, StartTLS механизм можно проверить с помощью команды:

# ldapsearch -x -b "c=ru" -h slave_ldap.example.com -D "cn=admin,c=ru" -w password -d 1 -ZZ
...
TLS trace: SSL_connect:before/connect initialization
TLS trace: SSL_connect:SSLv2/v3 write client hello A
TLS trace: SSL_connect:SSLv3 read server hello A
TLS certificate verification: depth: 3, err: 0, subject: /O=EuroPKI/CN=EuroPKI Root Certification Authority, issuer: /O=EuroPKI/CN=EuroPKI Root Certification Authority
TLS certificate verification: depth: 2, err: 0, subject: /C=LT/O=EuroPKI/CN=EuroPKI Lithuanian Certification Authority, issuer: /O=EuroPKI/CN=EuroPKI Root Certification Authority
TLS certificate verification: depth: 1, err: 0, subject: /C=LT/O=Skaitmeninio Sertifikavimo Centras/CN=SSC Class 2 CA/serialNumber=3, issuer: /C=LT/O=EuroPKI/CN=EuroPKI Lithuanian Certification Authority
TLS certificate verification: depth: 0, err: 0, subject: /C=LT/O=UAB Skaitmeninio sertifikavimo centras/OU=Duomen\xC5\xB3 centras/CN=slave_ldap.example.com/serialNumber=33, issuer: /C=LT/O=Skaitmeninio Sertifikavimo Centras/CN=SSC Class 2 CA/serialNumber=3
TLS trace: SSL_connect:SSLv3 read server certificate A
TLS trace: SSL_connect:SSLv3 read server done A
TLS trace: SSL_connect:SSLv3 write client key exchange A
TLS trace: SSL_connect:SSLv3 write change cipher spec A
TLS trace: SSL_connect:SSLv3 write finished A
TLS trace: SSL_connect:SSLv3 flush data
TLS trace: SSL_connect:SSLv3 read finished A
...

Для безопасной (с использованием TLS) репликации данных на другой сервер предпочтительно использовать механизм StartTLS, без использования дополнительного ldaps-порта (636). Всё, что нужно поправить в этом случае в конфигурационном файле /etc/slapd.conf - добавить строку starttls=yes в настройку необходимой реплики (replica). Например:

...
replica uri=ldap://slave_ldap.example.com
starttls=critical
binddn="cn=admin,c=lt"
bindmethod=simple
credentials=password
...
Параметр starttls может принимать значение "yes", в этом случае, если в момент инициализации TLS-соединения возникли ошибки, соединение будет установлено без использования TLS. Рекомендуется - critical.

Ссылки:
  1. OpenLDAP Faq-O-Matic: How do I use TLS/SSL?
  2. RFC2830 - Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security
  3. RFC4513 - Lightweight Directory Access Protocol (LDAP): Authentication Methods and Security Mechanisms
  4. SLAPD.CONF(5)

Как затереть Linux-загрузчик на системе с установленной ОС Windows

С Windows 9x всё ясно и понятно - достаточно загрузиться в ДОС с загрузочной дискеты и попросить:

fdisk /mbr

С Windows XP как оказалось тоже всё элементарно:

  1. загрузиться с установочного (загрузочного) компакта
  2. выбрать Repair (r)
  3. указать пароль администратора
  4. командой fixmbr поправить загрузочную область диска

2007/01/12

OpenLDAP: установка, конфигурация репликации

Данное описание включает в себя описание установки и последующей настройки репликации LDAP-серверов OpenLDAP 2.2.23 на базе Debian Sarge 3.1.

Установка и первоначальная конфигурация

1. Установить OpenLDAP и необходимые утилиты:

# apt-get install slapd ldap-utils
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
libiodbc2 libperl5.8 libslp1
Suggested packages:
slpd openslp-doc ldap-utils
Recommended packages:
db4.2-util
The following NEW packages will be installed:
libiodbc2 libperl5.8 libslp1 slapd
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 1509kB of archives.
After unpacking 3998kB of additional disk space will be used.
Do you want to continue? [Y/n] y

Configuring slapd
The DNS domain name is used to construct the base DN of your LDAP directory.
Entering foo.bar.org will give you the base DN dc=foo, dc=bar, dc=org
DNS domain name:
example.com

Whatever you enter here will be stored as the name of your organization in the base DN of your LDAP directory.
Name of your organization:
My Company

Please enter the password for the admin entry in your LDAP directory
Admin password:
password
Confirm password:
password

The slapd daemon now disables the old LDAPv2 protocol by default.
Programs and users are generally expected to be upgraded to LDAPv3.
If you have old programs which have not been moved to use LDAPv3 and
you still need LDAPv2 support then select this option and 'allow bind_v2'
will be added to your slapd.conf to tell slapd to accept LDAPv2 connections.
Allow LDAPv2 protocol?
No

Setting up slapd (2.2.23-8) ...
Creating initial slapd configuration... done.
Creating initial LDAP directory... done.
Starting OpenLDAP: (db4.2_recover not found), slapd.

Дополнительную информацию об установленном пакете можно почерпнуть из документа /usr/share/doc/slapd/README.Debian

2. Теперь необходимо сконфигурировать LDAP-директорию на основании своих требований. Первым делом следует остановить сервис:

# /etc/init.d/slapd stop
Stopping OpenLDAP: slapd.

Если не устраивает структура директории, построенная по принципу доменных имен (dc=example, dc=com) и хочется использовать географическую структуру (o=My Company, c=LT), прежде необходимо удалить текущую базу LDAP. БД находится в /var/lib/ldap, файл DB_CONFIG является просто конфигурационным файлом и его пока не следует трогать.

Если структура по принципу доменных имен устраивает, то можно сразу "перенашнуть" на шаг №6.

3. Теперь следует поправить основной конфигурационный файл /etc/ldap/slapd.conf. Необходимо изменить suffix (например, на c=lt) и dn администратора в описании доступа (cn=admin,c=lt).

4. Перед запуском LDAP-директории, чтобы избежать проблемы "яйца и курицы", необходимо "наполнить" её минимальным содержанием - сформировать корень и добавить информацию о первом пользователе (cn=admin,lt). Для этого необходимо сформировать LDIF-файл, описывающий данные корень и первого пользователя. Пример содержания:

# cat ldap.ldif
# Entry 1: c=LT
dn: c=LT
c: LT
objectClass: country
objectClass: top

# Entry 2: cn=admin,c=LT
dn: cn=admin,c=lt
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword: {crypt}IvuNBMeSU9OzA

Для генерации crypt-хэша будущего пароля администратора можно воспользоваться утилитой makepassword:

# echo "password" | makepasswd --clearfrom=- --crypt
password IvuNBMeSU9OzA

С помощью утилиты slapadd наполняем первоначальным содержимым директорию:

# slapadd -l ldap.ldif

5. Запустить ldap-сервис и проверить работоспособность заново сконфигурированной директории

# /etc/init.d/slapd start
Starting OpenLDAP: (db4.2_recover not found), slapd.
# ldapsearch -x -b "c=lt" -D "cn=admin,c=LT" -w password -h localhost
# extended LDIF
#
# LDAPv3
# base with scope sub
# filter: (objectclass=*)
# requesting: ALL
#

# LT
dn: c=LT
c: LT
objectClass: country
objectClass: top

# admin, lt
dn: cn=admin,c=lt
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e2NyeXB0fUl2dU5CTWVTVTlPekE=

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2

# ldapsearch -x -b "c=lt" -h localhost
# extended LDIF
#
# LDAPv3
# base with scope sub
# filter: (objectclass=*)
# requesting: ALL
#

# LT
dn: c=LT
c: LT
objectClass: country
objectClass: top

# admin, lt
dn: cn=admin,c=lt
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2

Из вывода видно, что в первом случае при аутентификации использовался пользователь cn=admin,c=lt, имеющий доступ к паролям, во втором - анонимный пользователь, имеющий ограниченный круг прав.

6. На данном этапе можно наполнить содержимым только что созданную директорию и начать с ней полноценную работу. Для работы с содержимым ldap-директории существует масса различных программ-клиентов, приведу только те, что использую сам:

Репликация

Для простоты реализации репликации рассматривается 2 ldap-сервера, являющиеся зеркальными копиями друг друга, сконфигурированные по вышеприведенному описанию.

1. Остановить на обоих серверах slapd сервис.

2. На master-сервере в /etc/ldap/slapd.conf добавить описание реплики (slave-сервера):

replica  host=slave_ldap.example.com
"binddn=cn=admin,c=lt"
bindmethod=simple
credentials=password
replogfile /var/lib/ldap/replog
  • host - адрес slave-сервера
  • binddn - пользователь, который будет использоваться master-сервером, при передачи обновленных данных на slave-сервер. Он должен иметь соответствующий доступ на slave-сервере.
  • bindmethod - метод аутентификации. simple - всё передается в чистом виде, очень ненадежно с точки зрения информационной безопасности, но для тестовых целей или изолированной сети вполне подходит.
  • credentials - пароль пользователя binddn

3. На slave-сервере в /etc/ldap/slapd.conf добавить строки:

updatedn        "cn=admin,c=lt"
updateref "ldap://master_ldap.example.com"
  • updatedn - пользователь, которому разрешено проводить репликацию
  • updateref - ссылка на сервер, которая передается клиенту, если клиент пытается внести изменения на slave-сервере

4. Запустить slapd-сервисы на обоих серверах и проверить работоспособность репликации. В случае если изменения происходят на master-сервере, они почти моментально будут переданы на slave-сервер. Если же изменения клиент старается внести непосредственног на slave-сервере, ему будет возвращен адрес master-сервера:

# ldapmodify -f ldap.ldif -x -h slave_ldap.example.com -D "uid=user3,ou=people,c=lt" -w password
modifying entry "uid=user3,ou=people,c=lt"
ldap_modify: Referral (10)
referrals:
ldap://master_ldap.example.com/uid=user3,ou=People,c=lt

Ссылки:

  1. OpenLDAP Software 2.3 Administrator's Guide
  2. LDAPMODIFY(1)

Как получить crypt/md5-хэши паролей

CRYPT:

$ echo "SECRET" | makepasswd --clearfrom=- --crypt
$ perl -e "printf \"%s\n\", crypt ("SECRET", join ('', ('.', '/', 0..9, 'A'.. 'Z', 'a'..'z')[rand (64), rand (64)]))"

MD5:

$ echo "SECRET" | makepasswd --clearfrom=- --crypt-md5

2007/01/03

Установка Cacti 0.8.6i на Debian Etch 4.0

Установить с помощью менеджера пакетов apt:
apt-get install cacti

Перед установкой будет запущена программа автоматической конфигурации cacti. Если mysql-сервис находится не на этом же сервере, то от автоматической конфигурации следует отказаться.

Configure database for cacti with dbconfig-common? No

А в момент установки, будет выдана ошибка о невозможности присоединиться к mysql-серверу

Error installing database for cacti.  Retry? Ignore

Вся необходимая документация находиться в /usr/share/doc/cacti.

Создать вручную рабочую базу данных cacti_db

mysql -h host -u root -p
CREATE DATABASE `cacti_db` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
GRANT USAGE ON *.* TO 'cacti_user'@'host' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON `cacti_db`.* TO 'cacti_user'@'host';
exit
zcat /usr/share/doc/cacti/cacti.sql.gz | mysql -u cacti_user -h host -p cacti_db

В /etc/cacti/debian.php поправить значения для доступа к базе данных

Продолжить установку в броузере http://server/cacti/, все предложенные значения принять по умолчанию и, если всё успешно, войти под пользователем admin с паролем admin. При первом входе, cacti попросит сменить пароль администратора (admin).

Дополнение:

Если cacti присматривает за большим числом серверов, имеет смысл поменять скрипт, который занимается сбором данных c cmd.php на cactid, который намного быстрее работает в многопоточном режиме.

apt-get install cacti-cactid

Поправить значения для подключения в файле /etc/cacti/cactid.conf

Зайти в cacti под администратором и установиьт значение Poller Type:
Settings->Poller->Poller Type->cactid

Ссылки:
  1. Cacti: The Complete RRDTool-based Graphing Solution

2007/01/02

Sender Policy Framework (SPF)

Sender Policy Framework - очень интересное решение для борьбы с подделкой адреса отправителя. На данный момент все общедоступные сервисы Microsoft (hotmail.com, msn.com) используют его, поэтому, если Ваша система не настроена необходимым образом, велика вероятность блокировки Вашего почтового трафика серверами Microsoft.
Пример блокировки:
SMTP error from remote mailer after MAIL FROM: SIZE=1566:
host mx1.hotmail.com [65.54.245.8]: 550 Command rejected for policy reasons. For troubleshooting information, go to http://postmaster.msn.com

Схема функционирования данного решения приведена в статье "Аутентификация отправителей e-mail и борьба со спамом". Всё, что необходимо сделать на своей стороне - добавить TXT-запись определенного формата в DNS для каждого Вашего почтового домена. В приведенном списке ссылок есть 2 ссылки на wizard'ы (одна от Microsoft, другая от OpenSPF), которые позволяют сформировать необходимую запись, опираясь на заданные Вами требования.

Так как "Sender ID" до октября 2006 не был свободно распространяемым решением, в открытых MTA (Exim, Postfix) нет поддержки данного решения. Хочется надеяться, что это временно.

Примеры spf-записей в DNS:
Все сервера, указанные в качестве принимающих (mx-записи), могут отправлять почту от имени пользователей указанного домена
v=spf1 mx ~all
Почту от имени пользователей указанного домена могут отправлять 2 сервера (с ip-адресами 212.122.82.203 и 212.122.82.207):
v=spf1 ip4:212.122.82.203 ip4:212.122.82.207 ~all
Почту от имени пользователей указанного домена могут отправлять все сервера из данного домена, которые имеют в DNS ptr-записи:
v=spf1 ptr ~all
Здесь приведено полное описание всевозможного синтаксиса spf-записей.

Ссылки:
  1. Аутентификация отправителей e-mail и борьба со спамом
  2. Sender Policy Framework
  3. Sender ID Framework SPF Record Wizard
  4. Sender ID - Wikipedia
  5. Sender ID: Authenticating E-Mail (RFC 4406)
  6. Спам — проблема века
  7. Microsoft отказывается от копирайта на Sender ID