Консольный сервер
Пред. |  | След.

# 4. Настройка сервера

## 4.1. Проверка драйвера Stallion

FreeBSD адекватно поддерживает адаптеры Stallion начиная с версии 4.4. Если ваша версия старше, вам потребуется обновить ее (это нужно сделать еще и для того, чтобы ваша система не была подвержена известным проблемам защиты). Обратитесь к описанию в файле `/usr/src/UPDATING` и Руководстве FreeBSD за подробной информацией об обновлении системы.

## 4.2. Конфигурация нового ядра

Драйвер Stallion не включён в используемое по умолчанию ядро `GENERIC`, так что вам нужно создать конфигурационный файл ядра с соответствующими записями. Обратитесь к справке по stl(4) и соответствующему разделу Руководства FreeBSD.

## 4.3. Создание устройств

Для адаптера Stallion вам нужно создать файлы устройств (которые по умолчанию не создаются). Во время выполнения описанной выше процедуры новая версия `/dev/MAKEDEV` с поддержкой Stallion будет создана утилитой mergemaster. Если у вас имеется адаптер Stallion с более чем 8 портами, то вам нужно отредактировать `/dev/MAKEDEV` и изменить определение `maxport` в районе строки 250. По умолчанию `MAKEDEV` создает файлы устройств для 8 портов, чтобы уменьшить размер каталога `/dev`.

Выполните примерно такую команду:

    # cd /dev/ && sh MAKEDEV cuaE0

для создания устройств для исходящих звонков для первого адаптера Stallion. Для получения более полной информации обратитесь к разъяснениям в `MAKEDEV` и справочной странице stl(4).

## 4.4. Компиляция conserver

> Замечание: Посмотрите раздел Разд. 9 о версиях conserver; используемая мной версия находится в коллекции портов FreeBSD, однако, существуют и другие версии.

Имеется два способа установки conserver. Вы можете либо скомпилировать её из исходных текстов, либо воспользоваться механизмом портов FreeBSD.

### 4.4.1. Использование механизма портов

Использование портов является более ясным подходом, так как система пакетов может отслеживать установленное программное обеспечение и полностью удалять его, если оно не используется. Рекомендуем использовать порт `comms/conserver-com`. Перейдите в каталог этого порта и (работая как пользователь `root`) наберите:

    # make DEFAULTHOST=consolehost install

где `consolehost` является именем машины, на которой работает консольный сервер. Задание этого при компиляции бинарного файла избавляет от необходимости указывать его каждый раз при запуске программы либо поддерживать файлы `conserver.cf` для каждого хоста. Эта команда загрузит, установит патчи, сконфигурирует, скомпилирует и установит программу conserver.

После этого вы можете выполнить `make package` для создания бинарного пакета, который можно установить на остальных хостах FreeBSD по команде pkg_add(1). Для дополнительной гибкости вы можете создать две версии пакета: одну для машины с консольным сервером без параметра `DEFAULTHOST`, а вторую для всех остальных хостов с параметром `DEFAULTHOST`. Это значит, что клиентская программа консоли на машине с консольным сервером по умолчанию будет использовать `localhost`, что будет работать при отсутствии сервера имён, при сбоях в сети, а также позволит выполнять ''доверяемые'' (то есть беспарольные) подключения через IP-адрес localhost для пользователей, подключенных к машине с консольным сервером (либо с экрана консоли, либо с вспомогательного модема). Версия для остальных машин с аргументом `DEFAULTHOST` означает, что пользователи могут просто использовать клиента console без указания каждый раз имени хоста, и необходимости настраивать файл `conserver.cf` на каждой машине.

### 4.4.2. Из tar-архива исходных текстов

Если вы предпочитаете такой способ, то можете загрузить conserver и скомпилировать его самостоятельно. Вам может понадобиться сделать это, если вы хотите установить клиент консоли на не-FreeBSD системы. Мы используем клиент на наших машинах с Solaris™, и он без проблем взаимодействует с сервером на FreeBSD. Это позволяет каждому во всей компании (многие из которых имеют ПК без доступа к хосту с FreeBSD со своего рабочего места) обращаться к консольному серверу.

Загрузите файл с FTP-сайта conserver.com. Распакуйте его в любой каталог, затем сконфигурируйте, выполнив

    % ./configure --with-master=consoleserver --with-port=782

Параметр `--with-master` помогает избежать указания главного сервера каждый раз при удалённом запуске клиента (или постоянного обновления конфигурационных файлов на всех удалённых хостах). Параметр `--with-port` помогает избежать необходимости в обновлении файла `/etc/services` на всех машинах.

После этого наберите `make` и, работая как пользователь root, `make install`.

## 4.5. Конфигурация conserver

Программа conserver настраивается через файл с именем `conserver.cf`. Этот файл обычно находится в каталоге `/usr/local/etc` и он задокументирован на справочной странице conserver.cf(5).

Наш конфигурационный файл выглядит примерно так:

    LOGDIR=/var/log/consoles
    gallows:/dev/cuaE0:9600p:&:
    roo:/dev/cuaE1:9600p:&:
    kanga:/dev/cuaE2:9600p:&:
    %%
    allow:  itga.com.au
    trusted:	127.0.0.1 buzz

Первая строка означает, что по умолчанию все файлы протоколов будут располагаться в каталоге `/var/log/consoles`. Символ ''&'' в каждой строке указывает на то, что файл журнала для этой машины будет называться `/var/log/consoles/`machine``.

В следующих трёх строках показаны три машины, к которым нам нужно подключаться. Мы используем устройства `cuaE`x`` вместо `ttyE`x``, потому что на консольных портах обычно отсутствует несущая. Это означает, что открытие `ttyE`x`` будет зависать, и conserver никогда не сможет осуществить подключение. Использование устройства `cuaE`x`` позволяет уйти от этой проблемы. Другим решением будет использование устройств `ttyE`x`` и разрешение использования на этим портах ''программной несущей'', возможно, путём установки этого при помощи устройства `ttyiE`x`` в файле `/etc/rc.serial`. Посмотрите комментарии в этом файле для выяснения всех деталей. Также посмотрите sio(4) для получения информации об устройствах с начальным состоянием и с блокированным состоянием. (Драйвер Stallion также поддерживает эти соглашения). И прочтите stty(1) для получения подробностей об установке режимов работы устройств.

В последнем разделе указано, что любой пользователь, зарегистрировавшийся на серверной машине, имеет доступ без пароля ко всем консолям. Мы делаем так, потому что на этой машине нет учётных записей пользователей, и она безопасно изолирована от внешнего мира межсетевым экраном. Строка разрешения позволяет всем на этой машине внутри нашей организации иметь доступ к консольному серверу, если он сообщит свой пароль, который записан в файле `conserver.passwd` (обратитесь к следующему разделу).

## 4.6. Задание паролей для conserver

Файл `conserver.passwd` содержит зашифрованную версию пароля каждого пользователя. Файл описан на справочной странице `conserver.cf(5)`.

Единственной хитростью является заполнение файла зашифрованными паролями. Во FreeBSD нет единого способа генерации зашифрованных паролей для включения в другой файл (однако смотрите ниже). Так что я наскоро создал хакерский perl-скрипт для этого:

    @rands = ();
    foreach (0..4) {
    	push(@rands, rand 64);
    }

    $salt = join '', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[@rands];

    $salt = '$1$' . $salt . '$';

    print 'Enter password: ';
    `stty -echo`;
    $cleartext = <>;
    `stty echo`;
    chop($cleartext);
    print crypt($cleartext, $salt), "\n";

> Замечание: Он использует пароли FreeBSD с MD5-шифрованием. Запуск скрипта на других вариантах UNIX® или во FreeBSD с шифрованием паролей DES, скорее всего, потребует другой базы шифрования.

Недавно Kris Kennaway `<kris@FreeBSD.org>` показал, что вы можете достичь того же эффекта при помощи команды `openssl passwd`:

    % openssl passwd -1
    Password: password
    $1$VTd27V2G$eFu23iHpLvCBM5nQtNlKj/

## 4.7. Запуск conserver во время загрузки системы

Существуют два способа это сделать. Во-первых, вы можете запускать conserver при помощи init, включив строчку в `/etc/ttys`, подобную следующей:

    cuaE0	"/usr/local/sbin/conserver"	unknown	on	insecure

Здесь есть два преимущества: init перезапустит главный консольный сервер, если по какой-то причине он аварийно завершит свою работу (но мы пока подобных случаев не наблюдали), и он обеспечивает то, что стандартная выдача процесса conserver будет направлена на указанный tty (в этом случае `cuaE0`). Это полезно, потому что вы можете подключить терминал к порту, а программа conserver выдаст всю консольную выдачу, не попавшую подключенному консольному клиенту. Такое использование полезно в качестве инструмента мониторинга общего характера, чтобы смотреть, что происходит. Мы сделали такой терминал в компьютерном зале видимым из основного офиса. Это очень удобная возможность. Минусом запуска conserver из файла ttys является невозможность его запуска в режиме даемона (либо init(8) будет постоянно его перезапускать). Это значит, что conserver не будет записывать PID-файл, что усложняет смену журнальных файлов.

Таким образом, мы запускаем conserver из rc.d-скрипта. Если вы устанавливали conserver как порт, то в каталоге `/usr/local/etc/rc.d` будет установлен файл `conserver.sh.sample`. Скопируйте и/или переименуйте его в `conserver.sh` для того, чтобы заставить conserver запускаться в момент загрузки системы.

На самом деле мы используем модифицированную версию этого скрипта, которая также подключает conserver к терминалу посредством tty-устройства, так что мы можем отслеживать незамеченную консольную выдачу. Наш скрипт `conserver.sh` выглядит примерно так:

    #!/bin/sh
    #
    # Startup for conserver
    #

    PATH=/usr/bin:/usr/local/bin

    case "$1" in
    	'start')
    		TTY=/dev/cuaE7
    		conserver -d > $TTY
    		# get NL->CR+NL mapping so msgs look right
    		stty < /dev/cuaE7 opost onlcr
    		echo -n ' conserver'
    		;;

    	'stop')
    		kill `cat /var/run/conserver.pid` && echo -n ' conserver'
    		;;

    	*)
    		echo "Usage: $0 { start | stop }"
    		;;

    esac
    exit 0

> Замечание: Отметьте использование устройства `cuaE0` и необходимость задания tty-режимов для правильной обработки последовательностей NL-<CR).

## 4.8. Обрезание журнальных файлов

Во FreeBSD имеется программа под названием newsyslog, которая будет обслуживать усечение журнального файла в автоматическом режиме. Просто добавьте некоторые строки в конфигурационный файл `/etc/newsyslog.conf` для журналов консолей:

    #
    # The log files from conserver
    /var/log/consoles/gallows	644  10    1000 *     Z /var/run/conserver.pid
    /var/log/consoles/kanga		644  10    1000 *     Z /var/run/conserver.pid
    /var/log/consoles/roo		644  10    1000 *     Z /var/run/conserver.pid

Здесь программе newsyslog (которая выполняется по таймеру один раз в каждый час) указывается, что файлы протоколов работы консолей должны архивироваться и сжиматься, как только они достигнут объёма в 1 Мбайт, что мы должны хранить 10 таких журналов, и что для подачи сигнала `SIGHUP` вы используете PID, записанный в файле `conserver.pid`. Это главный сервер, и он будет передавать сигнал всем дочерним процессам. Да, он будет посылать сигнал `HUP` всем клиентам, как только понадобится обновить единственный файл журнала, но это достаточно дёшево. Для выяснения всех подробностей обратитесь к newsyslog(8).

Пред. | Начало | След.
Наше решение |  | Подключение кабелей

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.