2006/12/15

SAMP (Solaris, Apache 2, MySQL 4, and PHP 5) Setup for Solaris 10

  • Apache 2.0.55
В дистрибутиве Solaris 10 (Entire или Developer) уже установлены Apache 1 и Apache 2, остается только сконфигурировать и запустить предпочтительный вариант. Сервисом Apache 2 в отличие от Apache 1 можно управлять из SMF, поэтому рассмотренный пример касается настройки именно Apache 2.

1. Скопировать конфигурационный файл с примерного файла конфигурации

# cp /etc/apache2/httpd.conf-example /etc/apache2/httpd.conf

2. Поправить, что необходимо в файле конфигурации руками

# vi /etc/apache2/httpd.conf

3. Включить сервис Apache 2 с помощью SMF

# svcadm enable apache2
# svcs -p apache2
STATE STIME FMRI
online 11:19:59 svc:/network/http:apache2
11:19:59 2927 httpd
11:20:00 2928 httpd
11:20:00 2929 httpd
11:20:00 2930 httpd
11:20:00 2931 httpd
11:20:00 2932 httpd


  • MySQL 4.1.22

1. В дистрибутиве Solaris 10 (Entire или Developer) уже установлены все необходимые пакеты для развертывания MySQL-сервиса версии 4.0.24. Версия достаточно устарела, поэтому рекомендуется ее удалить.

pkgrm SUNWmysqlt SUNWmysqlr SUNWmysqlr

2. Для установки новой версии MySQL необходимо воспользоваться системой пакетов Blastwave для Solaris OS. О том, как начать пользоваться этой системой можно прочесть на соответствующем HowTo.

На данный момент самая последняя версия MySQL 4.1.22 сборка 2006.11.28. В процессе установки будут установлены пакеты, для устранения зависимостей (berkleydb, perl, openssl и т.д.). Также будут заданы вопросы касающиеся конфликтных ситуаций и использования прав суперпользователя (root) - инсталлятор натыкается на уже существующие папки и видит в этом возможный конфликт, а root необходим для создания новых пользователей и других системных операций. На самом деле ничего серьезного в эти сообщениях нет.

# /opt/csw/bin/pkg-get -i mysql4 mysql4client mysql4devel mysql4rt
# /opt/csw/bin/pkg-get -i mysql4test

3. Скопировать необходимый файл конфигурации

# cd /opt/csw/mysql4/share/mysql/
# cp my-small.cnf /opt/csw/mysql4/my.cnf

4. Поправить, что необходимо в файле конфигурации руками

# vi /opt/csw/mysql4/my.cnf

5. Инициализировать MySQL БД и поправить необходимые права доступа к директории /opt/csw/mysql4/var

# cd /opt/csw/mysql4/
# ./bin/mysql_install_db
Installing all prepared tables
Fill help tables
...
# chown -R mysql:mysql ./var

6. Включить MySQL-сервис с помощью SMF

# svcs -a | grep mysql
disabled 12:22:58 svc:/network/cswmysql4:default
# svcadm enable svc:/network/cswmysql4:default
# svcs -a | grep mysql
online 12:26:22 svc:/network/cswmysql4:default

7. Задать пароли для суперпользователя

# /opt/csw/mysql4/bin/mysqladmin -u root password 'your_password'
# /opt/csw/mysql4/bin/mysqladmin -u root -h your_hostname password 'your_password'


  • PHP 5.2.0

1. Установить системную переменную PATH

# export PATH=/opt/csw/bin:/usr/sfw/bin:/usr/sbin:/usr/bin:/usr/openwin/bin:/usr/dt/bin:/usr/ccs/bin

2. Для сборки PHP понадобятся утилиты из проекта GNU.

# pkg-get -i autoconf
...
# which autoconf && autoconf --version | head -2
/opt/csw/bin/autoconf
autoconf (GNU Autoconf) 2.59
Written by David J. MacKenzie and Akim Demaille.

# pkg-get -i automake
...
# which automake && automake --version | head -2
/opt/csw/bin/automake
automake (GNU automake) 1.9.6
Written by Tom Tromey .

# pkg-get -i gsed
...
# which gsed && gsed --version | head -2
/opt/csw/bin/gsed
GNU sed version 4.1.4
Copyright (C) 2003 Free Software Foundation, Inc.

# which gcc && gcc --version | head -2
/usr/sfw/bin/gcc
gcc (GCC) 3.4.3 (csl-sol210-3_4-branch+sol_rpath)
Copyright (C) 2004 Free Software Foundation, Inc.
# which gmake && gmake --version | head -2
/usr/sfw/bin/gmake
GNU Make 3.80
Copyright (C) 2002 Free Software Foundation, Inc.

# which flex && flex --version | head -2
/usr/sfw/bin/flex
flex version 2.5.4

# which bison && bison --version | head -2
/usr/sfw/bin/bison
bison (GNU Bison) 1.875
Written by Robert Corbett and Richard Stallman.

# which gm4 && gm4 --version | head -2
/opt/csw/bin/gm4
GNU M4 1.4.5
Written by Rene' Seindal.

# which perl && perl -v | head -2
/opt/csw/bin/perl

This is perl, v5.8.8 built for i86pc-solaris-thread-multi

# which gunzip && gunzip -V | head -2
/usr/bin/gunzip
gunzip 1.3.3-patch.1
(2002-03-08)

# which gtar && gtar --version | head -2
/usr/sfw/bin/gtar
tar (GNU tar) 1.14
Copyright (C) 2004 Free Software Foundation, Inc.

3. Собрать и установиьт библиотеку libxml

# mkdir /var/spool/src
# chmod 777 /var/spool/src
# cd 777 /var/spool/src
# wget ftp://fr.rpmfind.net/pub/libxml/libxml2-2.6.27.tar.gz
...
# gunzip -cd libxml2-2.6.27.tar.gz | gtar xvpf -
# cd libxml2-2.6.27
# ./configure
...
# gmake
...
# gmake install
...

4. Собрать из полученных исходников PHP 5.2.0

# cd /var/spool/src
# wget http://lt.php.net/get/php-5.2.0.tar.gz/from/this/mirror
# gunzip -cd php-5.2.0.tar.gz | gtar xvpf -
# cd php-5.2.0
# ./configure --with-apxs2=/usr/apache2/bin/apxs --enable-dbase \
--with-libxml-dir=/usr/local --with-config-file-path=/etc/apache2 \
--with-mysql=shared,/opt/csw/mysql4 \
--with-mysqli=shared,/opt/csw/mysql4/bin/mysql_config \
--with-xpm-dir=/usr --with-gd --with-tiff-dir=/usr --with-bz2=/usr/lib \
--with-jpeg-dir=/usr --with-png-dir=/usr --with-zlib --enable-mbstring \
--enable-calendar--enable-bcmath --enable-ftp --enable-exif
# gmake
...
# gmake install
...

5. Скопировать конфигурационный файл с примерного файла конфигурации

cp php.ini-dist /etc/apache2/php.ini

6. Внести необходимые изменения в конфигурационный файл PHP. Установить переменную extension_dir = /usr/local/lib/php/extensions/no-debug-non-zts-20060613 и добавить mysql-расширение (extension=mysql.so)

# ls -l /usr/local/lib/php/extensions/no-debug-non-zts-20060613
total 1072
-rwxr-xr-x 1 root root 422864 Dec 15 14:13 mysqli.so
-rwxr-xr-x 1 root root 102748 Dec 15 14:13 mysql.so
# vi /etc/apache2/php.ini
...
extension_dir = /usr/local/lib/php/extensions/no-debug-non-zts-20060613
extension=mysql.so
...

7. Внести необходимые изменения в конфигурационный файл Apache. Строка "LoadModule php5_module libexec/libphp5.so" уже должна присутствовать.

# vi /etc/apache2/httpd.conf
...
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
...

8. Перезапустить Apache

svcadm restart svc:/network/http:apache2

9. Проверить работоспособность открыв http://localhost/pi.php

# cd /var/apache2/htdocs
# cat > pi.php

^C

Ссылки:

  1. AMPS (Apache MySQL PHP SSL) for Solaris 10
  2. Deployment Guide for an Open Source Stack on the Solaris 10 OS
  3. SAMP (Solaris, Apache 2, MySQL 5, and PHP 5) Setup for Solaris 10 OS and Solaris Express

Как завершить все процессы для конкретного пользователя

Для Linux/FreeBSD/Solaris:
kill -9 `ps -U username -o pid | grep [0-9] | xargs`

2006/12/11

Установка Sun Ray Server Software 3.1 на Solaris 10 (x86)

1. Распаковать полученный архив с Sun Ray Server Software.

unzip srss_3.1.zip
cd srss_3.1.zip

2. Запустить скрипт установки. Ответить на все возникаемые в ходе вопросы на основе требований к будущей системе. Java находится в каталоге /usr/j2se (по-умолчанию).

./utinstall

3. Перегрузить систему после успешной установки всех пакетов

sync;sync;init 6

4. Сконфигурировать Sun Ray сервис. В приведенном ниже примере используются настройки, идущие по-умолчанию. DHCP сервис не запущен потому, как в сети уже есть действующий DHCP-сервис. Чтобы Saun Ray-терминалы знали, где искать Sun Ray Server, на уже работающем DHCP-сервере необходимо добавить еще одну опцию для выдачи клиентам - X Window System Display Manager Option (49).

cd /opt/SUNWut/sbin
./utadm -A 192.168.1.0
### Configuring /etc/nsswitch.conf
### Configuring Service information for Sun Ray
### Disabling Routing
Selected values for subnetwork "192.168.1.0"
net mask: 255.255.255.0
no IP addresses offered
auth server list: 192.168.1.1
firmware server: 192.168.1.1
Accept as is? ([Y]/N):
### Configuring firmware version for Sun Ray
### Successfully enabled tftp for firmware downloads
All the units served by "sun" on the 192.168.1.0
network interface, running firmware other than version
"3.1_32,REV=2005.08.24.08.55" will be upgraded at their next power-on.

### Configuring Sun Ray Logging Functions
### Turning on Sun Ray LAN connection

NOTE: utrestart must be run before LAN connections will be allowed

DHCP is not currently running, should I start it? ([Y]/N): n

#### DHCP daemon not started. You will need to manually start one
using "/etc/init.d/dhcp start".

5. Перезапустить сервис с новыми настройками

# ./utrestart -c
A cold restart has been initiated... messages will be logged to /var/opt/SUNWut/log/messages.

Ссылки:
  1. Sun Ray Server Software
  2. docs.sun.com: Sun Ray Software 4 Collection
  3. Sun Ray Software
  4. RFC 2132 - DHCP Options and BOOTP Vendor Extensions

Solaris 10: "доведение до ума"

Если в процессе установки Вы выбрали Name Service: None, значит после установки необходимо будет вручную создать файл /etc/resolv.conf со списком используемых DNS-серверов, иначе разрешение dns-имен в ip-адреса будет недоступно. А в файле nsswitch.conf поправить строку:
hosts: files dns

Подключение монитора, не поддерживающего список разрешений и частот, задаваемых X-сервером, может стать причиной НЕзапуска X-сервера в Solaris 10. Я сам долго удивлялся, пока не попробовал другой монитор. Вот что можно найти в /var/log/X.org.log в случае возникновения подобной ошибки:

(EE) Screen(s) found, but none have a usable configuration.

Fatal server error:
no screens found

Please refer to your Operating System Vendor support pages
at http://sunsolve.sun.com/ for support on this crash.
Please also check the log file at "/var/log/Xorg.0.log" for additional information.

XIO: fatal IO error 146 (Connection refused) on X server ":0.0"
after 0 requests (0 known processed) with 0 events remaining.


2006/12/07

lpsched - Stopping because process dumped core

Только я разобрался с вводом русского/литовского языков (стал использовать en_US.UTF-8) в Solaris 10, как появилась проблема с печатью.

Картина следующая: имеется сетевой принтер Samsung 2550, отлично работающий с Windows-машинами. С помощью Printer Manager добавляю сетевой принтер (в списке даже есть указанная модель), указываю его "принтером по умолчанию", даю доступ к нему для всех (all). Всё хорошо до тех пор, пока не отправишь что-нибудь на печать.

После того как что-то появляется в очереди на печать, сервис печати (lpsched) начинает останавливаться и перезапускаться. И так происходит, пока не очистишь очередь.

То, что сервис перезапускается видно по значку звёздочки (*)

obs1:/var/spool/lp/logs# svcs -a|grep print
online 12:31:10 svc:/application/print/rfc1179:default
online 9:16:08 svc:/application/print/cleanup:default
online* 12:35:06 svc:/application/print/server:default
obs1:/var/adm# lpstat -a
UX:lpstat: ERROR: Can't send message to the LP print service.
TO FIX: The LP print service apparently has been
stopped. Get help from your system
administrator.
obs1:/# svcs -p svc:/application/print/server:default
STATE STIME FMRI
online* 15:47:14 svc:/application/print/server:default
15:47:14 13665 lpsched
obs1:/# svcs -p svc:/application/print/server:default
STATE STIME FMRI
online* 15:47:20 svc:/application/print/server:default

А вот что в логе:

# tail -20 /var/svc/log/application-print-server:default.log
Print services started.
[ Nov 18 11:47:19 Method "start" exited with status 0 ]
[ Nov 18 11:47:19 Stopping because process dumped core. ]
[ Nov 18 11:47:19 Executing stop method ("/lib/svc/method/print-svc stop") ]
Print services stopped.
[ Nov 18 11:47:19 Method "stop" exited with status 0 ]
[ Nov 18 11:47:22 Executing start method ("/lib/svc/method/print-svc start") ]
Print services started.
[ Nov 18 11:47:22 Method "start" exited with status 0 ]
[ Nov 18 11:47:23 Stopping because process dumped core. ]
[ Nov 18 11:47:23 Executing stop method ("/lib/svc/method/print-svc stop") ]
Print services stopped.
[ Nov 18 11:47:23 Method "stop" exited with status 0 ]
[ Nov 18 11:47:25 Executing start method ("/lib/svc/method/print-svc start") ]
Print services started.
[ Nov 18 11:47:26 Method "start" exited with status 0 ]
[ Nov 18 11:47:26 Stopping because process dumped core. ]
[ Nov 18 11:47:26 Executing stop method ("/lib/svc/method/print-svc stop") ]
Print services stopped.
[ Nov 18 11:47:26 Method "stop" exited with status 0 ]

Как видно из лога, сервис останавливается по причине Stopping because process dumped core, но, порывшись день, я ничего вразумительного не наловил, кроме двух ссылок, где встречается та же самая ошибка:

http://forum.sun.com/jive/thread.jspa?messageID=385983
http://forum.sun.com/jive/thread.jspa?threadID=75385

Проблема решается установкой параметра protocol=bsd, вместо tcp.
С protocol=tcp всё падает без слов.

2006/11/30

Xming - X Server для Windows

Чтобы использовать windows-машину в качестве X-терминала, на ней самой необходимо иметь запущенный локальный X-Server. Отличным выбором для таких целей будет Xming.

Варианты использования:

1. У Вас есть удаленный сервер, на котором запущена какая-то графическая оболочка (диспетчер окон). Вам необходимо запустить какое-то приложение, которое имеет графический интерфейс.

Решение:

  • Запустить Xming на вашей Windows-машине
  • Залогиниться с помощью консольного клиента (putty) на Ваш удаленный сервер.
  • С помощью команды DISPLAY=ip_адрес_windows_машины:0.0 указать, куда будет передано изображение
  • Запустить приложение, требующее графической среды (например gnome-calc)

2. У Вас есть локальный сервер, с которым вы хотите работать в терминальном режиме - подсоединяться с компьютера-терминала, логиниться и работать с удаленным рабочим столом.

Решение:

  • Запустить Xming на вашей Windows-машине с помощью XLaunch-wizard с следующей конфигурацией: Display Settings - One Window/Full Screen; Session Type - Open Session via XDMCP.
  • Логиниться в полученном графическом терминале и работать в своё удовольствие.

Ссылки:
  1. Википедия - X Window System
  2. HOW-TO: X11 forwarding с ssh, putty и Xming
  3. Xming
  4. What Is the X Window System
  5. X Window - восполняя пробелы. Часть 1
  6. X Window - восполняя пробелы. Часть 2
  7. X Window - восполняя пробелы. Часть 3

2006/11/21

OpenTSA

Данное описание затрагивает процесс установки "time stamping" сервиса на базе патча к openssl и модуля mod_tsa к http-серверу Apache. Проект открытый, назван OpenTSA и достаточно активно развивается. Итак:

1. Выбранная версия openssl и соответствующий этой версии tsa-патч ставятся полностью по инструкции. Если в процессе сборки не возникло критических ошибок, на warning-сообщения можно не обращать внимания.

2. Apache2 должен быть собран на только что установленном openssl (в данном случае это /usr/local/openssl-0.9.8c):

./configure --prefix=/usr/local/apache2 --enable-ssl --with-ssl=/usr/local/openssl-0.9.8c
make && make install

3. Собрать модуль mod_tsa с помощью apxs из только что установленного Apache:

tar zxf  mod_tsa-xxxxxxxx.tgz
cd mod_tsa
make OPENSSL=/usr/local/openssl-0.9.8c APXS=/opt/apache2/bin/apxs APACHECTL=/opt/apache2/bin/apachectl
make install OPENSSL=/usr/local/openssl-0.9.8c APXS=/opt/apache2/bin/apxs APACHECTL=/opt/apache2/bin/apachectl

4. Подготовить базу данных для хранения timestamp-ответов, создать пользователя, который будет иметь неограниченный доступ и создать в готовой базе рабочую таблицу token:

CREATE TABLE `token` (
`token_id` varchar(40) collate utf8_unicode_ci NOT NULL default '',
`token_date` datetime NOT NULL default '0000-00-00 00:00:00',
`token_pkcs7` blob NOT NULL,
PRIMARY KEY (`token_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

5. Сгенерировать приватный ключ и сертификат на только что собранном openssl, так как он имеет необходимое расширение для сертификатов - Time Stamping.

/usr/local/openssl-0.9.8c/bin
./openssl genrsa -out server.key 2048
./openssl req -key server.key > server.csr

Отдать сгенерированный csr-файл своему CA, получить в ответ сертификат с timestamp-расширением, необходимый для функционирования модуля mod_tsa.

6. Добавить в конфигурацию Apache описание модуля и запустить Apache:

LoadModule tsa_module         modules/mod_tsa.so


SetHandler tsa
Order allow,deny
Allow from all

TSASerialFile conf/tsaserial
TSACertificate /usr/local/apache2/conf/server.crt
TSACertificateChain /usr/local/apache2/conf/ca-bundle.crt
TSAKey /usr/local/apache2/conf/server.key
TSADBModule MySQL
TSAMySQLHost localhost
TSAMySQLUser tsa_user
TSAMySQLDatabase tsa_db
# лучше открыть доступ без пароля, иначе при каждом новом старте
# Apache будет спрашивать пароль к БД
TSAMySQLPassPhrase Off

TSAKeyPassPhrase off
TSADefaultPolicy 1.1.2
TSAPolicies 1.1.3 1.1.4
TSAMessageDigests sha1 md5
TSAAccuracy 60 0 0
TSAClockPrecisionDigits 0
TSAOrdering On
TSAIncludeName On
TSAESSCertIdChain On

Полное описание всех используемых директив есть на домашней странице модуля. Также данный модуль ведет достаточно подробный лог, что может быть полезным при исправлении встречающихся ошибок.

2006/11/17

modXLdapAuth

Для того, чтобы аутентифицировать пользователя по сертификату в Apache достаточно добавить соответствующую директиву (SSLVerifyClient). Но в таком случае очень неудобно строить политику доступа - нет ни базы сертификатов, с которой бы можно было оперировать, ни возможностей по разграничению доступа (авторизации). На помощь приходит модуль modXLdapAuth (homepage), который использует LDAP как хранилище пользовательских данных, взятых из сертификатов и предоставляющий дополнительные средства для реализации политики доступа к закрытым ресурсам. Единственное ограничение с которым я столкнулся - модуль работает только с Apache 2.0.x (ветки 1.3 и 2.2 не поддерживаются).

Прежде чем начинать сборку модуля необходимо подготовить LDAP сервер - необходимо включить в конфигурацию сервиса дополнительную схему (schema) modXLDAPAuth [1Kb]. В OpenLDAP это делается добавлением строки
include         /etc/ldap/schema/modXLDAPAuth.schema

в основной файл конфигурации slapd.conf.

После того как дополнительная схема загружена, можно создать запись о будущем пользователе, дополнительно указав атрибуты, взятые из сертификата пользователя:

CertificateClientCN - обычно имя, на которое выдан сертификат
CertificateIssuer - CA, выдавший сертификат
CertificateSerialNumber - серийный номер сертификата

По данным атрибутам будет осуществляться аутентификация с использованием сертификата.
Получившаяся запись о пользователе будет иметь вид:

dn: uid=ivpetr,ou=People,o=company,c=ru
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
objectClass: Certmap
uid: ivpetr
structuralObjectClass: inetOrgPerson
CertificateClientCN:: Petrov Ivan
CertificateIssuer: Office CA
CertificateSerialNumber: 0D
cn: Ivan
mail: petrov@company.com
telephoneNumber: +790234567
userPassword:: e3NoYX0vbitrQTZZTzc3NnJTQ29Wczc4TGFQdCs1eTQ9

После этого можно начинать сборку модуля:

./configure --with-apxs=/usr/local/apache2/bin/apxs --with-ldap-dir=/usr --with-openssl=/usr
make && make installl

Пример конфигурации успешно собранного модуля


SSLRequireSSL
SSLVerifyClient require
SSLVerifyDepth 5
SSLOptions +FakeBasicAuth +StrictRequire +StdEnvVars +ExportCertData
Order allow,deny
Allow from all
AllowOverride AuthConfig
XLDAPAuthoritative on
XLDAPAuthServer localhost
XLDAPAuthBindDN "cn=manager,o=company,c=ru"
XLDAPAuthBindPw "mamamia"
XLDAPAuthSuffix "ou=People,o=company,c=ru"
XLDAPAuthFilter "(&(CertificateIssuer=%{SSL_CLIENT_I_DN_CN})(CertificateSerialNumber=%{SSL_CLIENT_M_SERIAL})(CertificateClientCN=%{SSL_CLIENT_S_DN_CN}))"
XLDAPAuthLogLevel info
XLDAPAuthRemoteUserAttr uid

На основании приведенной выше конфигурации Apache будет вести себя следующим образом:

  • для аутентификации будет требоваться сертификат пользователя (глубина проверки 5)
  • для поиска по LDAP серверу будет использоваться пользователь"cn=manager,o=company,c=ru" с паролем mamamia
  • поиск по LDAP директории будет осуществляться по фильтру - на основании атрибутов CertificateClientCN, CertificateIssuer, CertificateSerialNumber
  • переменная REMOTE_USER будет выставлена в данные, взятые из атрибута uid (в нашем случае, если пользователь Ivan Petrov пройдет аутентификацию, эта переменная будет выставлена в значение ivpetr)
Модуль успешно работает с пользовательскими данными на русском и литовском языках.
Достаточно подробное описание работы и конфигурации модуля есть на его домашней странице. Единственное, что пока не понятно - почему до сих пор не существует серьезных разработок в области аутентификационных модулей на основе сертификатов, потому как в описанном модуле остаются недоработки и ошибки.

2006/11/16

jUDDI

jUDDI - это JAVA-реализация UDDI (Universal Description, Discovery, and Integration) сервиса для обслуживания вебслужб. Установку можно произодить по описанию, но оно достаточно сильно устарело и несколько отличается от текущего момента. Данная заметка описывает установку jUDDI 0.9rc4 на Apache Tomcat 5.5.15.

1. Базу данных (juddi_db) лучше подготовить своими средствами (phpmysqladmin), создать пользователя и дать ему необходимые права для работы с базой. Скрипт juddi/sql/mysql/create_database.sql (удалить начальные строки про создание базы и добавление привилегий) можно использовать для создания каркаса будущей базы. Скрипт insert_publishers.sql позволяет добавить первого пользователя для публикации веб-сервисов.

2. Распаковать juddi.war в $TOMCAT_HOME/webapps/juddi

3. В файл $TOMCAT_HOME/webapps/juddi/WEB-INF/juddi-users.xml вставить пользователя, который был только что добавлен в базу скриптом insert_publishers.sql.

4. Файл $TOMCAT_HOME/webapps/juddi/WEB-INF/juddi.properties привести в соответствие Вашим требованиям - задать переменные juddi.operatorName, juddi.discoveryURL, juddi.operatorEmailAddress.

5. Добавить в основной файл конфигурации $TOMCAT_HOME/conf/server.xml описание контекста



driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/juddi_db?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8"
username="username"
password="password"
maxActive="20"
maxIdle="3"
removeAbandoned="true"
maxWait="3000" />

6. Протестировать всё ли в порядке по адресу http://localhost:8080/juddi/happyjuddi.jsp. Наверняка придется вручную устранять кое-какие зависимости, но это не так то сложно - найти jar-файл и положить его в $TOMCAT_HOME/common/lib.

Ссылки:
  1. jUDDI project

2006/11/14

Сборка mod_jk под Apache2

Иногда необходимо объединить усилия Apache и Tomcat - например аутентификацию пользователя проводить средствами Apache, и если аутентификация пройдена, показывать контент средствами Tomcat. Такую схему можно реализовать с помощью модуля mod_jk для Apache. Отсюда можно взять последнюю версию исходников модуля.
wget tomcat-connectors-1.2.x-src.tar.gz
tar zxf tomcat-connectors-1.2.x-src.tar.gz
cd tomcat-connectors-1.2.x-src/native
./configure --with-apxs=/usr/local/apache2/bin/apxs
make && make install

Модуль mod_jk.so появился в директории /usr/local/apache2/modules/

Необходимо его прописать в httpd.conf:

LoadModule jk_module    modules/mod_jk.so

Добавить описание модуля (mod_jk.conf):

# The location where mod_jk will find the workers definitions
JkWorkersFile /usr/local/apache2/conf/workers.properties
# The location where mod_jk is going to place its log file
JkLogFile /usr/local/apache2/logs/mod_jk.log
JkLogLevel info
JkMount /pathtotomcat/* ajp13_worker

В папке /tomcat-connectors-1.2.19-src/conf можно найти пример файла worker.properties.

2006/11/13

Smoothwall Express 2.0 + Snort (with MySQL)

Чтобы включить систему обнаружения атак (IDS) Snort в Smoothwall достаточно установить соответствующую галочку в web-интерфейсе, но такой путь не предоставит всех возможностей для работы с IDS Snort. Данное описание охватывает обновление версии Snort, добавление возможности вести события (alerts) в базе (mysql) и установку инструментария для работы с накопленной базой событий.

Поэтому первым дело необходимо установить обновленную версию Snort для Smoothwall Express 2.0. Последнюю версию данного расширения можно взять тут.

1. Поместить скаченное расширение на Smoothwall Express можно с помощью scp:

scp user@hostname:~/Snort-Update-2.x.x-MySQL.tgz /tmp

2. Разархивируем содержимое архива и все станет на свои места

tar zxvf ./Snort-Update-2.x.x-MySQL.tgz -C /

3. Переписать файл файл /usr/local/bin/snort новым файлом snort-mysql

cp /usr/local/bin/snort-mysql /usr/local/bin/snort
cp: overwrite `/usr/local/bin/snort'? y

4. Подготовить базу данных Snort, для этого в дистрибутиве Snort в директории schemas имеются скрипты для различных СУБД - для MySQL - create_mysql. Необходимо создать 2 базы данных - snort_db и snort_archive_db - первая непосредственно для отслеживания событий, вторая для архивирования старых событий (понадобится для работы с BASE).

5. Отредактировать /etc/snort.conf

Закомментировать
# include /etc/snort/vars
Задать переменные
var HOME_NET [192.168.1.0/24,212.122.83.100]
var EXTERNAL_NET !$HOME_NET
В препроцессор sfportscan можно добавить список хостов для игнорирования событий о сканировании портов сканерами домашней сети (HOME_NET)
ignore_scanners { 192.168.1.0/24 }
Добавить output-описания:
output alert_full: alert # Snort будет продолжать писать в /var/log/snort/alert
output database: log, mysql, user=user password=pass dbname=snort_db host=192.168.1.1 # и в БД

6. Проверить работоспособность новой версии Snort можно, запустив комманду:

/usr/local/bin/snort -c /etc/snort.conf -D -u snort -g snort -d -e -z -i eth1

Если все в порядке в списке процессов (ps ax) одним из последних будет Snort.

Скрипт /usr/local/bin/restartsnort не подходит для использования, поэтому его необходимо заменить на рабочий вариант.
# cat > /usr/local/bin/stopsnort
#!/bin/bash
kill -9 `cat /var/run/snort*.pid`
[Ctrl + C]
# cat > /usr/local/bin/startsnort
#!/bin/bash
/usr/local/bin/snort -c /etc/snort.conf -D -u snort -g snort -d -e -z -i eth1
[Ctrl + C]
# cat > /usr/local/bin/restartsnort
#!/bin/bash
/usr/local/bin/stopsnort; sleep 3; /usr/local/bin/startsnort
[Ctrl + C]
# chmod 755 /usr/local/bin/stopsnort
# chmod 755 /usr/local/bin/startsnort
# chmod 755 /usr/local/bin/restartsnort

Если в конфигурационном файле snort.conf включен препроцессор perfmonitor, то необходимо добавить в ротацию журналов файл /var/log/snort/snort.stats - он достаточно быстро растет. Препроцессор rpc_decode можно выключить (закомментировать), если не используются RPC-службы.

Для удобной работы с накопленной базой событий существует система BASE (Basic Analysis and Security Engine). Это "реинкарнация" старой ACID-системы, которая в данный момент больше не развивается. BASE активно разрабатывается и всегда доступен на SourceForge. Для работы с BASE нужно иметь несколько дополнительных средств:

  • ADODB
  • GD
  • PEAR
  • Image_Graph
Если есть pear, ставится элементарно:
pear install Image_Color
pear install Image_Canvas-alpha
pear install Image_Graph-alpha

Если с pear сложности, достаточно скачать все эти пакеты с http://pear.php.net/, распаковать в одну директрию, например Image и эту директорию положить в такое место, куда по умолчанию заглядывает php.

Установка BASE проста

# tar -xvzf base-x.x.x.tar.gz
# cd base-x.x.x
# cp base_conf.php.dist base_conf.php

Редактируем base_conf.php:

$BASE_urlpath = “/base”;
$DBlib_path = "Путь до adodb";
$DBtype = "mysql";
$alert_dbname = "snort_db";
$alert_host = "localhost";
$alert_port = "";
$alert_user = "snort";
$alert_password = "new_password";
$archive_dbname = "snort_archive_db";
$archive_host = "localhost";
$archive_port = "";
$archive_user = "snort";
$archive_password = "new_password ";

Аналогична установка для /base_archive:

$BASE_urlpath = “/base_archive”;
$DBlib_path = "Путь до adodb";
$DBtype = "mysql";
$alert_dbname = "snort_archive_db";
$alert_host = "localhost";
$alert_port = "";
$alert_user = "snort";
$alert_password = "new_password";
$archive_dbname = "snort_archive_db";
$archive_host = "localhost";
$archive_port = "";
$archive_user = "snort";
$archive_password = "new_password ";

Теперь Base доступен по адресу http://hostname/base (архив http://hostname/base_archive).

Ссылки:
  1. Snort 2.x.x (Plain, MySQL, PostgreSQL, ODBC, All)
  2. Snort, Apache, PHP, MySQL, and BASE on SuSe Setup Guide
  3. Detection of the Telecommunication Attacks: Theory and Practice, Snort
  4. The Three Snort Pigs. Snort Sensor Tuning Using SnortCenter
  5. More Suitable, Faster, Better: Snort + MySQL

2006/11/08

Отправка HTML-форматированного письма (с картинками)

Очень удобно сгенерированные HTML-отчеты (с картинками) читать из почтового клиента, но как оказалось, не так-то просто это сделать - одной командой тут не обойтись. На помощь приходит perl реализация - пакет MIME-Lite-HTML (документация). Не беда, если в системе пакетов (например Debian) не существует такого пакета - достаточно взять tar.gz-архив с сайта разработчиков, распаковать его и поместить файл HTML.pm в директорию с остальными perl-библиотеками (для Debian директория будет /usr/share/perl5/MIME/Lite).

Зависимости для MIME::Lite::HTML :
  • MIME::Lite
  • LWP::UserAgent
  • HTML::LinkExtor
  • URI::URL
Для устранения зависимостей в Debian необходимо установить пакеты libmime-lite-perl, libwww-perl и все их зависимости.

Как это работает:
1. Программа-анализатор генерирует html-отчет с картинками в локальную (закрытую) директорию на сервере (например /var/stats).
2. Приведенный ниже perl-скрипт генерирует на основе созданного htlm-отчета html-форматированное письмо, с сохранением всего содержимого (картинки), и отсылает готовое письмо по указанному адресу.

Пример perl-скрипта:
#!/usr/bin/perl -w
use MIME::Lite::HTML;
my $mailHTML = new MIME::Lite::HTML (
From => 'Charlie Root',
To => 'myemail@home.net',
IncludeType => 'cid',
Subject => 'Daily activity report',
);
$MIMEmail = $mailHTML->parse('file:///var/stats/index.htm');
$MIMEmail->send;


Как послать письмо с прикрепленным файлом из командной строки

Linux:
metasend -b -s "$SUBJECT" -f $TXTFILE -m text/plain -n -f $ATTFILE -m image/png -t $MAILTO
mpack -s "$SUBJECT" -c application/octet-stream $ATTFILE $MAILTO
mutt -a $ATTFILE -s "$SUBJECT" $MAILTO < $TXTFILE

Подсмотрено тут, опробовано самолично.

Ссылки:

  1. Sending files as mail attachments

2006/11/03

RdiffWeb

"rdiffWeb is a web interface for browsing and restoring from rdiff-backup repositories"

Отличная вещь для web-доступа к резервным копиям, сделанным утилитой rdiff-backup.

Зависимости:

  • Python
  • CherryPy v2.1
  • librsync
  • rdiff-backup
  • MySQLdb

Инсталляция очень проста:

tar zxf rdiffWeb-0.3.5.tar.gz
$ cd rdiffWeb-0.3.5
$ python setup.py build
$ python setup.py install

После этого необходимо сконфигурировать и запустить сервис

$ rdiff-web-config
$ /etc/init.d/rdiff-web start

В процессе конфигурации необходимо выбрать хранилище настроек (file или mysql-база). Рекомендую mysql-базу, так как в таком случае кроме удобства появляется возможность автоматически просматривать директории от указанного корня, вместо того, чтобы вбивать их вручную. Запущенная служба по умолчанию работает на порту 8080.

2006/10/31

ErrorDocument

Для того, чтобы обрабатывать все запросы на несуществующие страницы Apache имеет директиву ErrorDocument. Синтаксис прост:
ErrorDocument 404 /page404.php

Файл page404.php показывает возможные варианты применения данной функции

echo "REDIRECT_ERROR_NOTES=".$REDIRECT_ERROR_NOTES."
";
echo "REDIRECT_QUERY_STRING=".$REDIRECT_QUERY_STRING."
";
echo "REDIRECT_REQUEST_METHOD=".$REDIRECT_REQUEST_METHOD."
";
echo "REDIRECT_STATUS=".$REDIRECT_STATUS."
";
echo "REDIRECT_UNIQUE_ID=".$REDIRECT_UNIQUE_ID."
";
echo "REDIRECT_URL=".$REDIRECT_URL."
";
?>

Для того, чтобы директива срабатывала для MSIE, вывод page404.php должен быть не меньше 512 байт, иначе MSIE игнорирует сообщения, генерируемые сервером.

2006/10/24

Создание резервной копии базы данных mysql

Если размер mysql-базы настолько велик, что сделать копию web-средствами не представляется возможным, то можно применить консольную утилиту mysqldump
mysqldump -u username -ppassword database > database.sql

2006/10/16

Spamassassin + MySQL

Система фильтрации нежелательной корреспонденции Spamassassin умеет хранить пользовательские настройки, а также динамические базы, применяемые в работе (auto-whitelist, bayes filter) в SQL-базе данных. Ниже приведена настройка Spamassassin 3.0.3 для работы в связке с MTA Exim 4.50 (Debian Sarge) на примере СУБД MySQL.

1. Подготовить MySQL-базу

mysql -u root -p
Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> CREATE DATABASE `spamassassin_db`;
Query OK, 1 row affected (0.09 sec)

mysql> GRANT USAGE ON *.* TO 'username'@'localhost' IDENTIFIED BY 'pasword';
Query OK, 0 rows affected (0.07 sec)

mysql> GRANT ALL PRIVILEGES ON `spamassassin_db`.* TO 'username'@'localhost';
Query OK, 0 rows affected (0.07 sec)

2. Подготовить необходимые таблицы (схемы таблиц находятся в /usr/share/doc/spamassassin/sql)

cd /usr/share/doc/spamassassin/sql
# mysql -u username -p spamassassin_db < userpref_mysql.sql
# mysql -u username -p spamassassin_db < bayes_mysql.sql
# mysql -u username -p spamassassin_db < awl_mysql.sql

3. Осуществить импорт накопленных bayes-токенов

su -m -c "sa-learn -D --backup > /tmp/backup.txt" Debian-exim
su -m -c "sa-learn --restore /tmp/backup.txt" Debian-exim

4. Осуществить импорт awl-базы (понадобится скрипт convert_awl_dbm_to_sql из набора spamassassin tools)

cd /usr/local/bin
wget http://spamassassin.apache.org/full/3.0.x/dist/tools/convert_awl_dbm_to_sql
chmod +x convert_awl_dbm_to_sql
su -m -c "/usr/local/bin/convert_awl_dbm_to_sql --username Debian-exim --dsn DBI:mysql:spamassassin_db:localhost --dbautowhitelist /var/spool/exim4/.spamassassin/auto-whitelist --sqlusername username --sqlpassword password --ok" Debian-exim

5. Добавить конфигурационный файл, описывающий необходимость использования mysql-базы для хранения пользовательских настроек (userpref), данных автоматического whitelist'а (awl) байесовского фильтра.

cat > /etc/mail/spamassassin/sql.cf

user_scores_dsn DBI:mysql:spamassassin_db:localhost:3306
user_scores_sql_username username
user_scores_sql_password password
auto_whitelist_factory Mail::SpamAssassin::SQLBasedAddrList
user_awl_dsn DBI:mysql:spamassassin_db:localhost:3306
user_awl_sql_username username
user_awl_sql_password password
bayes_store_module Mail::SpamAssassin::BayesStore::SQL
bayes_sql_dsn DBI:mysql:spamassassin_db:localhost:3306
bayes_sql_username username
bayes_sql_password password

6. Добавить в запускной скрипт опцию -q, при наличии которой spamassassin будет пытаться использовать sql-базы, описанные в конфигурационных файлах (на время тестирования можно добавить опцию -D (debug)).

7. Перезапустить Spamassassin

/etc/init.d/spamassassin restart


Ссылки:

1. Migrating our Debian Anti-Spam Anti-Virus Gateway Email Server's Bayes database to MySQL
2. Loading SpamAssassin User Preferences From An SQL Database
3. Spamassassin Wiki - UsingSQL

2006/10/11

Как скачать сайт целиком из коммандной строки?

Наверное во всех современных дистрибутивах *nix имеется команда wget. С ее помощью прямо из коммандной строки возможно "утянуть" сайт со всем его содержимым.
wget -r -k -p -N -l 1 http://www.site.com/
  • -r рекурсия
  • -k конвертация ссылок на полученных страницах
  • -p включать все содержимое страниц (картнки и т.п.)
  • -N включить time-stamping. Понадобится, если потом нужно будет скачать только обновившиеся ресурсы
  • -l глубина ссылок(по умолчанию 5)

2006/10/10

Roller Blog - Planet aggregator

Planet aggregator позволяет добавлять общую rss-ленту на сайте блогов, с возможностью подписки внешних ресурсов. Чтобы добавить Planet-таб на установленный Roller Blog, необходимо внести в основной конфигурационный файл roller.properties следующие изменения:
planet.aggregator.enabled=true
# обновлять список локальных блогов каждый день
tasks.daily=\
org.apache.roller.presentation.planet.SyncWebsitesTask
# обновления ленты каждый час
tasks.hourly=\
org.apache.roller.presentation.planet.RefreshEntriesTask
# tomcat-пользователь должен иметь права на запись в данную директорию
planet.aggregator.cache.dir=/directory_of_aggregator_cache

После внесенных изменений необходимо перегрузить tomcat

/etc/init.d/tomcat restart

2006/10/09

Использование smarthost'а

Чтобы вся исходящая корреспонденция шла с одного сервера (smarthost) в настройку локальных MTA необходимо добавить:

Sendmail
1. В /mail/sendmail.cf
# "Smart" relay host (may be null)
DSmy.smarthost.server

Если вместо dns-имени сервера используется ip-адрес, его необходимо брать в квадратные скобки, например DS[10.10.10.1]

2. Перезапустить sendmail

/etc/rc.d/rc.sendmail restart

1. Если используется mc-файл для конфигурирования sendmail'а, в /mail/sendmail.mc

define(`SMART_HOST',`my.smarthost.server')
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

2. Перезапустить sendmail

/etc/rc.d/rc.sendmail restart

Exim (Debian)

1. В /etc/exim4/update-exim4.conf

dc_smarthost='my.smarthost.server'

2. Перегенерировать конфигурацию

update-exim4.conf

3. Перезапустить exim

/etc/init.d/exim4 restart

spamassassin out of memory

При использовании Spamassassin 3.0.3 возможны проблемы с утечкой памяти - порождаемый процесс spamd может потребовать от системы столько памяти, сколько в наличии нет. А если spamd запущен с правами суперпользователя (по-умолчанию), система может начать завершать выполняющиеся приложения. Множество решений данной проблемы предлагает Spamassassin Wiki - Out of memory problems.
Большинство советов логичны и используются многими администраторами при первоначальной конфигурации сервиса spamd. Стоит обратить внимание на 2 особенно важных совета:
  • Необходимо следить за базой auto-whitelist, потому как ее размер может серьезно вырасти за короткое время и это может в свою очередь влиять на использование ресурсов памяти процессом spamd. С помощью вспомогательного скрипта [2.8Кб] можно своевременно просматривать и очищать нежелательное содержимое базы.
  • В запускном скрипте демона spamd должна присутствовать опция --max-conn-per-child=N, которая ограничивает "время жизни" порожденных (child) процессов.
В дополнение:
По данному адресу расположены скрипты-утилиты, помогающие при работе с spamassassin'ом. Например, sa-stats.pl[33Кб] - вывод статистики по работе демона spamd на основании данных maillog.

Главное при использовании spamassassin'а при сканировании почтового трафика - не давать на проверку больших писем (>300Kb). Если это условие выполнено, то с большой уверенностью можно сказать, что утечки памяти не случится.

2006/10/06

jLibrary

jLibrary - еще одна открытая система управления документами (dms), которая заслуживает внимания. Имеет клиентскую и серверную реализацию, причем базу документов можно хранить как на удаленном сервере, так и на рабочем компьютере (в этом случае серверная часть не нужна).
Интерфейс для работы с репозитариями основан на eclipse, поэтому неважно какая операционная система используется, главное - наличие JavaRunTime (jlibrary целиком написана на Java)

Установка серверной части плохо документирована, но всё же:
1. Если есть работающий Tomcat, скачать WAR-архив, иначе можно взять jlibrary с уже подготовленным и настроенным Tomcat'ом. (данное описание охватывает процесс установки jlibrary из WAR-архива). Tomcat по-умолчанию автоматически разворачивает (deploy) war-архивы, помещенные в webapps-каталог. После того, как архив резвернут (в директорию webapps/jlibrary), лучше остановить Tomcat.

2. Внести необходимые изменения в конфигурационные файлы

%TOMCAT_HOME%/webapps/jlibrary/WEB-INF/web.xml


repository-home
/var/jlibrary


%TOMCAT_HOME%/webapps/jlibrary/server-config.wsdd

Создать файл %TOMCAT_HOME%/conf/jaas.config

Jackrabbit {
org.apache.jackrabbit.core.security.SimpleLoginModule required anonymousId="anonymous";
};

В запускной скрипт Tomcat добавить опции

JAVA_OPTS="-Xms128m -Xmx512m -Djava.security.auth.login.config=%TOMCAT_HOME%/conf/jaas.config"

3. Запустить(перезапустить) Tomcat.

Если не возникло критических ошибок при запуске серверной части, можно подсоединяться к серверу по адресу jlibrary://hostname:8080/jlibrary. (admin:changeme)

2006/09/29

Bering-uClibc LEAF (Linux Embedded Appliance Firewall)

Bering-uClibc LEAF отлично подходит в качестве бездискового роутера, всё необходимое ему для работы может уместиться на одной дискете.

Лог:
1. Подготовить загрузочную дискету, прежде отформатировав ее на 1.6Мб
wget http://blogs.ssc.lt/resources/rs/Bering-uClibc_3.0-beta1_img_bering-uclibc-1680.bin
fdformat /dev/fd0u1680
dd if=Bering-uClibc_3.0-beta1_img_bering-uclibc-1680.bin of=/dev/fd0u1680
mount -t msdos /dev/fd0u1680 /mnt (для просмотра содержимого полученной загрузочной дискеты)

2. Включить необходимые модули для работы установленных устройств (например, ethernet-интерфейс). Bearing-uClibc хорошо укомплектован набором модулей [8Мб], которые можно включать в загрузочную дискету поместив желаемый модуль в /lib/modules и прописав его впоследствие в /etc/modules. Все модули по умолчанию закомментированы. Если необходимо, например, заставить работать ethernet-интерфейс rtl8139d, то в файле /etc/modules нужно расскомментировать строки:

crc
mil
8139too

3. После успешной установки модулей устройств можно переходить к установке дополнительных/удалению ненужных пакетов. Например, пакет Dnsmasq полностью заменяет пакет dchpdc, а если не нужен доступ к будущему маршрутизатору через ssh, то можно смело удалять dropbear. Чтобы удалить/добавить пакет необходимо удалить/добавить на дискету файл пакета и удалить/добавить имя пакета в основной файл загрузки - leaf.cfg. Если не хватает места на одной дискете (например, для установки snmp-сервиса[695Кб]), можно воспользоваться вторым дисководом и второй дискетой. В итоге может получиться следующий leaf.cfg файл:

LRP="root config etc modules iptables shorwall ulogd dnsmasq libm libsnmp netsnmpd snmpmibs"
PKGPATH="/dev/fd0u1680:msdos /dev/fd1u1440:msdos"
syst_size=6M
log_size=2M

4. Командой lrcfg можно внести изменения в настройки сети и подготовить конфигурационные файлы для работы всех требуемых пакетов. После внесения изменений их необходимо зафиксировать в основном меню lrcfg - команды s,m.

2006/09/21

Subversion authorization

Настройка авторизации доступа в svn очень проста - достаточно указать директивой AuthzSVNAccessFile путь до файла конфигурации доступа.

DAV svn
# Путь до репозитария
SVNPath /var/lib/svn
# Включение обычной аутентификации
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
AuthzSVNAccessFile /etc/apache2/dav_svn.authz
# Если раскомментировать строки Limit, то анонимные пользователи
# получат доступ на чтение к репозитарию, иначе только
# аутентифицированные пользователи имеют доступ
#
Require valid-user
#


Сам файл dav_svn.authz имеет интуитивно понятный формат:

[groups]
harry_and_sally = harry,sally

[/]
harry = rw
* =

[/baz/fuz]
@harry_and_sally = rw
* = r

[/bar/fox]
molly = rw

Доступ к подпапкам наследуется, поэтому доступ к директории /bar/fox имеет не только molly, но и harry. Если не указано никакого права доступа (ни r, ни rw), значит доступ к директории закрыт указанным пользователям.

2006/09/20

SYN flood

Очень популярная DoS атака заключается в посылке большого числа SYN
пакетов на ваш сервер. При этом установка TCP связи не доводится до
конца. Очередь полуоткрытых запросов соединений быстро заполняется,
что мешает установке нормальных соединений. Так как соединение не
должно быть обязательно завершено, такая атака не требует больших
ресурсов от атакующей машины, поэтому её легко реализовать и
контролировать.

Если параметр tcp_syncookies установлен (доступен только когда ядро
собрано с CONFIG_SYNCOOKIES), тогда ядро обрабатывает SYN пакеты TCP в
обычном режиме до тех пор, пока очередь не заполнится. После
заполнения очереди включается механизм SYN cookies.

SYN cookies вообще не использует очередь SYN. Вместо этого ядро
отвечает на каждый SYN пакет, как обычно SYN|ACK, но туда будет
включено специально сгенерированное число на основе IP адресов и
портов источника и получателя, а также времени посылки пакета.
Атакующий никогда не получит эти пакеты, а поэтому и не ответит на
них. При нормальном соединении, будет послан третий пакет, содержащий
число, а сервер проверит был ли это ответ на SYN cookie и, если да, то
разрешит соединение даже в том случае, если в очереди SYN нет
соответствующей записи.

Включение механизма SYN cookies является очень простым способом борьбы
против атаки SYN флудом. При этом немного больше загружается процессор
из-за необходимости создавать и сверять cookie. Так как альтернативным
решением является отклонять все запросы на соединение, SYN cookies
являются хорошим выбором.
(скопировано с

Защита - включить tcp_syncookies
echo "1" > /proc/sys/net/ipv4/tcp_syncookies

Ядро 2.2 не имеет данной возможности, поэтому единственный выход - переходить на 2.4 или выше.


Литература:

  1. Обзор файлов /proc имеющих отношение к работе Firewall в Linux
  2. SYN cookies
  3. Enable tcp_syncookies by default
  4. CERT® Advisory CA-1996-21 TCP SYN Flooding and IP Spoofing Attacks

2006/09/14

SNMP сервис для SmoothwallExpress

Установка [719Кб]
tar -xzvf smoothwall-snmp-5.2.1-5.i386.tar.gz -C / | sed 's!^!/!' | { while read FILE; do chown root.root $FILE; done }
patch -d / -p1 < /tmp/smoothwall-scripts-snmp.patch

После установки необходимо запустить скрипт snmpconf, который в интерактивном режиме помогает создать файл конфигурации snmpd.conf.
Перед использованием необходимо указать ссылку на полученный конфигурационный файл в скрипте запуска сервисов /etc/rc.d/rc.sysinit:
Вместо
/usr/local/sbin/snmpd -Lsd
должно быть
/usr/local/sbin/snmpd -c путь_до_snmpd.conf -Lsd 

Удаление
patch -d / -Rp1 < /tmp/smoothwall-scripts-snmp.patch
rm -rf /usr/local/lib/libelf* /usr/local/lib/libnetsnmp* /usr/local/bin/snmpconf /usr/local/sbin/snmpd /usr/local/share/snmp /tmp/smoothwall-scripts-snmp.patch

Ссылки по теме:
  1. SNMP server for SmoothWall
1. Создание tar.gz архива из каталога
tar -cf - $1 | gzip > $1.tar.gz

2. Более информативный список всех открытых портов

lsof -P -n -i

3. Очистка почтовой очереди в MTA Exim. Сервер пытается немедленно доставить все письма, находящиеся в очереди. Если какое-либо письмо не удалось доставить, оно удаляется из очереди.

exipick -i | xargs exim4 -Mg

4. MySQL: создание базы данных, создание пользователя, наделение пользователя привилегиями для работы с базой данных

CREATE DATABASE `database` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
GRANT USAGE ON *.* TO 'user'@'host' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON `database`.* TO 'user'@'host';

2006/09/13

Запуск скриптов в фоновом режиме в Linux/Windows

Linux:
# script &

Windows:

c:\start script.exe

Очень удобно запускать параллельно несколько скриптов из одного bat-файла, например так:

start script1.exe
start script2.exe
start script3.exe
start script4.exe

2006/09/06

Brute force

Иногда необходимо получить доступ к устройствам(серверам), которые были настроены еще в прошлом веке + другими администраторами и естественно паролей никто не помнит. Тогда приходит на помощь софт для взлома паролей методом brute-force("грубая сила"), по-русски - перебор всех возможных вариантов.

THC-Hydra [1.3Мб] - консольная утилита, доступна как для win32, так и в исходниках для Linux, активно разрабатывается. Все везде хвалят и советуют именно ее из-за ее скорости, богатого набора доступных протоколов.
Цитата:
"Hydra is a parallized login cracker which supports numerous protocols to attack. New modules
are easy to add, beside that, it is flexible and very fast.
Currently this tool supports:
TELNET, FTP, HTTP, HTTPS, HTTP-PROXY, SMB, SMBNT, MS-SQL, MYSQL, REXEC,
RSH, RLOGIN, CVS, SNMP, SMTP-AUTH, SOCKS5, VNC, POP3, IMAP, NNTP, PCNFS,
ICQ, SAP/R3, LDAP2, LDAP3, Postgres, Teamspeak, Cisco auth, Cisco enable,
LDAP2, Cisco AAA (incorporated in telnet module)."
Но у нее есть минусы, с которыми я столкнулся и которые пришлось решать самостоятельно. А именно: программа умеет работать только с уже сформированными файлами паролей - т.е. она не может сформировать на лету набор паролей определенной длины из заданных символов. Здесь приходит на помощь маленький скрипт(dmzsgen.c) [3Кб], подсмотренный мною на сайте DMZ Services.
Второй существенный минус - hydra отказывается подбирать пароли, если не указанно имя пользователя. Это большой минус, т.к., например, zyxel-модемы в telnet-сессии сразу просят пароль, без логина.

Brutus [331Кб] - программка для win32, написана давно(январь 2000) и больше не получила развития. Список доступных протоколов у нее значительно меньше, чем у Hydra, зато у нее отсутствуют названные выше минусы + она имеет оконный интерфейс.

Я попробовал возможности обеих программ для telnet и http протоколов. Подбор паролей через telnet, как я ни пытался(а я пытался!), не принес мне желаемого результата, а вот на http-протоколе обе программки успешно подобрали пароль от разных устройств. Единственная поправка, касающаяся http - подбор паролей не следует осуществлять в несколько потоков, иначе программки думают, что они подобрали пароли и останавляваются после нескольких попыток, выдав якобы подобранный пароль.

2006/08/31

Инструментарий#1 [procps]

В большинстве стандартых поставок Linux дистрибутивов входит пакет procps, он содержит программы для мониторинга системных ресурсов. В данном контексте меня интересует только те утилиты из этого пакета, которые помогают оценить состояние системы и помочь при решении задач, касающихся производительности.

free
Возвращает информацию о свободной и используемой памяти в системе, как физической, так и виртуальной. Физическая память - реальный объем оперативной памяти, виртуальная - часть диска, использующаяся как продолжение физической памяти. Виртуальная память = swap область на диске.
Пример вывода
#free
total used free shared buffers cached
Mem: 516588 480172 36416 0 5524 75704
-/+ buffers/cache: 398944 117644
Swap: 1975976 70200 1905776
  • total - всего доступной физической памяти. Некоторая область оперативной памяти может быть зарезервирована ядром, поэтому показатель total может быть меньше реального объема оперативной памяти.
  • used - используется памяти (used=total-free)
  • free - незадействованая память. На самом деле память задействованная в кэшах(cached) тоже является свободной и может быть использована в любое время, если есть на то нужда какого-то процесса. Работает принцип "свободная память - потерянная память".
  • shared - память распределенная между процессами, но по непонятной причине всегда показывает 0.
  • buffers - память используемая в буферах.
  • cached - память используемая для кэширования.
  • -/+ buffers/cache - использованная память без учета буферов и кэшей/свободная память с учётом буферов и кэшей
  • swap - использование swap-области
Разница между буферами и кэшами следующая: буфер - это временное хранилище данных, работающих в данный момент процессов, своеобразный временный терминал; кэш - это данные, к которым уже обращались(они были считаны с устройств ввода/вывода), но они были оставлены в памяти для того, чтобы сократить издержки из-за доступа к устройствам ввода/вывода(I/O), скорость доступа к которым значительно(в 1000-чи раз) ниже по сравнению с оперативной памятью.

pmap
Возвращает карту памяти указанного процесса. Ключ -d выводит значение используемой writeable/private-памяти - памяти, которую занимает сам процесс, исключая использование общих(shared)-библиотек.

ps
Выводит список текущих процессов. Много полезной информации выводится с ключами aux. Ключ f показывает процессы с ветвлением от родителей.
Столбцы :
  • UID - идентификатор пользователя;
  • PID - идентификатор процесса
  • PPID - идентификатор родительского процесса. Родителем всех процессов является процесс init с PID равной 1
  • C - приоритет процесса, используемый планировщиком задач;
  • STIME - время старта процесса;
  • TTY - терминал, с которым связан данный процесс;
  • TIME - общее время работы процесса;
  • CMD - команда, запустившая данный процесс «с некоторыми опциями выводит и каталог откуда процесс был запущен»;
  • STAT - состояние, в котором на данный момент находится процесс.
Параметры STAT:
  • R - процесс выполняется в данный момент
  • S - процесс ожидает выполнение ("спит" менее 20 секунд)
  • D - процесс в полной (непрерываемой) спячке, например, ожидает ввода/вывода
  • Z - zombie или defunct процесс, то есть процесс у которого нет родителя.
  • T - процесс остановлен.
  • W - процесс в свопе
  • < - процесс в приоритетном режиме.
  • N - процесс в режиме низкого приоритета
  • L - real-time процесс, имеются страницы заблокированные в памяти.
  • D – процесс находится в ожидании дисковой (непрерываемой) операции
  • I – процесс в ожидающем режиме (процесс "спит" более 20 секунд)
  • J – процесс в "тюрьме" (см. man 2 jail)
Символ + показывает что процесс выполняются на переднем плане (foreground-процессы), s говорит о том, что процесс является начальным в сеансе.

sysctl
Модифицирует параметры ядра во время его работы. Полезна, если необходимо изменить какие-то переменные ядра, без перезагрузки и перекомпиляции.

tload
Отображает график загрузки системы(load average). График выводится с заданной задержкой на терминал в виде столбиков.

top
Отображает загрузку процессора. Используется для слежения за активностью процессора в реальном времени.
Полезные команды:
  • c - Включает/выключает отображение имени программы/полной командной строки в поле COMMAND
  • x - Включает/выключает подсветку колонки, по которой происходит сортировка процессов
  • <,> - сортировка по выбранному столбцу
  • z - Включает/выключает цвет
  • u - показать процессы указанного пользователя
  • Пробел - Заставляет программу перечитать список процессов
Состояние процессора:
  • us - процент использования процессорного времени программами пользователей.
  • sy - процент использования процессорного времени процессами ядра.
  • ni - процент использования процессорного времени программами с измененным приоритетом.
  • id - простой процессора.
  • wa - процент процессорного времени, потраченного на завершение ввода/вывода(IO)
  • hi - процент процессорного времени, потраченного на обработку hard-прерываний (IRQ)
  • si - процент процессорного времени, потраченного на обработку soft-прерываний (network)
Столбцы:
  • VIRT — общий объем виртуальной памяти, используемой процессом, включает в себя: область кода (CODE), данные (DATA), разделяемые библиотеки (SHARED) и страницы, перемещенные в swap-область памяти. Если приложение потребовало от ядра выделить ему 100Мб памяти, а использует всего 5 Мб, данный столбец всё равно будет показывать цифру 100.
  • RES — количество резидентной (не перемещаемой в swap) памяти в килобайтах. Если приложение потребовало от ядра выделить ему 100Мб памяти, а использует всего 5 Мб, то данный столбец покажет 5. Но здесь есть два ньюанса: а) RES не показывает сколько данных было перемещено в swap, б) часть RES-памяти может быть разделяемой.
  • SHR — количество разделяемой (shared) памяти программы в килобайтах, т.е. памяти, которая может быть использована другими приложениями.
  • DATA - объем памяти, занятой данными, используемые процессом в ходе выполнения.
  • SWAP - объем памяти, используемой процессом, но перемещенной в swap-область.
  • CODE - объем памяти, содержащая исполняемый код процесса.
Эмпирически можно вычислить следующее отношение: VIRT = RES + SWAP.
Все остальные столбцы аналогичны столбцам команды ps.
Кроме интерактивного режима, в котором top выводит данные на экран, можно использовать так называемый командный режим (Batch mode). Он применяется, когда результаты работы программы необходимо передать другим программам или сохранить в файле.
Для запуска программы в командном режиме используют параметр –b. В этом случае список отсортированных процессов (по умолчанию, процессы сортируются по проценту использования процессорного времени) будет с определенной задержкой (по умолчанию три секунды) выводится на стандартный вывод. Количество повторов не ограничено, поэтому необходимо явно завершать работу программы, например, при помощь комбинации клавиш Ctrl+C.
  • n - количество повторов.
  • d - задержка между повторами в секундах.
  • u - определяет пользователя, с правами которого выполняются процессы.
  • p - определяет PID процессов, за которыми должна следить программа.
Например, необходимо с задержкой в четыре секунды два раза получить список процессов, выполняемых с правами пользователя daemon. Для этого программу запускают со следующими параметрами:
#top -b -d 4 -n 3 -u daemon
top - 17:28:22 up 34 min, 1 user, load average: 0.15, 0.05, 0.03
Tasks: 66 total, 1 running, 65 sleeping, 0 stopped, 0 zombie
Cpu(s): 2.1% us, 0.6% sy, 0.0% ni, 91.7% id, 5.5% wa, 0.1% hi, 0.0% si
Mem: 246832k total, 242968k used, 3864k free, 2708k buffers
Swap: 514072k total, 0k used, 514072k free, 107936k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3753 daemon 16 0 4972 2616 1940 S 0.0 1.1 0:00.01 named
3787 daemon 16 0 1684 688 584 S 0.0 0.3 0:00.00 atd

top - 17:28:26 up 34 min, 1 user, load average: 0.13, 0.05, 0.03
Tasks: 66 total, 1 running, 65 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.8% us, 0.0% sy, 0.0% ni, 99.0% id, 0.0% wa, 0.2% hi, 0.0% si
Mem: 246832k total, 242928k used, 3904k free, 2708k buffers
Swap: 514072k total, 0k used, 514072k free, 107936k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3753 daemon 16 0 4972 2616 1940 S 0.0 1.1 0:00.01 named
3787 daemon 16 0 1684 688 584 S 0.0 0.3 0:00.00 atd

uptime

Возвращает время работы системы, количество вошедших в нее пользователей и загрузку системы. Всё то же самое выводит в реальном времени команда top, но top "ест" больше ресурсов.

vmstat
Отображает статистику виртуальной памяти, включая информацию о процессах, памяти, страницах, блоках ввода-вывода, прерываниях и активности CPU. В отчете, выдаваемом по умолчанию, имеются следующие поля:
procs - число процессов, которые:
r - находятся в очереди на выполнение;
b - заблокированы в ожидании ресурсов, например, пока закончатся дисковые операции ввода/вывода или paging;
w - выключены из обмена. Эти значения всегда отражают текущую ситуацию, если даже высвечивается полная информация с момента загрузки.
memory - выводит информацию о памяти(в Кб)
swpd - размер используемой в данный момент виртуальной памяти
free - размер свободной памяти
buff - объем памяти, задействованной в буферах
cache - объем памяти, задействованной на кэширование
swap - сообщает о производительности системы при выполнении замещения страниц по требованию. Пока не будет высвечена полная информация с момента загрузки, эта информация усредняется по производительности на интервале в (interval)-секунд.
si - число загруженных процессов.
so - число выгруженных процессов.
io - содержит информацию об общении с устройствами ввода/вывода
bi - принято блоков из блочного устройства (блоков/сек)
bo - послано блоков на блочное устройство (блоков/сек)
system - сообщает об активности основной системы. Пока не будет высвечена суммарная информация с момента загрузки, эти позиции показывают средние значения за последние (interval)-секунд.
in - число прерываний(в секунду) устройств (несинхронных).
cs - число переключений(в секунду) контекста.
cpu - процент цикла процессора, затрачиваемый на различные режимы:
us - пользователь
sy - система
id - ожидание
wa - операции i/o(ввода/вывода). До Linux 2.5.41 показывала 0.

Литература:
  1. FAQ Linux Memory Management
  2. Перевод статьи Understanding memory usage on Linux
  3. Ps - Википедия
  4. Исследуем процессы
  5. Top - Wiki Open Book
  6. On measuring memory usage

2006/08/28

KnowledgeTree

Наконец-то нашли решение для управления электронными документами внутри организации - KnowledgeTree. Из уже опробованных функций хочется отметить:
  • индексация содержимого doc, rtf, pdf, htm, xml - документов
  • подписка на директорию - в случае, если содержимое директории поменялось Вас известят об это по e-mail
  • bulk upload/export
  • возможность использования функции workflow для работы с изменяемыми документами
  • очень удобное управление разграничением доступа
  • возможность использования plugin'ов
  • возможность использования внешнего хранилица пользователей (LDAP)
Установка очень проста, а требования стандартны - Apache/PHP/MySQL + для возможности индексации документов необходимо установить соответствующие программы для анализа содержимого.
Давно хотел привести в порядок библиотеку технической документации, поэтому обнаружив этот продукт, начал осваивать профессию библиотекаря.

2006/08/24

Установка ZOPE/Plone на RHEL4 (Red Hat Enterprise Linux)

В доступном наборе rh-пакетов нет ни zope, ни plone. Кроме того, ZOPE требует наличия python =>2.3.5, а RHEL4 может предоставить только python 2.3.4. Поэтому установку необходимо начинать с установки python 2.3.5(не ниже!). Установка проходит в пределах домашней директории /var/lib/zope пользователя zope. Без библиотеки zlib ZOPE не запустится, поэтому прежде всего необходимо собрать её.

1. Zlib 1.2.3.
tar zxf zlib-1.2.3.tar.gz
./configure --prefix=/var/lib/zope
make && make install
export LDFLAGS="-L/var/lib/zope/lib/"
export CPPFLAGS="-I/var/lib/zope/include/"

2. Python 2.3.5
tar zxf Python-2.3.5.tgz
./configure --prefix=/var/lib/zope
make && make install

3. Zope 2.8.8

tar zxf Zope-2.8.8-final.tgz
./configure --prefix=/var/lib/zope --with-python=/var/lib/zope/bin/python
make && make install

4. Создать instance и запустить созданный zope-instance

/var/lib/zope/bin/mkzopeinstance.py
vi /var/lib/zope/etc/zope.conf (если нужно что-нибудь исправить)
/var/lib/zope/bin/zopectl start

5. Plone 2.1.3. Достаточно положить содержимое архива в директорию Products запущенного zope-instance

tar zxf Plone-2.1.3.tar.gz
cd Plone-2.1.3/
mv * /var/lib/zope/instances/demo/Products

После этого можно заходить в management-консоль zope по адресу http://servername:port/manage и добавлять plone-сайты.

2006/08/21

Subversion

Поставив cvs, ознакомился с аутентичными публикациями по данной теме и пришёл к выводу, что нужно переходить на subversion, пока не обустроились в cvs-среде. Subversion пришёл на смену cvs, поэтому он изначально имел несколько нововведений, которые перекрывают функциональность cvs.
"Subversion поддерживает большинство соглашений CVS , включая большую часть набора команд, поэтому пользователи CVS быстро почувствуют себя как дома. Subversion предлагает много полезных улучшений по сравнению с CVS : копирование и переименование файлов и директорий, настоящие атомарные фиксации, эффективная обработка бинарных файлов, способность сетевой работы по HTTP (HTTPS) - через WebDAV. Subversion также имеет родной Win32 клиент и сервер."
"CVS следит только за историей отдельных файлов, тогда как Subversion использует виртуальную файловую систему с возможностями управления версиями, которая способна отслеживать изменения во времени целых деревьев каталогов. Под управление версиями попадают файлы и каталоги."

Установка на Debian Etch (модуль WebDAV уже должен присутствовать в apache2):
1. Установить subversion и модуль dav_svn к apache2
apt-get install subversion
apt-get install libapache2-svn

2. Активировать модули dav и dav_svn

a2enmod dav
a2enmod dav_svn

3. Изменить содержимое файла /etc/apache2/mods-available/dav_svn.conf


DAV svn
# Путь до репозитария
SVNPath /var/lib/svn
# Включение обычной аутентификации
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
# Если раскомментировать строки Limit, то анонимные пользователи
# получат доступ на чтение к репозитарию, иначе только
# аутентифицированные пользователи имеют доступ
#
Require valid-user
#


4. Создать файл /etc/apache2/dav_svn.passwd со списком пользователей, имеющих доступ к репозитарию

htpasswd2 /etc/apache2/dav_svn.passwd programmer1
New password:
Re-type new password:
Adding password for user programmer1

5. Создать репозитарий и поправить права доступа к его административныым каталогам

svnadmin create /var/lib/svn
chown -R www-data.www-data /var/lib/svn

6. Перегрузить apache2, после этого можно с помощью svn-клиента работать с созданным репозитарием. Если необходима более гибкая настройка доступа, в модуле dav_svn имеется набор директив AuthzSVNAccess.

2006/08/19

cvs

Опираясь на статьи Setting up a secure CVS server with OpenSSH, Permitting anonymous read-only access to your CVS repository можно поднять в Debian систему CVS. Так как репозитарий будет открыт для anonymous пользователей, можно использовать pserver.
Единственная трудность возникла при настройке web-интерфейса ViewCVS. Если ставить его из пакетов, то начинаются невообразимые сложности - отображаются только каталоги, а файлы - нет. если все делать через экспериментальный python-модуль, а не через rcs-утилиты, то не функционирует diff. А вот если ставить последнюю на сегодняшний день версию ViewCVS 1.0.1 из исходников, то всё прекрасно работает.

2006/08/17

Backup with rdiff-backup

Подискутировав и поинтересовавшись на форумах, решил продолжать использующийся механизм резервного копирования данных на backup-сервер, при котором сам backup-сервер инициирует копирование с серверов.
Лог:
1. Генерируем пару ключей на backup-сервере для пользователя root.
backup# ssh-keygen -t dsa -b 2048 -N ""
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
ea:41:ed:8d:76:32:9f:1b:f5:41:68:3d:e0:10:a0:5d root@backup

2. Копируем содержимое файла /root/.ssh/id_dsa.pub с backup-сервера в файл /root/.ssh/authorized_keys на те сервера, которые нуждаются в резервном копировании. В соответствие с форматом файла authorized_keys добавляем в него необходимые опции: from="backup". После тестирования ssh-соединения можно добавить необязательные, но предоставляющие дополнительную безопасность, опции: no-X11-forwarding, no-port-forwarding, no-pty, no-agent-forwarding.

3. На backup-сервере и всех серверах, учавствующих в резервном копировании необходимо установить утилиту rdiff-backup

  • Debian
apt-get install rdiff-backup
  • FreeBSD
cd /usr/ports/sysutils/rdiff-backup
make && make install
  • from sources (необходимо наличие библиотек и header-файлов для librsync, python)
wget http://savannah.nongnu.org/download/rdiff-backup/rdiff-backup-VER.tar.gz
tar zxf rdiff-backup-VER.tar.gz
cd rdiff-backup-VER
python setup.py install

4. В соответствие с форматом backup-скрипта(приведен ниже), составляем list-файлы, содержащие описание директорий для резервного копирования.

#!/bin/sh
# $1 - list
StartTime=`date +%H:%M:%S`;
cat $1 | while read args
do
# format of entries in list-file
# $1 - remote host
# $2 - remote dir
# $3 - local dir
# $4 - pattern (copy dirs, which contains files with that pattern. For example 'log|tar')
set $args
if [ "$1" = "#" ]
then
continue;
fi
echo "$1::$2 > $3"
rdiff-backup --create-full-path --exclude-symbolic-links --exclude-sockets --exclude-special-files --exclude-fifos --exclude-device-files --no-hard-links --include-regexp ".*($4)" --exclude $2 $1::$2 $3
done
EndTime=`date +%H:%M:%S`;
echo "$StartTime - $EndTime";

5. Автоматизируем действия с помощью cron, periodic.


2006/08/16

OTRS - Open Ticket Request System

Инсталляция проводилась на Debian Testing (Etch) из исходников otrs-2.0.4.
1. Распаковать архив в /opt/otrs
cd /opt
tar zxf otrs-2.0.0.tar.gz
cd otrs

2. Создать в системе пользователя otrs, который будет входить в ту же группу, что и пользователь от имени которого запущен web-сервис(Apache) - в Debian это группа www-data.

useradd -d /opt/otrs/ -c 'OTRS user' otrs
usermod -G www-data otrs

3. На основе шаблонных файлов, идущих в дистрибутиве, необходимо создать основные файлы конфигурации

cd Kernel/
cp Config.pm.dist Config.pm
cd Config
for foo in *.dist; do cp $foo `basename $foo .dist`; done

4. Запустить скрипт, корректирующий права доступа к содержимому директории /opt/otrs. Формат запуска скрипта следующий:

SetPermissions.sh { Home directory of the OTRS user } { OTRS user } { Web server user } [ Group of the OTRS user ] [ Group of the web server user ]

cd /opt/otrs/bin
SetPermissions.sh /opt/otrs otrs www-data www-data www-data
SetPermissions.sh <$Revision: 1.27 $> - set OTRS file permissions
Copyright (c) 2001-2004 Martin Edenhofer
Setting file permissions...
chown -R www-data:www-data /opt/otrs
chmod -R og+rw /opt/otrs
chown otrs:www-data /opt/otrs
chown -R otrs:www-data /opt/otrs/var/
chown -R www-data:www-data /opt/otrs/var/sessions/
touch && chown otrs:www-data /opt/otrs/var/log/TicketCounter.log
chmod -R 775 /opt/otrs/bin/
(chown && chmod 700) otrs:0 /opt/otrs/bin/DeleteSessionIDs.pl
(chown && chmod 700) otrs:0 /opt/otrs/bin/UnlockTickets.pl
(chown && chmod 700) otrs:0 /opt/otrs/bin/otrs.getConfig

5. Перед запуском инсталляции необходимо установить все необходимые для работы библиотеки. Проверить наличие необходимых пакетов можно скриптом otrs.checkModules.

./otrs.checkModules
CGI ... ok
Date::Pcalc ... ok
Date::Format ... ok
DBI ... ok
DBD::mysql ... ok
Digest::MD5 ... ok
LWP::UserAgent ... ok
IO::Scalar ... ok
IO::Wrap ... ok
MIME::Base64 ... ok
MIME::Tools ... ok
Mail::Internet ... ok
Net::DNS ... ok
Net::POP3 ... ok
Net::LDAP ... not installed! (for directory authentication - not required)
Net::SMTP ... ok
Authen::SASL ... ok
GD ... ok
GD::Text ... ok
GD::Graph ... ok
GD::Graph::lines ... ok
GD::Text::Align ... ok
XML::Parser ... ok

Установить недостающие пакеты можно с помощью apt, либо запустив perl -e shell -MCPAN. В дополнение можно проверить синтаксис основных скриптов:

cd /opt/otrs
perl -cw cgi-bin/installer.pl
cgi-bin/installer.pl syntax OK
perl -cw PostMaster.pl
PostMaster.pl syntax OK
6. Добавить необходимые директивы и описания в конфигурацию web-сервера(Apache). Модуль mod_cgi должен быть активирован!
touch /etc/apache2/conf.d/otrs.conf

otrs.conf:
#
# Basic apache configuration file for OTRS
#
# agent, admin and customer frontend
#
ScriptAlias /otrs/ "/opt/otrs/bin/cgi-bin/"
Alias /otrs-web/ "/opt/otrs/var/httpd/htdocs/"
#
# Directory settings
#

AllowOverride None
Options +ExecCGI -Includes
Order allow,deny
Allow from all


AllowOverride None
Order allow,deny
Allow from all

7. Перегрузить web-сервис

/etc/init.d/apache2 restart
Forcing reload of apache 2.0 web server....

8. Закончить установку из броузера по адресу http://localhost/otrs/installer.pl

Если db-сервер по умолчанию не использует utf-8, то чтобы избежать проблем с кодировкой, лучше создать базу вручную(в комплекте идет набор скриптов). После успешной инсталяции можно логиниться root@localhost:root по адресу http://localhost/otrs/index.pl.

2006/08/13

Network diagram

Уже не раз сталкивался с необходимостью иметь удобный софт для изображения топологии сети и рисования различных диаграм. Не могу сказать, что я что-то, действительно, стоящее нашел, но то, что есть, использовать можно. В отборе учавствовали только freeware-продукты!
  • CADE - русская разработка, добротно сделан, но слишком маленький набор возможных элементов, зато с помощью обычных линий можно изобразить что угодно :) Отлично подходит для изображения логической схемы сети. [скачать(3552Кб)]
  • Network Notepad - менее функционален, но изначально задумывался как чертежник для сети, поэтому в нем есть все необходимое, плюс можно скачать дополнительные наборы элементов. Минус - в схеме можно использовать только доступные элементы, нет возможности рисовать собственные фигуры. Хорош для изображения физической схемы сети. [скачать(2678Кб)/элементы1(280Кб)/элементы2(10Кб)]

2006/08/10

Tomcat advanced tuning#1

Очень волновал тот факт, что tomcat имеет права root. Порывшись, нашел решение - использовать демон jsvc
cd $CATALINA_HOME/bin
tar xvfz jsvc.tar.gz
cd jsvc-src
chmod +x configure
./configure
make
cp jsvc ..

После успешной сборки tomcat можно запускать командой:

cd $CATALINA_HOME
./bin/jsvc -Djava.endorsed.dirs=./common/endorsed -cp ./bin/bootstrap.jar \
-outfile ./logs/catalina.out -errfile ./logs/catalina.err \
-user tomcat_user org.apache.catalina.startup.Bootstrap

Естественно, необходимо прежде убедиться, что указанный пользователь tomcat_user существует в системе и имеет все необходимые привелегии доступа в директории, с которыми работает tomcat.

update: А потом еще порылся и понял, что искал то, что лежит перед глазами - start-stop-daemon :)

2006/08/08

IE/HTTPS/POST "The page cannot be displayed" problem

Разрешили интересную проблему.
IE корректно не обрабатывает keepalive-функцию, реализованную в HTTP1.1. Если используется https-соединение и пользователь пытается POST-ом отправить данные на сервер, то временами соединение с сервером рвется и броузер показывает "The page cannot be displayed".

Решение:
Добавить в конфигурационный файл web-сервера для конкретного контекста
SetEnvIf User-Agent ".*MSIE.*" nokeepalive

SSL handshake failure

Никак не могу нащупать в чем дело и куда копать.
Если на сайте стоит аутентификация пользователей по сертификату и пользователь использует в качестве броузера IE, в логе апача появляется следующее:
[08/Aug/2006 12:41:04 19853] [info]  Connection to child 33 established (server ssl-server:443, client 192.168.0.11)
[08/Aug/2006 12:41:04 19853] [info] Seeding PRNG with 1160 bytes of entropy
[08/Aug/2006 12:41:04 19853] [info] Connection: Client IP: 192.168.0.11, Protocol: SSLv3, Cipher: RC4-MD5 (128/128 bits)
[08/Aug/2006 12:41:04 19853] [info] Initial (No.1) HTTPS request received for child 33 (server ssl-server:443)
[08/Aug/2006 12:41:04 19853] [info] Requesting connection re-negotiation
[08/Aug/2006 12:41:04 19853] [info] Awaiting re-negotiation handshake
[08/Aug/2006 12:41:04 19853] [error] Re-negotiation handshake failed: Not accepted by client!?
[08/Aug/2006 12:41:04 19853] [error] SSL error on writing data (OpenSSL library error follows)
[08/Aug/2006 12:41:04 19853] [error] OpenSSL: error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure
[08/Aug/2006 12:41:04 19853] [info] Connection to child 33 closed with unclean shutdown (server ssl-server:443, client 192.168.0.11)

Самое интересное, что аутентификация все-таки проходит, все выглядит так, будто сервер осуществляет вторую попытку и она у него заканчивается успехом.

2006/08/07

Тестирование производительности web-сервера

Задавшись задачей померить производительность наших web-серверов при реальной нагрузке для того, чтобы в дальнейшем их подстроить, нашел очень интересный инструмент - JMeter
"Apache JMeter may be used to test performance both on static and dynamic resources (files, Servlets, Perl scripts, Java Objects, Data Bases and Queries, FTP Servers and more)"

2006/08/03

HELO ограничения для Exim4

Продолжая борьбу со спамом, наткнулся на статейку
Добавил в конфигурацию наших серверов все необходимое:
30_exim4-config_check_rcpt
deny message = Forged IP in HELO.
log_message = HELO is our IP
condition = ${if eq {${lookup {$sender_helo_name} \
lsearch{/ПУТЬ_ДО_reject_helo} \
{yes}{no}}}
{${if !eq {$sender_host_address}{127.0.0.1} \n
{yes}{no}}} \n
{yes}{no}}

reject_helo
localhost
127.0.0.1
и что-нибудь еще, сам знаешь что :)