2007/03/26

Создание локального зеркала debian-репозитария пакетов

1. Установить утилиту apt-mirror. В процессе установки будет создан новый пользователь apt-mirror с домашней директорией /var/spool/apt-mirror
apt-get install apt-mirror

2. Сконфигурировать apt-mirror, конфигурационный файл /etc/apt/mirror.list. Пример конфигурационного файла:

##
## The default configuration options (uncomment and change to override)
##
#
# set base_path /var/spool/apt-mirror
# set mirror_path $base_path/mirror
# set skel_path $base_path/skel
# set var_path $base_path/var
#
# set defaultarch
# set nthreads 20
#
set _tilde 0

###
### sarge's section
###
deb http://ftp.at.debian.org/debian sarge main contrib non-free
deb-src http://ftp.at.debian.org/debian sarge main contrib non-free

deb http://security.debian.org/debian-security sarge/updates main contrib non-free
deb-src http://security.debian.org/debian-security sarge/updates main contrib non-free

deb http://ftp.at.debian.org/debian sarge main/debian-installer

# sarge-proposed-updates's section
deb http://ftp.at.debian.org/debian sarge-proposed-updates main contrib non-free
deb-src http://ftp.at.debian.org/debian sarge-proposed-updates main contrib non-free

###
### etch
###
deb http://ftp.at.debian.org/debian/ etch main contrib non-free
deb-src http://ftp.at.debian.org/debian/ etch main contrib non-free

deb http://security.debian.org/debian-security etch/updates main contrib non-free
deb-src http://security.debian.org/debian-security etch/updates main contrib non-free

deb http://ftp.at.debian.org/debian/ etch main/debian-installer

# etch-proposed-updates's section
deb http://ftp.at.debian.org/debian sarge-proposed-updates main contrib non-free
deb-src http://ftp.at.debian.org/debian sarge-proposed-updates main contrib non-free

# sid's section
#deb http://ftp.fi.debian.org/debian sid main contrib non-free
#deb-src http://ftp.fi.debian.org/debian sid main contrib non-free
#deb http://ftp.fi.debian.org/debian sid main/debian-installer

##
## Cleaner configuration example
##
#
# set cleanscript $var_path/clean.sh
#

# Cleaning section
clean http://security.debian.org/
clean http://ftp.at.debian.org/

skip-clean http://ftp.fi.debian.org/doc/

3. Создать локальное зеркало. Операция может занять много времени, всё зависит от того сколько дистрибутивов вы собираетесь "зеркалировать". Например, у меня выбрано sarge и etch - они занимают около 45 Гб. После того как всё будет скачано, операция автоматического обновления зеркала будет проходить в соответствии с файлом /etc/cron.d/apt-mirror. Ежедневные обновления содержат около 100 Мб.

su - apt-mirror -c apt-mirror

4. Автоматизировать очистку локального зеркала - необходимо регулярно запускать на выполнение /var/spool/apt-mirror/var/clean.sh, можно через cron.

5. Сделать локальный репозитарий доступным для локальных серверов, с помощью уже установленного и настроенного Apache - необходимо только создать символьные ссылки для доступа к репозитарию.

ln -s /var/spool/apt-mirror/mirror/security.debian.org/debian /var/www/debian
ln -s /var/spool/apt-mirror/mirror/security.debian.org/debian-security /var/www/debian-security

6. После этого локальное зеркало доступно по адресу http://mirrorserver/debian, http://mirrorserver/debian-security. А файл /etc/apt/sources.list для локальных серверов будет выглядеть примерно так:

deb http://mirrorserver/debian/ etch main
deb-src http://mirrorserver/debian/ etch main
deb http://mirrorserver/debian-security/ etch/updates main


Ссылки:

  1. How To Create A Local Debian/Ubuntu Mirror With apt-mirror

2007/03/16

Как изменить приветствие SSH-сервиса

Если сервис был самостоятельно собран из исходников, то достаточно отредактировать файл version.h и пересобрать сервис по-новому.

Всё немного сложнее, если используется уже кем-то собранный пакет. Например, Debian-система при попытке подсоединения к ней говорит:
# telnet localhost 22
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
SSH-2.0-OpenSSH_3.8.1p1 Debian-8.sarge.6

Злоумышленнику сразу выдаётся масса информации о системе.

Debian позволяет пересобрать пакет по своим потребностям и нуждам.

1. Необходимо убедиться, что файл /etc/apt/sources.list содержит хотя бы один deb-src-источник. Если не содержит - добавить. Также установить, если не установлены утилиты для сборки debian-пакетов

# cat >> /etc/apt/sourсes.list
deb-src http://ftp.at.debian.org/debian/ stable main
Ctrl + C
# apt-get update
# apt-get install dpkg-dev debhelper devscripts
...

2. Скачать и распаковать в текущую директорию debian-исходники пакета ssh

apt-get source ssh

3. Скачать и установить все необходимые для сборки пакеты (будет установлено достаточно большое количество пакетов - около 100)

apt-get build-dep ssh

4. В директории ./openssh-x.x.x/debian будет файл rules, в нем строка

SSH_VERSION := $(shell sed -e '/define/!d; s/.*\"\(.*\)\".*/\1/; q' <version.h) ... и т.д.

Можно отредактировать её по желанию, только не забыть, что она в свою очередь тоже зависит от содержимого файла version.h

5. Чтобы дальнейшие update'ы пакетов не затерли внесенные изменения, необходимо добавить в ./openssh-x.x.x/debian/changelog описание самостоятельно собранной версии. Номер версии должен отличаться, например вместо 1:3.8.1p1-8.sarge.6 укажите 1:3.8.1p1-8.sarge.6without_banner. Если что-то будет не так в данном файле сборка пакета не начнется.

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

cd ./openssh-x.x.x
debuild -us -uc
...

7. Если процесс сборки прошёл успешно, установить собранный пакет

# cd ..
# dpkg -i ssh_x.x.x_i386.deb
(Reading database ... 33306 files and directories currently installed.)
Preparing to replace ssh x.x.x (using ssh_x.x.xwithout_banner_i386.deb) ...
Unpacking replacement ssh ...
Setting up ssh (x.x.xwithout_banner) ...
Restarting OpenBSD Secure Shell server: sshd.

Ссылки:

  1. How to make a small change to a Debian tool and repackage it?
  2. Rebuilding Debian packages
  3. HOWTO: Service banner faking

2007/03/14

Fail2Ban

Fail2Ban - простой локальный сервис, который просматривает логи на предмет попытки подоброать пароли к ssh, ftp, http-сервисам. Если такие попытки найдены, fail2ban блокирует ip-адрес источника. Сервис очень гибко настраивается - возможна блокировка через iptables или /etc/hosts.allow (deny), способен оповещать по email, писать лог, сбрасывать блокировку через заданное время и прочее.
В Debian 4.0 Fail2ban доступен в репозитарии пакетов, но и из исходников он просто разворачивается, только требует наличия python 2.4.
tar xvfj fail2ban-0.6.2.tar.bz2
cd fail2ban-0.6.2
python setup.py install
...
cd config
cp debian-initd /etc/init.d/fail2ban
cd /etc/init.d
chmod +x fail2ban
update-rc.d fail2ban defaults
cp fail2ban.conf.iptables /etc/fail2ban.conf

Остаётся только подправить файл конфигурации /etc/fail2ban.conf под свои нужды.

Ссылки:
  1. Fail2Ban Homepage

2007/03/13

csv -> ldif

Что имеется - список адресатов с различными данными (номера телефонов, адреса, email и т.п.) в формате csv. Если есть xls (spreadsheet), его можно сохранить в csv.

Задача - создать адресную LDAP-книгу.

Чтобы занести уже имеющиеся данные в LDAP-диреторию, их необходимо представить в LDIF-формате. Ниже представлен простейший perl-скрипт, позволяющий выполнить данную операцию.

#!/usr/bin/perl
#
# This is an example of using the Text::ParseWords module to convert
# a comma-delimited file to LDIF. Requires Perl 5.005 or higher. Just
# pipe the CSV file to this script and redirect the output to a file:
#
# cat FILENAME.csv | csv2ldif.pl > FILENAME.ldif
#
# Anthony Greene
#
# Load the required module.
use Text::ParseWords;

# Set a default objectclass and suffix.
$objectclass = 'inetOrgperson';
$dnsuffix = 'ou=addressbook,o=SSC,c=LT';

# Read lines from STDIN.
while ($line = ) {
@fields = "ewords(',',0,$line);

# Output the values.
print "dn: cn=$fields[0], $dnsuffix\n";
print "cn: $fields[0]\n";
print "givenname: $fields[1]\n";
print "sn: $fields[2]\n";
print "objectclass: $objectclass\n";
print "objectclass: top\n";
print "mail: $fields[3]\n";
if ($fields[4]) { print "telephonenumber: $fields[4]\n"; }
if ($fields[5]) { print "facsimiletelephonenumber: $fields[5]\n";}
if ($fields[6]) { print "mobile: $fields[6]\n";}
if ($fields[7]) { print "street: $fields[7]\n";}
if ($fields[8]) { print "l: $fields[8]\n";}
if ($fields[9]) { print "postalcode: $fields[9]\n";}
if ($fields[10]) { print "o: $fields[10]\n";}
print "\n";
}
exit;

2007/03/07

Сборка ядра Linux

Статья "Некоторые замечания о сборке ядер Линукс" заставила в очередной раз обратить внимание на Linux ядро, его сборку, конфигурирование и для меня, наконец, этот процесс стал более прозрачным и понятным.

Если используется Debian-ориентированная система, то для установки всего необходимого можно воспользоваться менеджером пакетов, он установит все необходимые промежуточные зависимости:

# apt-get install linux-source-2.x.x libncurses5-dev kernel-package
# cd /usr/src
# tar xfj kernel-source-2.x.x.tar.bz2
# cd kernel-source-2.x.x
# make menuconfig
...
(конфигурирование параметров ядра)
...
# make-kpkg --append-to-version=.cramfsasmodule --revision=1.0 kernel_image
dpkg -i kernel-image-(2.x.x)(--append-to-version)_(--revision)_(architecture).deb
  • append-to-version - опция для указания версии ядра (можно использовать символы '+' и '.', нельзя использовать '_')
  • revision - опция для указания версии пакета в Debian-репозитарии (можно использовать символы '+' и '.', нельзя использовать '_'). По умолчанию используется "10.00.Custom"
  • kernel_image - сделать debian-пакет ядра

Либо всё делать вручную: скачать ядро с сайта www.kernel.org в /usr/src

# cd /usr/src
# tar xfj kernel-source-2.x.x.tar.bz2
# cd kernel-source-2.x.x
# make clean
# make menuconfig
...
(конфигурирование параметров ядра)
...
# make bzImage modules # Сборка ядра и модулей
# make modules_install install # установка модулей и ядра
# update-grub # Обновление меню загрузчика GRUB

Чтобы установить версию ядра в ручном методе, в файл /usr/src/Makefile необходимо внести поправку:

EXTRAVERSION = 20070304withusb

Статья "Ставим ядро 2.6, или Ядерная физика для домохозяйки" очень может помочь в процессе выбора необходимых опций на этапе конфигурации.

Чтобы не использовать initrd должны быть монолитно собраны драйвера корневой файловой системы (например ext3) и следущие опции:

Device Drivers -> Block devices

[*] RAM disk support
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

Также должен присутствовать в виде модуля (или монолитно)

File systems -> Miscellaneous filesystems

[*/M] Compressed ROM file system support (cramfs)

Ссылки:

  1. Некоторые замечания о сборке ядер Линукс.
  2. Ставим ядро 2.6, или Ядерная физика для домохозяйки.
  3. How To Roll A Kernel the Ubuntu/Debian Way
  4. Creating custom kernels with Debian's kernel-package system