====================================================================== TNSDrive Версия 1.4 Руководство Администратора ====================================================================== Содержание ---------- 1. Введение 1.1. Что такое TNSDrive? 1.2. Что необходимо для запуска TNSDrive 1.3. Регистрация TNSDrive 1.4. Техническая поддержка 2. Установка TNSDrive 2.1. Перед установкой TNSDrive 2.2. Первая установка TNSDrive V1.4 2.3. Обновление версии TNSDrive на V1.4 3. Основная настройка TNSDrive 3.1. Настройка главного файла конфигурации (.system.conf) 3.2. Настройка языков и таблиц перекодировок (.language.conf) 3.3. Настройка входных каналов (.tty.conf) 3.4. Настройка общих пользовательских лимитов (.limits.conf) 3.5. Настройка групповых прав (.group.conf) 3.6. Настройка протоколов передачи файлов (.ftp.conf) 3.7. Настройка просмотрщиков архивов (.viewers.conf) 3.8. Настройка индексных файлов файлового архива (.filelist.conf) 3.9. Настройка запрещенных имен пользователей (.badnames.conf) 3.10. Настройка запрещенных почтовых адресов (.badaddr.conf) 3.11. Настройка почтовых псевдонимов (.aliases.conf) 3.12. Настройка динамической упаковки файлов (.mime) 4. Типичная настройка меню 4.1. Как работает меню? 4.2. Режим графики и тип терминала 4.3. Настройка меню с использованием переменных и функций 4.4. Встроенные переменные 4.5. Использование внешних программ 4.6. Настройка секции FILES (.filearea.conf) 4.7. Настройка секции MESSAGES (.msgarea.conf) 4.8. Настройка секции USENET (.usenetpath/.usenetarea.conf) 4.9. Настройка секции FTP (.ftplist.conf) 4.10. Настройка секции ONBOARD 4.11. Настройка секции PROFILE 4.12. Настройка секции BULLETINS 4.13. Другие возможности 5. База пользователей 5.1. Локальный режим и режим BBS 5.2. Профайл пользователя (.user.conf) 5.3. Альтернативный профайл (.cuser.conf) 5.4. Групповой банк времени (.guser.conf) 5.5. Альтернативная процедура входа (.startup) 5.6. Дополнительная процедура выхода (logout) Приложение А: Справочник по програмам пакета TNSDrive А.1. drive - основной выполняемый модуль А.2. tnspasswd - назначение или изменение пароля пользователя А.3. setuser - изменение текущих значений переменных процесса drive А.4. tnsadmin - обслуживание базы пользователей А.5. onboard - взаимодействие с пользователями А.6. bbsmail - помещение почты в почтовый ящик пользователя А.7. fullidx - генерация списка файлов архива А.8. tnsgroup - проверка групповых прав пользователей А.9. tnsmon - on-line монитор-ассистент А.10. msgpack - обслуживание баз сообщений Приложение Б: Основные файлы конфигурации системы Б.1. .system.conf - главные системные настройки Б.2. .language.conf - настройка языков Б.3. .tty.conf - контроль входных линий Б.4. .limits.conf - пользовательские лимиты Б.5. .group.conf - групповые права пользователей Б.6. .ftp.conf - конфигурация протоколов передачи файлов Б.7. .viewers.conf - конфигурация файл-вьюверов Б.8. .filelist.conf - конфигурация индексных файлов Приложение В: Системные файлы-сообщения пользователю В.1. .nologin - вход в систему запрещен В.2. .nonewuser - вход новым пользователям запрещен В.3. .ttyallow.show - входная линия недоступна В.4. .banner.show - системная заставка В.5. .notfound.show - такой пользователь не найден В.6. .newusers.show - вывеска новому пользователю В.7. .userdeny.show - сообщение заблокированному пользователю В.8. .badpasswd.show - сообщение о вводе плохого пароля В.9. .daylimit.show - исчерпан дневной лимит времени В.10. .climit.show - исчерпан оплаченный лимит времени В.11. .newuser.show - вывеска впервые вошедшему пользователю В.12. .rookie.show - вывеска со второго по седьмой входа пользователя В.13. .welcome.show - вывеска после седьмого входа пользователя В.14. .goodbye.show - вывеска непосредственно перед раз'единением Приложение Г: Сопутствующие программы Г.1 ngetty/showtty - getty с возможностью мониторинга линий Г.2 sz/rz - протоколы передачи файлов Г.3 zip/unzip, rar, unarj - архиваторы Г.4 pico - полноэкранный редактор Г.5 netchat - объединение on-line конференций Г.6 hydracom - двунаправленный протокол передачи файлов Г.7 lynx - текстовый WWW клиент Г.8 finger - адаптированный finger Г.9 talk/ntalkd - адаптированные talk/ntalkd 1. Введение ===================================================================== 1.1. Что такое TNSDrive? --------------------------------------------------------------------- TNSDrive является полнофункциональной универсальной системой регламен- тированного доступа к разнообразным информационным ресурсам в среде UNIX. По своим функциональным возможностям она похожа на обычные сис- темы BBS (Bulletin Board System - электронная доска объявлений). Однако в ней заложены совершенно новые оригинальные принципы подхода к организации BBS подобной системы, что позволяет использовать ее в очень широком круге задач. Традиционно системы BBS представлены тремя видами; это любительские, коммерческие и BBS поддержки. На базе TNSDrive возможно организовать любую из перечисленных видов BBS, но наиболее предпочтительным является коммерческое применение, так как в этой системе могут быть реализованы традиционно коммерческие виды услуг такие как электронная почта и электронные телеконференции с выходом на популярные глобальные вычислительные сети. Весь доступ к этим и другим ресурсам легко регламентируются администратором системы. Кроме того каждый пользователь имеет свой личный домашний каталог и почтовый ящик, скрытые от доступа других пользователей системы. Все функционирование TNSDrive можно рассматривать как совместную рабо- ту пяти основных составляющих ее частей: * интерпретатор элементов файловой системы как системы меню; * интерпретатор гипер-текста (hypertext) - текст, содержащий в своем теле некоторые команды и переменные, которые вызываются на выполне- ние либо отображение параллельно с изображением основного текста; * большого набора внутренних функций и переменных; * любых внешних приложений и программ; * и, собственно, самой базы пользователей и работы с ней; TNSDrive обладает достаточно гибкой системой регламентированного дос- тупа к имеющимся ресурсам; полностью и легко конфигурируема даже не- посредственно в процессе работы; очень проста в обслуживании базы пользователей, к каждому из которых возможен индивидуальный подход во всех настройках; состоит из большого числа вспомогательных утилит и программ. Кратко об основных возможностях TNSDrive: * DUMP и ANSI терминалы, RIP графика с поддержкой mouse; * оптимальная система ввода/вывода, пулл входных команд; * модульная система меню, состоящая из элементов файловой системы, встроенных функций и переменных; * система паролированных меню; * контроль времени работы пользователей, в том числе и во внешних приложениях; * до 256-и одновременно работающих пользователей; * неограниченное общее колличество пользователей системы; * оригинальная структура базы пользователей, персональный каталог и настроечный файл пользователя, группы пользователей; * поддержка коротких имен пользователей (callsign, alias); * две категории пользователей, понятие коммерческий пользователь; * поддержка разнообразных языков и таблиц кодировок; * телеконференции Usenet, поддерживается и локальный спул и NNTP; * базы сообщений в традиционном UNIX формате хранения почты; * электронная почта в соотвествии с RFC822; * файловые базы с поддержкой CDROM; * встроенный FTP клиент с передачей по Zmodem; * информационные бюллетени; * talk, CB chat, talk с работающими в UNIX; * активный мониторинг пользователей; * отчеты администратору по E-mail; * полноэкранная утилита для обслуживания базы пользователей; * режим ограниченного shell с системой меню; 1.2. Что необходимо для запуска TNSDrive --------------------------------------------------------------------- Прежде всего следует выбрать программные и аппаратные средства сервера на котором будет функционировать TNSDrive. Уже после этого возможно установить сам TNSDrive, инсталяция и конфигурирование которого не займет много сил. Пакет TNSDrive предназначен для работы в операционной системе UNIX. В настоящий момент поддерживаются следующие OS UNIX: * BSD/OS 2.0 i386; * FreeBSD 2.1 i386; * Linux 1.2 i386; * UnixWare 2.0 i386; * SunOS 5.4 i86pc; * SunOS 5.4 sun4c; * OSF1 4.0 alpha; * IRIX 6.3 IP32; В зависимости от планируемого количества одновременно работающих пользователей необходимо предусмотреть минимальное колличество опера- тивной памяти сервера. Следует учесть, что на одного работающего в системе пользователя требуется в среднем около одного мегабайта опера- тивной памяти. Сама система TNSDrive занимает на диске не более пяти мегабайт. Практика показывает что тысяча пользователей может занимать в среднем около пятидесяти мегабайт жесткого диска. Для полноценного обслуживания пользователей рекомендуется иметь уста- новленный sendmail, inews и другие стандартные команды OS UNIX. Рекомендуется также установить протоколы передачи файлов. 1.3. Регистрация TNSDrive --------------------------------------------------------------------- TNSDrive НЕ является програмным продуктом со статусом FREE. Вы ДОЛЖНЫ ЗАРЕГИСТРИРОВАТЬСЯ после 30 дневного оценочного периода его использо- вания. TNSDrive является Shareware продуктом. Он распространяется через кана- лы публичного доступа, поэтому потенциальные покупатели имеют возмож- ность оценить достоинства этого продукта перед тем как вынести решение о его покупке. Если Вы обнаружили его пригодным для использования, то руководствуясь легальными и моральными нормами Вы обязаны зарегистри- ровать этот факт у его автора. Регистрации должна подвергаться КАЖДАЯ РАБОТАЮЩАЯ КОПИЯ системы TNSDrive. Зарегистрированный пользователь получает: * ключ активации, позволяющий использовать все возможности пакета пол- ностью; * бесплатные обучение, поддержку и консультации; * бесплатные апдейты, багфиксы и последующие версии; * информацию о недокументированных функциях; * возможность адаптации пакета под задание (персональная реализация); Цена пакета TNSDrive в бинарном варианте эквивалентна пятидесяти пяти долларам США ($55). Цена пакета TNSDrive в исходных текстах эквивален- тна двумстам сорока пяти долларам США ($245). Для получения статуса зарегистрированного пользователя необходимо: 1. Выслать письмо по электронной почте на адрес tnsdrive@turbo.nsk.su содержащее следующую информацию. Для генерации ключа необходимо указать: * Название Вашей организации; * Полное имя и e-mail администратора системы TNSDrive; * Полное доменное имя машины для регистрации; * Краткое описание конфигурации оборудования и операционной системы; * Адрес, телефон, факс для связи с Вами. Для оформления счета на оплату: * Вариант поставки, binary или source; * Вариант отправки счета, fax или email; * Название Вашей организации; * Почтовый адрес; * Банковские реквизиты. БИК, номер счета, код по ОКОНХ, код по ОКПО и ИНН. 2. Заплатить соответствующую сумму (по счету) на: Расчетный счет N 002467214 в Октябрьском отд. Акционерного Коммерчес- кого Банка "Сибирский Банк" г.Новосибирска. БИК 045025882, ИНН 5405108280, код по ОКОНХ 713909513080290, код по ОКПО 11861343. 3. В платежном поручении указать "Програмное обеспечение: пакет TNS- Drive" и копию платежного поручения выслать на факс 383-266-4209. 1.4. Техническая поддержка --------------------------------------------------------------------- Техническая поддержка доступна для регистрированных пользователей по телефону, факсу и электронной почте. Для получения технической поддержки Вы должны сообщить нам доменное имя компьютера, на который зарегистрирован пакет TNSDrive и имя/e-mail администратора системы. По желанию зарегистрированный пользователь может быть включен в список рассылки зарегистрированных пользователей системы. Техническую поддержку пожно получить по: Email: tnsdrive@turbo.nsk.su Phone: 383-266-9136, 66-3837, 66-0622 Fax: 383-266-4209 2. Установка TNSDrive ===================================================================== 2.1. Перед установкой TNSDrive --------------------------------------------------------------------- Пакет TNSDrive поставляется в виде бинарных модулей исполняемых в раз- ных операционных системах UNIX. Перед тем как начать устанавливать пакет TNSDrive следует правильно выбрать вариант поставки пакета, соответствующий Вашей операционной системе. Для разных вариантов поставки пакета используется следующее обозначе- ние: -__.tgz где: VERSION версия пакета TNSDrive; OS операционная система; VER версия операционной системы; CPU тип процессора; Суффикс tgz обозначает что это архив tar упакованный с помощью gzip. В настоящий момент имеются следующие варианты поставки: 1.4-BSDOS_2.0_i386.tgz 1.4-FreeBSD_2.1_i386.tgz 1.4-Linux_1.2_i386.tgz 1.4-UnixWare_2.0_i386.tgz 1.4-SunOS_5.4_i86pc.tgz 1.4-SunOS_5.4_sun4c.tgz 1.4-OSF1_4.0_alpha.tgz 1.4-IRIX_6.3_IP32.tgz Подробней о содержимом архивов написано в Приложении А. Кроме бинарных модулей Вам также понадобятся примеры файлов конфигура- ции и образцы системы меню. Их можно найти в архиве Samples-1.4.tgz. А также сопутствующие программы, смотри Приложение Б. 2.2. Первая установка TNSDrive V1.4 --------------------------------------------------------------------- Установка пакета TNSDrive производится пользователем root. Процедура первой установки пакета TNSDrive для организации BBS может состоять из следующих шагов: * Создайте группу bbs (файл /etc/group), например: bbs:*:9999: * Создайте пользователя bbs (файл /etc/passwd), например: bbs::9999:9999::0:0:My Great BBS:/usr/bbs:/usr/bbs/bin/drive * Распакуйте файл с примерами конфигурации и образцом системы меню. Систему меню рекомендуется размещать в домашнем каталоге bbs: /usr/bbs/Main_menu/... Основыне файлы конфигурации рекомендуется размещать в каталоге /etc/tns следующим образом: /usr/bbs/.system.conf -> /etc/tns/system /usr/bbs/.group.conf -> /etc/tns/group /usr/bbs/.limits.conf -> /etc/tns/limits /usr/bbs/.tty.conf -> /etc/tns/tty /usr/bbs/.viewers.conf -> /etc/tns/viewers /usr/bbs/.ftp.conf -> /etc/tns/ftp /usr/bbs/.language.conf -> /etc/tns/language /usr/bbs/.filelist.conf -> /etc/tns/filelist * Распакуйте файл соответствующий Вашей OS в каталог /usr/bbs: % cd /usr/bbs % gunzip file.tgz % tar -xvf file.tar * Правильно установите set-UID и set-GID всем нуждающимся програмам (смотри Приложение А): % cd bin % chown root:tty drive # drive будет иметь set-GID на tty % chmod 2555 drive # drive могут запускать все % chown bbs:bbs onboard # onboard будет иметь set-UID на bbs % chmod 4555 onboard # onboard могут запускать все % chown bbs:bbs bbsmail # bbsmail будет иметь set-UID на bbs % chmod 4550 bbsmail # bbsmail может запускать группа bbs % chown bbs:bbs tnsmon # tnsmon будет иметь set-UID на bbs % chmod 4550 tnsmon # tnsmon может запускать группа bbs % chown bbs:bbs msgpack # msgpack будет иметь set-UID на bbs % chmod 4550 msgpack # msgpack может запускать группа bbs * Правильно установите права на каталоги принадлежащие bbs: % chown bbs:bbs /usr/bbs % chmod 751 /usr/bbs # bbs нужно записывать в свой каталог % chown bbs:bbs /usr/bbs/bin % chmod 551 /usr/bbs/bin # не нужны права на запись в bin % mkdir /usr/bbs/msg % chown bbs:bbs /usr/bbs/msg % chmod 751 /usr/bbs/msg # вероятно здесь будут базы сообщений Каталоги /tmp и /var/tmp должны быть доступны на запись bbs Остальные каталоги внутри /usr/bbs будут создаваться сами по мере необходимости в процессе работы BBS. Не следует менять их права. * Просмотрите все файлы с расширением conf во всех подкаталогах и нас- тройте их на вашу конфигурацию (смотри Часть 3 и Часть 4). Обязательно перенастройте /usr/bbs/.system.conf или /etc/tns/system. * Просмотрите все файлы с расширением show и при необходимости откор- ректируйте. * Войдите на bbs через login: bbs и проверте ее работоспособность. * Установите сопутствующие программы (смотри Приложение Б). 2.3. Обновление версии TNSDrive на V1.4 --------------------------------------------------------------------- Внимательно ознакомтесь с файлом WHATSNEW пакета TNSDrive V1.4. Обновление версии пакета TNSDrive производится пользователем root. Процедура обновления версии пакета TNSDrive может состоять из следую- щих шагов: * Создайте файл .nologin в домашнем каталоге bbs, например: % cat > /usr/bbs/.nologin Upgrading version of BBS. Please call latter... ^D * Снимите всех пользователей с линии с помощью tnsmon или с помощью программы setuser, например: % setuser daemon Jan 29 18:23:36 [netchat] 0 pid:8235 ttyA02 Feb 22 15:26:53 Alexei Suvorov 9600 pid:22084 ttyp1 Feb 22 15:25:06 Demo User 38400 pid:22114 ttyp3 Feb 22 15:25:33 Evgeny Nikitenko 9600 pid:22118 ttyA07 Feb 22 15:19:23 Andrei Firsov 2400 pid:22062 % kill -HUP 22084 22114 22118 22062 * Распакуйте файл с примерами конфигурации и образцом системы меню в какой-нибудь временный каталог и сравните их содержимое с Вашим, при необходимости отредактируйте. * Обратите внимание, в TNSDrive V1.4 появилась возможность запуска внешних приложений с помощью специальной программы-загрузчика, что может потребовать пересмотра существующей системы меню. Смотри опи- сание параметра LOADER главного файла конфигурации .system.conf (П.3.1). * Обратите внимание, в TNSDrive V1.4 произошли изменения в языково- зависимых файлах из конфигурации .language.conf. Файлы english.lng и russian.lng претерпели изменения, обновились файлы reader.enghlp и reader.rushlp, появились файлы mail.enghlp и mail.rushlp. Разместите их в соответствии с Вашей конфигурацией. * Распакуйте файл соответствующий Вашей OS в домашний каталог bbs. * Проверьте правильность расстановки прав на файлы каталога bin руко- водствуясь инструкцией по первой установке (П.2.2) и Приложением А. * Измените права на каталоги следующим образом: % chown bbs:bbs /usr/bbs % chmod 751 /usr/bbs % chown -R bbs:bbs /usr/bbs/usr % chmod 751 /usr/bbs/usr % for d in /usr/bbs/usr/*; do chmod 751 $d; chmod 750 $d/*; done * Сконвертируйте базы сообщений из старого формата (до V1.4) в новый: % msgpack -cc /usr/bbs/msg/* * Сконвертируйте почтовые ящики пользователей из старого формата (до V1.4) в новый: % msgpack -cc -m /usr/bbs/usr * Сотрите файл /usr/bbs/.nologin. * Войдите на bbs через login: bbs и проверте ее работоспособность. 3. Основная настройка TNSDrive ===================================================================== 3.1. Настройка главного файла конфигурации (.system.conf) --------------------------------------------------------------------- Все главные настройки располагаются в файле /etc/tns/system или в фай- ле .systems.conf домашнего каталога bbs. Первый вариант более предпоч- тителен. Файл не является обязательным. В системе могут сосуществовать оба файла, в этом случае при отсутствии искомой опции в /etc/tns/system она будет искаться в .system.conf. Формат файла .system.conf: # Комментарий ПАРАМЕТР=значение ... Значения у параметров задаются вплотную после символа '=' (равно) без всяких кавычек и апострофов. В текущей версии файл .system.conf может содержать все что угодно, но полезными окажутся только следующие параметры: SYSTEMNAME Устанавливает имя Вашей системы, по умолчанию "Unknown"; SYSADMNAME Устанавливает имя системного администратора. Если параметр от- сутствует, то имя системного администратора System Administra- tor; SYSMAILTO Устанавливается электронный адрес администратора системы, если параметр не задан, то вся почта для администратора будет от- правляться на пользователя root текущей машины; MYHOSTNAME Определяет имя хоста, от имени которого будут отправляться все исходящие наружу сообщения по e-mail либо в Usenet. По умолча- нию используется строковое значение, возвращаемое функцией gethostname(2). Кроме этого, администратор системы может ука- зать в персональном файле настроек пользователя аналогичный параметр DEFINE-FROM который обладает наивысшим приоритетом; LOGFILE Устанавливает полный путь и имя системного лог файла, если в имени используется '%s', то оно будет заменено на название tty с которого был вызван TNSDrive. Например, если было задано /var/tmp/%s-drive.log и программа вызвана с tty01, то информа- ция соответственно будет добавлена в /var/tmp/tty01-drive.log. Если параметр не задан, то системный журнал не будет записан; LOGLEVEL Определяет уровень детализации системного лог файла, имеет смысл только если задан параметр LOGFILE. В настоящий момент это может быть цифра от 0 до 4, где: 0 Только фатальные ошибки (LOG_ERROR); 1 Плюс системные предупреждения (LOG_WARNING); 2 Плюс полезные уведомления о действиях поль- зователя (LOG_NOTICE); 3 Плюс более детальная информация о его действи- ях (LOG_INFO); 4 Плюс системно-отладочная (LOG_DEBUG); Если параметр не определен, то детализация соответствует 0; XFERLOG Файл для логирования файловых передач пользователей c bbs. По умолчанию файл не пишется; MONITOR Здесь можно указать имя файла-устройства на которые будет вы- водиться копия экрана пользователя. Хотя это может быть и не слишком удобно при одновременной работе нескольких пользовате- лей в системе - Вы будете наблюдать полный хаос. Например, в качестве монитора можно указать неиспользуемый в вашем UNIX /dev/ttyc8, следует только позаботиться о правах на запись в него. Если параметр не указан, то мониторинга не производится; MENUPATH Этот параметр задает имя каталога с которого следует начинать интерпретацию структуры файловой системы как системы меню. Ес- ли параметр отсутствует, то по умолчанию принимается каталог от рабочей (домашней) директории по имени Main_menu. В ло- кальном режиме при запуске программы имеется возможность за- дать эту стартовую директорию в первом аргументе. Во втором аргументе можно задать Ваш цифровой уровень доступа; PRIVLEVEL Задается цифрой уровень доступа, который получает впервые во- шедший в систему пользователь или пользователь совсем потеряв- ший с помощью администратора свой уровень привилегий. Если па- раметр не задан, то уровень доступа присваивается минимальный; TIMELEFT Задается цифрой предопределенное максимальное суточное время в минутах предоставленное пользователю для работы в системе. Ес- ли параметр не задан, то он по умолчанию считается равным од- ному часу. Обладает меньшим приоритетом чем аналогичный пара- метр из файла конфигурации системных лимитов .limits.conf. На- ивысшим же приоритетом обладает переменная DAILYTIMELEFT из персонального файла настроек пользователя. Если пользователь несколько раз заходит в систему - в этой переменной записыва- ется его оставшееся время; MAXUSERS Задает максимальное количество пользователей, одновременно на- ходящихся в системе. Если вновь входящий пользователь окажется выше этого значения, то он будет отвергнут. Если параметр не задан, то это число не лимитировано; MAXLOADAVG Определяет значение загрузки системы, при которой вход в BBS начинает отвергаться; UPLOADPATH Параметр указывает путь к каталогу, в который будут попадать переданные пользователями на BBS файлы, т.е. каталог для Uplo- ad. Если параметр отсутствует, то по умолчанию весь Upload пойдет в каталог с именем .upload/ который будет создан в ра- бочем (домашнем) каталоге программы. Наивысшим же приоритетом обладает аналогичная переменная из персонального файла настро- ек пользователя; UPLOADINFO Определяет строку, характеризующую upload пользователя при формировании файла files.bbs. Например по строке # Uploaded by $USER at $SYSTEMTIME в files.bbs перед именем файла будет добавлено # Uploaded by John Doe at Thu Nov 24 18:22:48 1996 HIDEDIRS Задает список верхушек каталогов (разделяются пробелами), ко- торые следует скрыть от пользователя. Рабочий каталог самой системы скрывается автоматически; READFILESDIR Определение альтернативного имени каталога, содержащих инфор- мационные файлы-бюллетени. Каталог адресуется относительно те- кущего меню. По умолчанию ".readfiles"; NODESCONFILE Указанная тут строка будет выводиться в качестве комментария к файлу при его отсутствии; BADPASSWORD Определяется набор действий (разделяются пробелами) которые происходят в случае, если пользователь за пять попыток не вве- дет правильный пароль; каждое ключевое слово определяет дейс- твие: Block пользователь блокируется (в файле персональных настроек обнуляется поле пароля); Note подготовить системное сообщение #217 которое будет отображено этому пользователю при после- дующем удачном входе; Log записывается рапорт в Log-файл, определенный переменной LOGFILE; Mail по e-mail посылается письмо администратору системы (адрес администратора в переменной SYSMAILTO); ICONSPROTO Определяет RIPscrip block transfer mode протокол. Задается в виде двух параметров разделенных двоеточием, первая цифра оп- ределяет номер спецификации протокола со стороны клиента для приема RIP графики; второй параметр путь до программы со сто- роны BBS, которая будет запускаться для передачи RIP графики; LANGUAGE Системный язык по умолчанию (из имеющихся в .language. conf; English или Russian). По умолчанию English; SHELL Используется только в качестве переменной окружения для внеш- них программ. По умолчанию bin/sh относительно домашнего ката- лога bbs; MAILER Программа отправки электронной почты. Запускается как: /path/send_mail to-addr[,cc-addr] file По умолчанию bin/send_mail относительно bbs homedir; INEWS Программа отправки артиклей (статей Usenet). Запускается как: /path/send_news file По умолчанию bin/send_news относительно bbs homedir; LOGOUT Программа, которая будет вызвана непосредственно перед выходом пользователя из BBS (завершением процесса). Передается один параметр - колличество использованных минут. По умолчанию bin/logout относительно bbs homedir; EDITOR Программа редактирования писем. Запускается как: /path/editor [+N] file По умолчанию bin/pico относительно bbs homedir. TALK Программа общения двух пользователей. Запускается как: /path/talk person [ttyname] По умолчанию /usr/bin/talk; FINGER Программа поиска информации о пользователе. Запускается как: /path/finger [user | user@host | @host] По умолчанию /usr/bin/finger; INFINITY Отключить контроль времени нахождения пользователей в on-line конференции на BBS (Yes/No). По умолчанию No; LOADER Программа-загрузчик используемая процессом drive для запуска внешних приложений из системы меню, редактора писем, talk, finger и вьюверов из .viewers.conf. FBENC Кодировка, в которой находятся файлы files.bbs (по умолчанию KOI8-R 3.2. Настройка языков и таблиц перекодировок (.language.conf) --------------------------------------------------------------------- TNSDrive одновременно поддерживает до 16 различных языков и таблиц пе- рекодировок, но все они могут использоватся только во внутренних фун- кциях программы, о языке запускаемых внешних программ Вы должны поза- ботиться сами. Наличие разнообразных языков и соответствующие им таблицы перекодиро- вок располагаются в файле /etc/tns/language или в файле .language.conf домашнего каталога bbs. Первый вариант более предпочтителен и он имеет высший приоритет. Файл является обязательным. Должен быть определен по крайней мере один язык. Формат файла .language.conf: # Язык НомерЯзыка/КодоваяСтраница ФайлСообщений[, Таблица] Описание English 1/0 english.lng English Russian(KOI8) 2/0 russian.lng Кодировка koi8-r Russian(WIN) 2/1 russian.lng, table.win ЙНДХПНБЙЮ 1252 ... Язык: Перый столбец файла содержит сокращенное название языка/коди- ровки, это поле используется как идентификатор для внутренних языковых операций и сохранения установки языка в профайле пользователя; Номер Языка и Кодовая Страница: Второй столбец заполняет соответствующими значениями внутрен- ние переменные LANGNUMBER и CODEPAGE, которые Вам могут приго- дится при селективном вызове внешних приложений или файлов отображения в зависимости от этих параметров; Файл системных Сообщений: Третий столбец указывает на файл с системными сообщениями. Ре- комендуется указывать абсолютный путь к файлу иначе он будет адресоваться относительно текущего каталога (домашнего катало- га bbs). Файл системных сообщений состоит из двух полей: по- рядковый номер сообщения и текст сообщения в двойных апостро- фах. Нумерация сообщений должна быть линейна. Если поле текста сообщения не заключено в апострофы то это имя файла из которо- го следует взять текст сообщения. Рекомендуется указывать аб- солютный путь к файлу иначе он будет адресоваться относительно текущего каталога (домашнего каталога bbs); Таблица перекодировки: Четвертый столбец указывает на файл с таблицей перекодировки. Таблица перекодировки может отсутствовать, в этом случае ника- кой перекодировки символов при выводе пользователю какого-либо текста производиться не будет. Считается что любые русские тексты в bbs храняться в кодировке koi8-r. Рекомендуется ука- зывать абсолютный путь к файлу иначе он будет адресоваться от- носительно текущего каталога (домашнего каталога bbs). Файл с таблицей перекодировки имеет построчную структуру, где каждая строка состоит из трех полей: первое число - десятичный код символа во внутреннем представлении; второе - код вводимо- го пользователем символа предназначенного для трансляции во внутреннее представление; третье - в какой код преобразовывать данный символ из внутреннего представления при выводе пользо- вателю. Совершенно не обязательно описывать всю кодовую стра- ницу (255 символов) а только те символы, которые требуют пере- кодирования; Описание: Пятый столбец содержит описание этого языка/кодировки в нату- ральном виде, т.е. так, как это будет показано пользователю при выборе нужного ему языка. Строка описания может иметь про- извольную длинну и произвольный набор символов; Рекомендуется располагать все файлы, связанные с описанием языков, таблиц перекодировок и системными сообщениями в каталоге /etc/tns и использовать абсолютную адресацию в путях к этим файлам. 3.3. Настройка входных каналов (.tty.conf) --------------------------------------------------------------------- В файле /etc/tns/tty или в файле .tty.conf домашнего каталога bbs опи- сываются доступные для входа в систему каналы с возможностью указания интервалов времени. Первый вариант более предпочтителен и он имеет высший приоритет. Файл не является обязательным, если отсутствует то любые входые каналы разрешены. Формат файла .tty.conf: # Маска [Признак [Время...]] # Вход с системных консолей; не контролировать время пребывания ttyc* infinity # Вход с консолей; разрешено только в рабочее время каждый день tty00 infinity 08:30-17:00 tty01 infinity 08:30-17:00 # Модемы; разрешено только с 22:00 Пятницы до 08:00 Понедельника ttyA* 5=22:00-6=23:59 0=00:00-1=08:00 # Остальные входы (по сети); разрешено всегда tty* ... Маска: Задается маска с помощью regex-выражения на входные каналы (устройства tty) с которых могут зайти пользователи. Смотри regex(3) или regexp(3); Признак: В настоящий момент возможен только один признак - Infinity. Означает что у пользователя зашедшего с такого канала не будет уменьшаться счетчик времени пребывания в системе (получает статус Infinity), отключается также проверка активности ввода пользователя (Idle); Время: Время когда вход с данного канала разрешен. Если не указано, то разрешено в любое время. Формат этого поля: D=HH:MM-D=HH:MM ... D Дни недели от 0 до 6 (Воскресенье = 0). Если не указа- но, то каждый день; HH Часы суток от 00 до 23; MM Минуты часа от 00 до 59; Поиск на совпадение по имени входного устройства осуществляется сверху вниз до первого совпадения. Смотри также: regex(3), regexp(3), re_format(7). 3.4. Настройка общих пользовательских лимитов (.limits.conf) --------------------------------------------------------------------- В файле /etc/tns/limits или в файле .limits.conf домашнего каталога bbs определяются некоторые системные лимиты, которые будут активны для пользователя, подошедшего под соответствующий уровень доступа. Файл не является обязательным. Все значащие поля содержат десятичные цифровые значения и разделяются между собой знаком табуляции. В настоящий момент таких полей 11: # Access Daily Session DL UL DL/UL Msg Msg Art Art Art # level time time size multi ratio read post read size post #--------------------------------------------------------------- 0 60 60 1024 2 0 0 0 0 0 0 10 70 60 1024 2 0 0 0 0 0 0 20 80 60 2048 3 0 0 0 0 0 0 ... 80 140 0 0 0 0 0 0 0 0 0 90 0 0 0 0 0 0 0 0 0 0 Access level: Уровень доступа пользователя. Здесь могут быть указаны произ- вольные значения в диапазоне от 0 до 99. Важно чтобы значения возрастали от начала к концу файла. Соответствующий уровень доступа подбирается по алгоритму "пока не больше" относительно текущего уровня доступа пользователя; Daily time: Суточный лимит времени в минутах предоставляемый пользователю для пребывания в системе. По умолчанию 60 минут. Если указано нулевое значение то счетчик времени пребывания в системе не уменьшается (пользователь получает статус Infinity), отключа- ется также проверка активности ввода пользователя (Idle); Session time: Максимальное время продолжительности одного сеанса (сессии) в минутах. По умолчанию (если указан 0) эквивалентно Daily time; DL size: Максимальный суточный размер файлов для Download в килобайтах; По умолчанию (если указан 0) не ограничено; UL multi: Множитель, на который будет умножен размер Upload пользователя для компенсации значения параметра DL size в переделах текуще- го соединения. По умолчанию (если указан 0) компенсация не производится; DL/UL ratio: Коэффициент отношения Download к Upload необходимый пользова- телю для дальнейшего Download, однако он начинает действовать только когда общий размер Download пользователя начинает пре- вышать значение DL size. По умолчанию (если указан 0) слежения за соотношением Download к Upload не производится; Msg read: Максимально допустимое количество писем электронной почты дос- тупных пользователю на чтение. По умолчанию (если указан 0) не ограничено; Msg post: Максимально допустимое количество писем электронной почты дос- тупных пользователю на отправку. По умолчанию (если указан 0) не ограничено; Art Read: Максимально допустимое количество артиклей (статей Usenet) доступных пользователю на чтение. По умолчанию (если указан 0) не ограничено; Art Size: Максимально допустимый общий размер артиклей (статей Usenet) в килобайтах доступных пользователю на чтение. По умолчанию (ес- ли указан 0) не ограничено; Art Post: Максимально допустимое количество артиклей (статей Usenet) доступных пользователю на отправку. По умолчанию (если указан 0) не ограничено; Данный файл не обязателен, существуют параметры по умолчанию, которые будут использованы при отсутствии, невозможности чтения либо ошибочном содержимом данного файла. Все указанные здесь лимиты могут быть назначены пользователю индивиду- ально в его персональном файле настроек, такие лимиты обладают высшим приоритетом при определении пользовательских лимитов. 3.5. Настройка групповых прав (.group.conf) --------------------------------------------------------------------- Права пользователей в системе TNSDrive двумерны. Помимо традиционного разделения пользователей по уровням доступа каж- дый из них может быть также отнесен к одной или нескольким группам. В каждой группе описываются вполне определенные права на конкретные ре- сурсы системы. Общее количество групп не ограничено. Пользователь мо- жет входить не более чем в 100 групп одновременно. В файле /etc/tns/group или в файле .group.conf домашнего каталога bbs содержится конфигурация групп пользователей. Первый вариант более предпочтителен и обладает высшим приоритетом. Файл не является обяза- тельным. Формат файла .group.conf: GroupName ServiceID ResourceMask Permission ResourceMask Permission ... ServiceID ResourceMask Permission ... GroupName ... Group Name: %Group Группа Создает название группы и открывает записи прав отно- сительно этой группы. Заканчивается при следующем %group или по концу файла; %Include Группа Включает записи прав предварительно описанной группы в текущую группу. Данная директива должна быть последней директивой в описании текущей группы; Service ID: %Menu Операции с меню. Задает маску прав на элементы файло- вой системы являющиеся элементами системы меню; %File Файловые операции. Задает маску прав на элементы фай- ловой системы являющиеся элементами архива файлов; %Usenet Операции с Usenet. Задает маску прав на названия групп Usenet; %Message Операции с сообщениями. Задает маску прав на элементы файловой системы являющиеся элементами базы сообщений; %Email Операции с адресами электронной почты. Задает маску прав на почтовые адреса в системе Internet; %Ftp Операции с FTP. Задает маску прав на адреса ftp серве- ров и элементы их файловой системы; Resource Mask: Задается маска на ресурс с помощью regex-выражений. Смотри regex(3) или regexp(3); Permission: Задает маску прав доступа к элементу ресурса. Является строкой из следующего набора символов: S Права на сканирование (видимость ресурса); R Права на чтение; W Права на запись; D Права на удаление; - Отнять соответствующие права; + Добавить соответствующие права; Формат свободный, например: SR Есть права S и R, нет прав W и D; -W -D Отнять W и D от текущих прав; +D Добавить D к текущим правам; + Есть все права; - Нет никаких прав; Права по умолчанию: +S +R +W -D или более кратко SRW В директивах %Menu и %Ftp права W и D смысла не имеют. По ключевому слову HOME в regexp выражении задается текущий домашний каталог пользователя в директиве %File и персональный почтовый ящик пользователя в директиве %Message. В маске директивы %Ftp проверяются права по конструкции host/filepath. По умолчанию все пользователи относяться к группе Default. Регистр символов в названиях групп не учитывается. Название группы не может содержать пробельные символы. Программа tnsgroup предназначена для тестирования файла .group.conf на соответствие формату и для наглядного отображения совокупных прав групп. Смотри также: regex(3), regexp(3), re_format(7). Приложение А. 3.6. Настройка протоколов передачи файлов (.ftp.conf) --------------------------------------------------------------------- TNSDrive не имеет встроенных протоколов передачи файлов (кроме ZmFTP) из соображений минимизации размера выполняемого модуля и мобильности. TNSDrive может использовать любые внешние протоколы, например из ком- плекта sz/rz Чука Форсберга из Omen Technology Inc. Конфигурация файловых протоколов находится в файле /etc/tns/ftp или в файле .ftp.conf домашнего каталога bbs. Первый вариант более предпоч- тителен и обладает высшим приоритетом. Файл не является обязательным. Формат файла .ftp.conf: # Признаки ИмяПротокола ПрограммаПротокола DB Zmodem /usr/bin/sz -b -s %s UB Zmodem /usr/bin/rz -r %s D Xmodem /usr/bin/sx U Xmodem /usr/bin/rx DB,HR Hydra-Bidir /usr/bin/hydracom lin %d nor nob sen UB,HR Hydra /usr/bin/hydracom lin %d nor nob get Признаки: Первая колонка характеризует протокол, в ней возможно наличие следующих признаков: D Протокол может использоваться при Download (передача к пользователю); U Протокол может использоваться при Upload (прием от пользователя); B Протокол поддерживает передачу сразу несколь- ких файлов (батч-протокол); , Протокол совместим с DSZ и вырабатывает соот- ветствующий DSZ лог-файл, далее указываются признаки направления передачи файлов: первым символом после запятой протокол отмечает в лог-файле направление передачи от системы к пользователю; вторым символом от пользователя к системе; Имя Протокола: Вторая колонка содержит однословное название протокола так как оно будет показано пользователю и записано в системный лог- файл; Программа Протокола: В третьей колонке указывается полный путь к программе реализу- ющей данный протокол. Тут же возможно указание необходимых ар- гументов. Имена файлов подаются списком в конце этого описа- ния; Следует иметь ввиду что батч-протоколы должны уметь создавать лог-фай- лы с именами и размерами удачно принятых и посланных файлов. В приве- денном примере '%s' при старте протокола будет заменено именем такого логфайла. Это необходимо для достоверного определения принятых/пере- данных файлов, иначе возможна ситуация, когда пользователь запросил Download к примеру сразу двух файлов, удачно принял первый а на втором просто прервал прием или связь с ним случайно разорвалась, то в случае если ваш zmodem не создал такого лог-файла, будет считаться что пользователю не удалось принять и первый файл - он окажется неучтен- ным! Подобная ситуация может возникать и при Upload. Для файловых протоколов поддерживающих формат DSZ лог-файла следует указывать параметр '%d', вместо которого при старте будет помещена ак- туальная скорость соединения, которая может быть использована ими для внутренних вычислений. При использовании последних необходимо также указать системе односимвольные DSZ признаки направления передачи. Все файловые передачи осуществляются с текущим каталогом в .files, ко- торый будет создан в домашнем каталоге bbs. В этом же каталоге могут оставаться некорректно принятые от пользователя файлы или файлы отвер- гнутые системой на основании конфигурации групповых прав. Индексный файл с описанием загруженных файлов files.bbs также может быть создан системой в этом каталоге. 3.7. Настройка просмотрщиков архивов (.viewers.conf) --------------------------------------------------------------------- В файле /etc/tns/viewers или в файле .viewers.conf домашнего каталога bbs описываются программы-просмотрщики содержимого файлов файлового архива BBS. Первый вариант более предпочтителен и обладает высшим при- оритетом. Файл не является обязательным. Формат файла .viewers.conf: # Маска Программа arj$ |/usr/local/bin/unarj %s \.a[0-9][1-9]$ |/usr/local/bin/unarj %s zip$ |/usr/contrib/bin/unzip -l %s tar\.gz$ |/usr/local/bin/untgz %s jpg$ /usr/local/bin/jpgview %s .* |/bin/cat %s Маска: Задается маска на файлы с помощью regex-выражения. Смотри regex(3) или regexp(3); Программа: Файлы, совпавшие с маской, будут показаны с помощью указанной здесь программы, где '%s' будет при старте заменено именем та- кого файла. Если программа начинается с символа '|' то ре- зультат выполения программы будет сохранен во временный файл и по окончании программы показан пользователю с возможностью листания вверх/вниз иначе программа запускается с непосредс- твенным взаимодействием с терминалом пользователя; Пример с jpgview расчитан на случай, когда используется терминал RIP версии 2.00 или более поздний позволяющий просматривать графические изображения. Смотри также: regex(3), regexp(3), re_format(7). 3.8. Настройка индексных файлов файлового архива (.filelist.conf) --------------------------------------------------------------------- Как правило внутри каждого каталога файлового архива (раздела файлов) присутствует файл с описанием содержимого данного каталога, формат и название этого файла совместимы с общепринятым форматом files.bbs, к примеру этот формат используется в таких популярных системах BBS как Maximus-CBCS и Remote Access. Такой файл принято называть индексным файлом файлового архива. Формат индексного файла: # comment - Header description - filename.ext File description... ... Обычно он содержит начиная с первой позиции имя файла и через раздели- тели (пробелы и табуляции) его описание в одну строку. Кроме этого в нем могут присутствовать закоментированные сроки (символы '#' или '.' в первой позиции) не видимые для пользователей, или произвольные стро- ки текста, которые отображаются пользователю как есть. При выводе слишком длинного для одной строки экрана описания к файлу, перенос и форматирование производятся автоматически. Если в Вашем файловом архиве используются CDROM'ы разных производите- лей, то вероятно они будут обладать совершенно разными индексными фай- лами, преобразовать же их к единому формату разумеется невозможно. Или Вы уже имели полностью сформированный файловый архив и Вам не хотелось бы менять его структуру, формат и названия индексных файлов. Все возможные варианты конфигурации индексных файлов описываются в файле /etc/tns/filelist или файле .filelist.conf домашнего каталога bbs. Первый вариант более предпочтителен. Формат файла .filelist.conf: # Маска ИндексныйФайл ^/pub/files/* files.bbs, all ^/pub/cdrom1/* 00_index.txt, raw ^/pub/cdrom2/* !/usr/bin/cd2bbs Маска: Задается маска на каталоги с помощью regex-выражения. Смотри regex(3) или regexp(3); Индексный Файл: Описывается принцип вывода содержимого каталогов, совпавших с маской. Формат этого поля: [!][path]IndexFile[, all | raw ] где: ! Выполнить программу IndexFile и интерпретиро- вать результат ее вывода в stdout как индек- сный файл. По умолчанию сам IndexFile интепре- тируется как индексный файл; path Полный путь до IndexFile, если не задан то он ищется в каталоге текущего файлового раздела; all Показывать все файлы, включая и реально отсут- свующие в каталоге текущего файлового раздела; raw Не проверять наличие файлов на диске и не ин- терпретировать содержимое индексного файла; В данной примере файла .fileslist.conf определено: Все подкаталоги в каталоге /pub/files содержат индексные файлы с име- нем files.bbs, при этом показывать следует все что в них описано, в том числе и те файлы, которых в действительности нет на диске (такие файлы маркируются как off-line). Все подкаталоги в каталоге /pub/cdrom1 содержат индексные файлы с име- нем 00_index.txt, режим отображения их выбран таким, при котором не осуществляется проверка наличия описанных файлов на диске и при выводе за названием файла будет сразу же следовать его описание, причем счи- тается что в поле описания уже присутствует вся необходимая информа- ция, например его дата и размер. Режим raw существенно ускоряет вывод информации о файлах каталога, что может быть критично для низкоскорос- тных накопителей, например CDROM, или крайне загруженных дисковых сис- темах. Все подкаталоги в каталоге /pub/cdrom2 не содержат как таковых индек- сных файлов, вместо этого всякий раз следует вызывать программу cd2bbs и интерпретировать ее вывод в stdout как индексный файл. На время вы- зова текущий рабочий каталог переключается в каталог текущего файлово- го раздела что упрощает программе поиск нужной информации. Такие внешние программы-индексы должны выводить список в stdout кото- рый будет перехвачен, обработан по формату индексного файла и только после этого показан пользователю. Заметьте, перехватывается только по- ток stdout и если программа желает что-то вывести непосредственно на терминал пользователя то ей следует воспользоваться каналом stderr. Если в каталоге текущего файлового раздела не найдено индексного фай- ла, то пользователю будет показано все содержимое каталога, но без описаний к файлам. Смотри также: regex(3), regexp(3), re_format(7). 3.9. Настройка запрещенных имен пользователей (.badnames.conf) --------------------------------------------------------------------- В файле .badnames.conf домашнего каталога bbs перечисляются маски имен, запрещенных для использования в системе. Маскирование выполня- ется с помощью regex-выражений, регистр букв не учитывается. Файл не является обязательным. Пример файла .badnames.conf: # Комментарий ^sysop ^bbs first.last$ kill fuck Пользователям с именами sysop, bbs, first last, kill, fuck доступ к системе запрещен. Смотри также: regex(3), regexp(3), re_format(7). 3.10. Настройка запрещенных почтовых адресов (.badaddr.conf) --------------------------------------------------------------------- В файле .badaddr.conf домашнего каталога bbs перечисляются маски на адреса электронной почты, на которые пользователям bbs запрещено посы- лать письма. Маскирование выполняется с помощью regex-выражений, ре- гистр букв не учитывается. Файл не является обязательным. Файл с именем .badaddr.conf может также присутствовать в персональном каталоге пользователя, в этом случае глобальный .badaddr.conf из до- машнего каталога bbs не используется. Таким образом маски на почтовые адреса возможно задавать пользователям индивидуально. Пример файла .badaddr.conf: # Комментарий info list web www mail[@%:!] serv[@%:!] server[@%:!] service[@%:!] ^ms[@%:!] ^ms[0-9][@%:!] ftp[@%:!] news[@%:!] ^ns[@%:!] relis[@%:!] galaxy[@%:!] ^gm[@%:!] gate[@%:!] fax[@%:!] tty[@%:!] telex[@%:!] Пользователям запрещено посылать электронные письма на коммерческие сервера сети Релком. Смотри также: regex(3), regexp(3), re_format(7). 3.11. Настройка почтовых псевдонимов (.aliases.conf) --------------------------------------------------------------------- В файле .aliases.conf домашнего каталога bbs в его левом поле перечис- ляются маски (алиасы) на адреса электронной почты, при совпадении с которыми будет производиться подстановка соответствующих строковых значений правого поля. Маскирование выполняется с помощью regex-выра- жений, регистр букв не учитывается. Файл не является обязательным. Файл с именем .aliases.conf может также присутствовать в персональном каталоге пользователя, в этом случае глобальный .aliases.conf из до- машнего каталога bbs не используется. Таким образом маски на почтовые адреса возможно задавать пользователям индивидуально. Пример файла .aliases.conf: # Комментарий john john@foo.bar news newsserv@foo.bar ftp ftp-mail@foo.bar Если введенная пользователем в поле адресата (поле To) строка не со- держит символа '@', то считается что введен алиас и его адресное зна- чение следует искать в списке алиасов. Результирующая строка адресата приводится к нижнему регистру с фильт- рацией на запрещенные символы. Пропускаются только латинские буквы, цифры и символы из набора ".!@#%-_:/=", строка завершается при обнару- жении любого символа с кодом меньше либо равно пробел или символов ',' и ';'. И только после этого производится проверка на запрещенные адре- са электронной почты из .badaddr.conf. Смотри также: regex(3), regexp(3), re_format(7). 3.12. Настройка динамической упаковки файлов (.mime) --------------------------------------------------------------------- В TNSDrive имеется механизм, позволяющий динамически упаковывать файлы в один архив непосредственно перед передачей пользователю. Прежде чем передать пользователю выбранные им файлы, TNSDrive просматривает сна- чала каталог текущего файлового раздела а после и каталог текущего ме- ню в надежде найти там файл конфигурации с именем .mime. Формат файла .mime: # Маска Расширение Программа \.txt$ zip /usr/contrib/bin/zip -j %s \.doc$ lzh /usr/local/bin/lha a %s Маска: В этом поле указана маска на файлы которые следует подвергать упаковке. Маска задается с помощью regex-выражения. Смотри regex(3) или regexp(3); Расширение: Поле содержит расширение, которое получит результирующий ар- хив. Если поле содержит слово zip, то имя архива будет выгля- деть как dlXXXXXX.zip (где X уникальный набор символов); Программа: Программа-архиватор, с помощью которой будет получен файл-ар- хив. Имя этого результирующего файла передается программе в аргументе '%s'. Упаковка происходит в каталог /tmp непосредственно перед передачей пользователю, после передачи файл удаляется. Смотри также: regex(3), regexp(3), re_format(7). 4. Типичная настройка меню ===================================================================== 4.1. Как работает меню? --------------------------------------------------------------------- Меню - это структура каталогов и файлов в файловой системе UNIX, ин- терпретируемая и изображаемая программой по определенным правилам. Лю- бой элемент меню может динамически изменяться прямо в процессе работы программы, т.е. каждый элемент меню подвергается интерпретации только при входе в это меню и при его перечитывании. Внешний вид каждого отдельного меню помимо вида по умолчанию может иметь свою собственную форму, определяемую администратором, содержание же этого меню определяется элементами файловой системы данного катало- га. Файловая структура интерпретируется по следующим правилам: * Элементом меню считается любой файл или каталог в файловой системе UNIX владелец которого имеет идентификатор пользователя (UID) меньше 100 и у которого в имени присутствует хотя бы один символ отличный от точки, тире и пробела. Первый "большой" символ в имени файла или каталога считается однобуквенной командой вызова данного элемента меню. Элементы меню могут быть написаны как латинскими так и русскими буквами; * Цифра за последней точкой в имени файла или каталога является мини- мальным уровнем доступа к этому элементу меню, если такая цифра от- сутствует, то уровень доступа минимальный (нулевой), т.е. элемент меню доступен абсолютно всем пользователям системы; * В каталог входят как в меню, причем каталоги (меню) могут иметь лю- бую степень вложенности; * Если файл выполняемый, то он непосредственно вызывается на выполне- ние с помощью системного вызова execve без привлечения shell. Файлы интерпретируемые shell должны содержать `#!/bin/sh' в своей первой строке. Файлы с UID владельца >= 100 игнорируются; * Если файл не является выполняемым, то его содержимое просто изобра- жается, при этом в тексте могут присутствовать ключевые слова вс- троенных в программу функций и переменных. Такие функции и перемен- ные должны быть обрамлены с обеих сторон символом процента '%', они обрабатываются последовательно по мере вывода на экран. Файлы с UID владельца >= 100 изображаются без всякой интерпретации; * Файл с именем .header (если он есть) изображается непосредственно перед изображением самого меню. Остальное как в предыдущем пункте; * Файл с именем .footer изображается сразу после меню. Остальное как в предыдущем пункте; * Файл с именем .help изображается по команде `?' в этом меню. Ос- тальное как в предыдущем пункте; * Если любой из изображаемых файлов отсутствует в каталоге текущего меню, то будет произведена дополнительная попытка отыскать его в рабочем (домашнем) каталоге системы. Таким образом, меню зависимые файлы .header, .footer или .help (и не только они), расположенные в домашнем каталоге системы, являются глобальными для любой точки ме- ню, не имеющей собственных аналогичных файлов; Меню могут быть защищены паролем. Для этого необходимо расположить в каталоге этого меню не пустой файл .password, где первая строка содер- жит пароль в некриптованном виде, остальное содержимое игнорируется. Если существует файл .password.show, то он будет отображен пользовате- лю непосредственно перед запросом пароля. С помощью линков можно организовывать разнообразные переходы между не связанными между собой меню, возврат из подменю и т.п. Например, для осуществления процедуры выхода из меню, файл Quit должен быть линком на вышестоящий каталог. Ввод пользователя имеет приоритет перед экранным выводом, т.е. если пользователь в процессе получения экранного изображения вводит очеред- ную команду или аргумент, то незаконченный экранный вывод подавляется. Таким образом, пользователь может вводить последовательность команд не дожидаясь окончания выполнения текущей операции (конвеерный ввод ко- манд), но ряд внутренних функций может принимать аргументы также из этого потока (например команда WhoIsWho), поэтому команда с аргументом может быть только последней в потоке команд. Затянувшийся вывод может быть прерван пользователем с помощью ^C, с помощью ^U пользователь имеет возможность удалить строку редактирова- ния целиком, ^D - экстренный выход из системы. 4.2. Режим графики и тип терминала --------------------------------------------------------------------- TNSDrive поддерживает три основных режима графики: * DUMP с отсутствием графики и позиционирования, режим телетайпа; * ANSI графика; * RIP графика в соответствии с RIPscrip V2; При использовании программы в локальном режиме происходит сопоставле- ние типа терминала пользователя (из переменной окружения TERM) поддер- живаемой им графики: Тип терминала Режим графики ----------------------------- unknown DUMP vt52 DUMP vt100 ANSI ansi ANSI ibmpc3 ANSI at386 ANSI rip RIP При входе пользователя в BBS один из трех режимов графики выбирается самим пользователем, возможна и предварительная установка этого пара- метра с помощью переменной TERM в профайле пользователя. По умолчанию пользователь получает ANSI режим графики. В режиме DUMP пользователь наблюдает простой монохромный текст, где ключевые символы в меню просто заключены в скобки. Информация выводит- ся посимвольно без позиционирования курсора по экрану. Управляющие символы графики должны отсутствовать в меню. Терминал ANSI является доминирующим в среде современных BBS, и еще не скоро сдаст свои позиции благодаря довольно приемлемому пользовательс- кому интерфейсу с одной стороны и малыми затратами на разработку с другой. Файл с ANSI-графикой содержит управляющие коды, начинающиеся с символа ESC (код 32 в таблице ASCII). Замечание: не все редакторы позволяют вводить символ с кодом ESC. Нап- ример во встроенном редакторе Demos Commander'а для ввода этого симво- ла нужно нажать комбинацию Ctrl-V и удерживая Alt набрать 32 на цифро- вой клавиатуре. Некоторые управляющие ANSI-последовательности: Код Функция ------------------- --------------------------------------------- Функции позиционирования курсора ESC[#;#H или ESC[#;#f Передвинуть курсор на строку # столбец # ESC[#A Передвинуть курсор вверх на # строк ESC[#B Передвинуть курсор вниз на # строк ESC[#C Передвинуть курсор вперед на # позиций ESC[#D Передвинуть курсор назад на # позиций ESC[#;#R Показать текущую позицию (строка,столбец) ESC[s Запомнить текущую позицию курсора ESC[u Вернуть сохраненную позицию Функции стирания ESC[2J Очистить экран; курсор в начало экрана ESC[K Очистить до конца строки Установка графического режима и цвета ESC[#;#;..;#m Установка графических атрибутов, где # 0 стандартный режим 1 интенсивный цвет 4 подчеркнутые символы 5 мигающие символы 7 инверсия цвета 8 не отображать символы 30 черные символы 31 красные символы 32 зеленые символы 33 желтые символы 34 синие символы 35 фиолетовые символы 36 серые символы 37 белые символы 40 черный фон 41 красный фон 42 зеленый фон 43 желтый фон 44 синий фон 45 фиолетовый фон 46 серый фон 47 белый фон ESC[=#;7h или Устанавливает разрешение экрана, где # ESC[=h или 0 монохромный текст 40 x 25 ESC[=0h или 1 цветной текст 40 x 25 ESC[?7h 2 монохромный текст 80 x 25 3 цветной текст 80 x 25 ESC[=#;7l или Устанавливает разрешение экрана, ESC[=l или допустимые значения # указаны выше ESC[=0l или ESC[?7l Режим RIP графики полностью обеспечивает Графический Интерфейс Пользо- вателя (GUI) и подразумевает наличие у пользователя соответствующей терминальной программы, также поддерживающей этот режим графики. В RIP режиме TNSDrive вырабатывает специальные управляющие последова- тельности, которые терминал пользователя преобразует в соответствующие графические примитивы, образы и команды. Затраты времени на передачу RIP графики несколько большие чем при ра- боте в двух предыдущих режимах, но благодаря алгоритмам оптимизации передаваемой информации RIP терминал приемлемо работает даже на ско- рости 9600 бит/сек. Существенным достоинством терминала RIP является то, что практически все операции на BBS пользователь может производить с помощью графичес- кого указателя - мыши. В подкаталоге .icons домашнего каталога BBS находятся графические об- разы и иконки, требующие предварительной загрузки в терминал пользова- теля при его первом входе в графическую систему. Подробную спецификацию на графический протокол RIP следует искать в документе: RIPscrip Graphics Protocol Specification "Remote Imaging Protocol" Copyright (c) 1992-1994 Telegrafix Communications, Inc Revision 2.00 April 1st, 1994 4.3. Настройка меню с использованием переменных и функций --------------------------------------------------------------------- Интерпретация элементов файловой системы по описанным выше правилам начинается с каталога, указанного в параметре MENUPATH основного файла конфигурации .system.conf. MENUPATH задает имя каталога с которого следует начинать интерпретацию структуры файловой системы как системы меню. Если параметр MENUPATH не определен, то стартовым каталогом меню считается каталог Main_menu в рабочей (домашней) директории системы. Всю структуру меню следует создавать от пользователя root или от дру- гого привилегированного пользователя UNIX с UID меньше 100. Ни одна из внутренних функций TNSDrive не требует наличия прав на за- пись в каком-либо каталоге или файле относящимся к системе меню. При создании элементов меню необходимо правильно соблюдать все призна- ки и маски прав файловой системы UNIX в отношении процесса BBS, напри- мер вся система меню должна быть доступна на чтение и сканирование, выполняемые файлы (программы) должны иметь соответствующий признак вы- полняемости и т.д. Как правило каталог главного меню (Main_menu) содержит подкаталоги разнообразных подменю сгруппированных по определенным сервисам. Такие подменю принято называть секциями. Встроенные сервисы, структурированные по соответствующим секциям: * Обмен файлами с системой (секция FILES); * Посылка/прием электронных писем в сети Internet и в локальных базах сообщений (секция MESSAGES); * Чтение/посылка статей в электронные конференции (секция USENET); * Прием файлов с FTP серверов по протоколу Zmodem непосредственно на компьютер пользователя (секция FTP); * Общение пользователей в реальном режиме времени (секция ONBOARD); * Настройка персональных параметров пользователя (секция PROFILE); * Чтение информационных файлов-бюллетеней (секция BULLETINS); Возможна организация и любых других секций и подсекции по усмотрению администратора. Администратор также может использовать всевозможные дополнительные внешние приложения и интегрировать их с системой меню в произвольной форме. В процессе интерпретации меню могут быть вызваны как выполняемые фай- лы, так и простые текстовые; последние могут вызываться рекурсивно. Текстовые (невыполняемые) файлы могут содержать в своем теле ключевые последовательности, обеспечивающие следующие возможности: * Вызов внутренней функции (команды); * Вызов внешней функции (программы); * Отображение текущего значения внутренней переменной; * Присвоение нового значения внутренней переменной; * Подстановку текущего значения внутренней переменной; TNSDrive имеет ряд внутренних команд, подразделяемых на группы по фун- кциональной принадлежности к определенным сервисам (секциям). Команды вызываются на выполнение включением соответствующего им ключевого сло- ва (названия команды) замкнутого с обоих сторон символом '%' (процент) в текст отображаемого пользователю файла. Название команды может быть обозначено в любым регистре кроме "все буквы заглавные". TNSDrive работает с несколькими пользовательскими и системными пере- менными. Значение любой из них может быть отображено пользователю при включении соответствующего ключевого слова (имени переменной) замкну- того с обоих сторон символом процента в текст отображаемого пользова- телю файла. Значения некоторых переменных пользователь может также са- мостоятельно модифицировать с помощью специально предусмотренных ко- манд. Имя переменной обозначается символами только верхнего регистра когда "все буквы заглавные". В процессе вывода экранного изображения производится поиск и интепре- тация ключевых последовательностей по содержимому показываемого пользователю файла. Ключевыми последовательностями считаются фрагменты текста (строки и слова), замкнутые с обеих сторон символами процента. Если в символы '%' заключена внутренняя переменная системы, будет по- казано ее значение; если внутренняя команда, она будет выполнена; если сразу после первого символа процента стоит знак '!', то считается, что здесь заключено имя исполняемого файла или имя другого показываемого файла, и этот файл вызовется на исполнение или на отображение соответ- ственно. Вместо символа '!' может быть использован символ '|' если требуется направить стандартный вывод программы во временный файл с дальнейшим его отображением, в этом случае возможно постраничное лис- тание результатов вывода программы. Если в имени файла отсутствует абсолютный путь (первый символ '/'), то файл ищется в каталоге текущего меню. Для адресации относительно до- машнего каталога системы используется символ '~' (тильда) в первой по- зиции в пути к файлу. Пример файла с разнообразными ключевыми последовательностями: --------------------------------------------------------------------- Время распечатано из внутренней переменной %SYSTEMTIME% Время выводится внешней програмой %!/bin/date% Время взято из внутренней переменной и распечатано внешней програмой %!/bin/echo -n $SYSTEMTIME% В этом месте вызовем файл .time.1 или .time.2 (в зависимости от языка пользователя) из каталога текущего меню, если его там нет, то вызовем его из домашнего каталога BBS... %!.time.$LANGNUMBER% Здесь пауза до нажатия клавиши %PressAnyKey% и прием файла %Upload% Изменим текущее положение в меню %MENUDIR=Main_menu/Message_section% Установим пользователю новый уровень доступа %PRIVLEVEL=50% --------------------------------------------------------------------- Если система не может обработать содержимое, находящееся между симво- лами '%' (невозможно найти файл, ошибка в написании внутренней коман- ды), оно просто игнорируется. Остальное содержимое показываемого файла проходит на экран без изменения. 4.4. Встроенные переменные --------------------------------------------------------------------- TNSDrive работает с несколькими пользовательскими и системными пере- менными. Значение каждой из них может быть отображено пользователю по определенному ключевому слову в тексте показываемого файла, значения некоторых переменных пользователь может также и модифицировать. Список доступных внутренних переменных: Name SetUp Value Description --------------------------------------------------------------------- ID str Идентификатор программы (TNSDrive) VER str Идентификатор версии (V1.4) OS str Идентификатор ОС (BSDOS_i386) SYSTEMNAME C str Имя этой системы MYHOSTNAME C str Имя машины этой системы SYSADMNAME C str Имя системного администратора SYSMAILTO C str E-mail администратора FINGER CE path Системный сетевой finger TALK CE path Системный сетевой talk PID num Идентификатор процесса BBS TTY str Терминальное устройство процесса BBS CONNECT E num Скорость порта(модема) этого устройства ORGDIR path Рабочий каталог BBS HOME path Домашний каталог текущего пользователя INTERRUPT EP num Интервал прерываний таймера в секундах TIMERATE EP num Вычитаемое в прерывании кол-во секунд SYSTEMTIME num Текущее системное время SESSIONTIME CP num Максимальное время одной сессии ONLINETIME num Сколько времени пользователь в on-line TIMELEFT CEP num Оставщееся время пользователя LASTCALLTIME P num Дата и время его предыдущего звонка MENUPATH CP str Текущий путь в системе меню MENUDIR E path Текущий каталог меню FILEAREAPATH P str Путь к выбранной файловой области FILEAREADIR E path Каталог выбранной файловой области UPLOADPATH CP str Путь к области для Upload UPLOADDIR E path Каталог области для Upload MSGAREAPATH P str Путь к выбранной области сообщений MSGAREADIR E path Файл с выбранной областью сообщений MSGNUMMSG num Колличество сообщений в области USENETGROUP str Название выбранной группы Usenet FTPSERVER str Адрес подсоединенного FTP сервера FTPPWD path Рабочий каталог FTP сервера READFILESDIR CE str Название каталога .readfiles SHORTKEYS str Короткие клавиши меню PRIVLEVEL CEP num Уровень доступа пользователя USERSTATUS str Статус пользователя USERSTATE str Что делает пользователь GROUP EP str Группа пользователя KICKER E str Права пользователя в online конференции CALLNUMBER P num Колличество вызовов пользователя USER str Регистрационное имя пользователя DOTTEDNAME str То же, но Имя Фамилия разделены точкой EMAIL str E-mail адрес пользователя LANGNUMBER num Порядковый номер системного языка CODEPAGE num Номер текущей таблицы перекодировки TERM PU str Тип терминала пользователя CALLSIGN EPU str Позывной пользователя (алиас, кличка) REALNAME PU str Действительное имя пользователя SIGNATURE PU str Однострочная сигнатура для писем USERLOCATION PU str Город/Страна откуда этот пользователь PASSWORD PU str Его закодированный пароль ORGANIZATION PU str Организация где он работает PHONE PU str Номер телефона PROTOCOL PU str Протокол передачи файлов по умолчанию LANGUAGE PU str Текущий системный язык SCRLINES PU num Кол-во линий на экране пользователя NEWSSORT PU str Критерий сортировки статей Usenet HOTKEY PU str Режим горячих клавиш (Yes/No) SHORTMENU PU str Режим сокращенного меню (Yes/No) MESG EPU str Режим "не беспокоить" (Yes/No) MSGREADLIMIT CP num Макс. кол-во сообщений для чтения MSGPOSTLIMIT CP num Макс. кол-во сообщений для посылки MSGREAD P num Сообщений прочитано MSGPOST P num Сообщений отослано ARTREADLIMIT CP num Макс. кол-во статей для чтения ARTSIZELIMIT CP num Макс. общий размер посланных статей ARTPOSTLIMIT CP num Макс. кол-во статей для посылки ARTREAD P num Статей прочитано ARTSIZE P num Общий размер отосланных статей ARTPOST P num Статей отослано DAILYDLSIZE P num Дневной размер Download пользователя DAILYULSIZE P num Дневной размер Upload USERDLSIZE P num Общий размер Download USERULSIZE P num Общий размер Upload DAILYDLLIMIT CEP num Дневной лимит Download SYSDLULRATIO CEP num Требуемое DL/UL отношение USERDLULRATIO P num Текущее DL/UL пользователя ULMULTIPLIER CEP num Множитель размера UL Признаки в поле SetUp таблицы означают: C Устанавливается из файлов конфигурации при запуске; E Может быть изменено в процессе работы с помощью внеш- них утилит (setuser, tnsmon) или прямым присвоением; P Инициализируется/сохраняется в профайле пользователя; U Модифицируется самим пользователем; Для того чтобы значение переменной было отображено пользователю, необ- ходимо ее ключевое слово (точно так как в таблице) замкнутое с обоих сторон символом '%' (процент) разместить в любом месте показываемого пользователю файла. Ключевые слова нужно указывать в регистре "все заглавные". Например файл .header может выглядеть следующим образом: ^[[H^[[J^[[7m%MENUPATH%^[[0m User Name: %USER% Real Name: %REALNAME% Password (encrypted): %PASSWORD% Organization: %ORGANIZATION% City/State: %USERLOCATION% Phone number: %PHONE% Signature: %SIGNATURE% Language: %LANGUAGE% Transfer Protocol: %PROTOCOL% Terminal type: %TERM% Screen lines: %SCRLINES% Например файл .footer может выгладеть следующим образом: ^[[1A^[[K[%TIMELEFT%]^[[5m:^[[0m %\ Здесь ^[ это код \032 (ESC) - начало ANSI-последовательности. Значения переменных имеющих в таблице признак `E' можно также изме- нять, например: %PRIVLEVEL=10% или %FILEAREADIR=/pub/incoming%. 4.5. Использование внешних программ --------------------------------------------------------------------- Если в меню присутствует выполняемый файл, то он может быть вызван на выполнение непосредственно по кнопке этого меню, причем вызов осущест- вляется без привлечения командного интерпретатора shell и если это shell-файл, то он должен иметь строку #!/bin/sh в первой позиции и иметь атрибут "выполняемый". Запуск производится в синхронном режиме с корректным возвратом установок tty и контролем используемого времени. Выполняемые файлы запускаются на выполнение с помощью последова- тельности системных вызовов vfork(); setuid(getuid()); execve(). За- вершение порожденного процесса ожидается с помощью системного вызова waitpid() с фиксацией возвращаемого значения. Во время такого ожидания продолжает работать счетчик реального времени, что позволяет системе контроллировать время пребывания пользователя во внешнем приложении, при исчерпании которого порожденный процесс безоговорочно снимается с помощью последовательности системных вызовов kill(SIGHUP); sleep(2); kill(SIGKILL). TNSDrive устанавливает следующие переменные окружения каждому запуска- емому процессу (если BBS установлена в каталог /usr/bbs): PATH=/usr/bbs:/usr/bbs/bin:/usr/bbs/usr/Firstname/Lastname USER=Firstname Lastname GROUP=default HOME=/usr/bbs/usr/Firstname/Lastname CALLSIGN=first или Firstname.Lastname DOTTEDNAME=Firstname.Lastname HOSTNAME=bbs.foo.bar EMAIL=$CALLSIGN@$HOSTNAME MAILPATH=/usr/bbs/usr/Firstname/Lastname/.mbox SHELL=/usr/bbs/bin/sh EDITOR=/usr/bbs/bin/pico TERM=vt100 TIMELEFT=текущий остаток времени пользователя в минутах PRIVLEVEL=уровень доступа пользователя LANGNUMBER=номер языка пользователя CODEPAGE=номер таблицы перекодировки пользователя DSZLOG=/tmp/dszlog.ttyXX ВНИМАНИЕ, выход из внешней программы в shell либо запуск из нее еще программ не может быть проконтролирован TNSDrive! Для запуска внешних программ рекомендуется использовать специальный загрузчик, производящий запуск внешней программы от пользователя nobo- dy, защищающий системные файлы в домашнем каталоге пользователя и при необходимости осуществляющий chroot на домашний каталог BBS. Такая программа-загрузчик определяется в параметре LOADER в основном файле конфигурации .system.conf, с его помощью запускаются все внешние приложения из системы меню, текстовый редактор, внешние talk и finger, вьюверы из файла конфигурации .viewers.conf. Полный исходный текст загрузчика приводится ниже. Загрузчик должен об- ладать эффективными правами пользователя root (иметь set-UID на root). В случае если запускаемая программа находится внутри каталога BBS, то в процессе выполнения она будет иметь каталог BBS в качестве корневого каталога файловой системы UNIX. #include #include #include #include #include #include #include #include #include #define NOBODY_USER "nobody" pid_t pid; char *homedir; void quit(sig) int sig; { /* * signal from my parent. * get back to saved-user-ID (root) to have permission for * relay signal to children proccess before exit. */ seteuid(0); kill(pid, sig); chmod(homedir, 0750); /* restore homedir permission */ exit(-1); } void sigchld() { /* continue child after stop (by ^Z) */ kill(pid, SIGCONT); } int main(argc, argv, envp) int argc; char *argv[], *envp[]; { char *p, *rootdir, buf[1024]; int i, pstat; struct sigaction act; struct passwd *pwd; uid_t new_uid; gid_t new_gid; /* * the effective-user-ID of root is strongly required for me */ if (geteuid()) { fprintf(stderr, "set-user-ID to root required\n"); exit(-1); } if ((pwd = getpwnam(NOBODY_USER)) == NULL) { fprintf(stderr, "%s: no such user\n", NOBODY_USER); exit(-1); } new_uid = pwd->pw_uid; new_gid = pwd->pw_gid; if (argc < 2) { fprintf(stderr, "usage: run file...\n"); exit(-1); } argv[0] = argv[1]; if ((p = strrchr(argv[1], '/')) != NULL) argv[1] = ++p; if ((pwd = getpwuid(getuid())) == NULL) exit(-1); /* nonsens */ if (!strcmp(pwd->pw_name, "bbs") || !strcmp(pwd->pw_name, "tns")) { if ((p = getenv("HOME")) == NULL) { fprintf(stderr, "HOME dir not found\n"); exit(-1); } homedir = strdup(p); rootdir = pwd->pw_dir; /* bbs user -- be chrooted */ } else { homedir = strdup(pwd->pw_dir); rootdir = NULL; } if (chdir(homedir) < 0) { perror("chdir"); exit(-1); } /* * user would write files into it, but need to protect * bbs files placed here */ if (chmod(homedir, 01757) < 0) { perror("chmod"); exit(-1); } /* the executed path must be absolute */ if (*argv[0] != '/') { sprintf(buf, "%s/%s", pwd->pw_dir, argv[0]); argv[0] = strdup(buf); } /* do chroot only if executed path does match bbs dir */ if (rootdir && strncmp(argv[0], rootdir, strlen(rootdir))) rootdir = NULL; act.sa_handler = quit; /* signal handler -- quit() */ sigfillset(&act.sa_mask); /* block all signal while quit() */ act.sa_flags = SA_RESTART; /* restart system call after signal */ sigaction(SIGHUP, &act, NULL); sigaction(SIGABRT, &act, NULL); sigaction(SIGSEGV, &act, NULL); sigaction(SIGPIPE, &act, NULL); sigaction(SIGALRM, &act, NULL); sigaction(SIGTERM, &act, NULL); sigaction(SIGUSR1, &act, NULL); sigaction(SIGUSR2, &act, NULL); act.sa_handler = sigchld; sigaction(SIGCHLD, &act, NULL); if ((pid = vfork()) < 0) { perror("fork"); chmod(homedir, 0750); exit(-1); } else if (!pid) { /* children */ if (rootdir) { /* the new proccess should be chrooted */ /* set the new root directory */ if (chroot(rootdir) < 0) { perror("chroot"); _exit(127); } /* review paths in environment for new root dir */ pstat = strlen(rootdir); for (i = 0; envp[i] != NULL; i++) { if ((p = strchr(envp[i], '=')) == NULL) continue; p++; /* point to argument */ if (!strncmp(envp[i], "PATH=", 5)) *p = '\0'; /* no search path */ else if (!strncmp(p, rootdir, pstat)) memmove(p, &p[pstat], (strlen(p) - pstat) + 1); } /* add new environment variable */ envp[i++] = strdup("TERMCAP=/etc/termcap"); envp[i] = NULL; /* review paths in argv array for new root dir */ for (i = 0; argv[i] != NULL; i++) { if (!strncmp(argv[i], rootdir, pstat)) argv[i] += pstat; } } /* execute proccess with new permission */ if (setgroups(1, &new_gid) < 0) perror("setgroups"); else if (setgid(new_gid) < 0) perror("setgid"); else if (setuid(new_uid) < 0) perror("setuid"); else if (execve(argv[0], &argv[1], envp) < 0) perror("execve"); _exit(127); } /* get back to real-user-ID to be able receive parent's signals */ seteuid(getuid()); signal(SIGINT, SIG_IGN); /* ignore ^C and ^\ while child armed */ signal(SIGQUIT, SIG_IGN); signal(SIGTSTP, SIG_IGN); pstat = 0; /* wait for child exit or my parent kill me */ if (waitpid(pid, &pstat, 0) < 0) pstat = -1; chmod(homedir, 0750); /* restore homedir permission */ exit(pstat); } Смотри также: 3.1. Настройка главного файла конфигурации. 4.6. Настройка секции FILES (.filearea.conf) --------------------------------------------------------------------- TNSDrive имеет внутренний простой но удобный менеджер файлов. С его помощью пользователи могут в BBS-традиционной обстановке поработать с архивом файлов. Разделы файлового архива описываются в файле .filearea.conf, он распо- лагается в том же каталоге что и все использующие его внутренние фун- кции и программы для работы с файлами. Таким образом, возможно созда- ние неограниченного количества файловых секций, каждая из которых име- ет свой собственный файл конфигурации подсекций. Это удобно при очень большом файловом архиве, где для каждого крупного раздела (unix, msdos, os/2 и тп.) может быть создана своя собственная система меню, либо, например, если Вы имеете какую-то часть вашего архива на NFS, CDROM и/или непостоянно, либо еще по целому ряду соображений. Так как система содержит два разных варианта команд выбора интересую- щего пользователя раздела, то и файл конфигурации обрабатывается двумя разными методами, т.е. имеет два разных формата, причем они прекрасно сосуществуют не мешая друг другу. Максимальное количество описываемых в одном конфигурационном файле секций (подсекций) не может превышать 2048. Пример файла .filearea.conf: # Функция %FAreaTree% имеет формат: # КорневойКаталог[:ФайлОписания] [УровеньДоступа] # Каталог [УровеньДоступа] /pub/files:.header #/pub/files:/usr/bbs/Main_menu/Files_section/.filearea.conf /pub/files/games/* 20 pictures 50 # Функция %FAreaChange% имеет формат: # Каталог[.УровеньДоступа][,UploadКаталог[.УровеньДоступа]] Описание HOME,HOME Ваш персональный домашний каталог /pub/files/newup Непроверенный Upload /pub/files/msdos/game.10 Игрушки Первый формат описывает файловые разделы для команды перемещения по дереву каталогов FAreaTree, второй для команды планарного выбора раз- дела FAreaChange. В одном файле конфигурации могут присутствовать оба формата одновременно. Формат файла .filearea.conf используемый функцией FAreaTree: Первой строкой задается верхний каталог файлового архива, ниже которого возможно перемещение по подкаталогам-разделам файлов- го архива. Через двоеточие можно указать название файла из которого сле- дует брать описания разделов, если его название начинается с полного пути, то считается что он содержит полное описание всех разделов, если же путь не указан, то файл будет искаться в самом каталоге и первая непустая строка текста в нем и будет описанием. Тут же можно указать и минимальный уровень необходимый пользо- вателю для доступа к корневому каталогу файлового архива. Все последующие строки после верхнего каталога являются маска- ми в regex-выражениях на выборочные подкаталоги дерева с ука- занием минимальных уровней доступа. Формат файла .filearea.conf используемый функцией FAreaChange: Слева указывается абсолютный или относительный от текущего ме- ню путь к файловой области из которой доступен Download, либо ключевое слово HOME (в качестве файловой области будет ис- пользован персональный каталог пользователя), справа коммента- рий, последний как раз и будет показан пользователю при выборе нужной файловой области. В пути Donwload каталога может быть указан минимальный уровень доступа, это число после последней точки. Если уровень доступа к ресурсу выше чем текущий уровень доступа пользователя, то каталог не будет виден пользователю. В случае, если используется Upload каталог файлового раздела отличный от умолчательного UPLOADPATH (смотри .system.conf), то он может быть указан здесь же через запятую после Download каталога. В пути Upload каталога может быть указан минимальный уровень доступа, это число после последней точки. Если уровень доступа к ресурсу выше чем текущий уровень доступа пользователя, то Upload в такой каталог не будет доступен пользователю, загру- женные им файлы останутся в UPLOADPATH (смотри .system.conf). Следует учитывать что оба формата независимы друг от друга. Например, один и тот же раздел файлов может иметь описание в обоих форматах, в одном пользователь не имеет доступа к этому каталогу (указан больший уровень), а в другом имеет. Внутри каждого файлового раздела-каталога может присутствовать файл с описанием содержимого этого каталога (индексный файл). Формат, назва- ние и принцип действия этого файла смотри в П.3.8 - Настройка индек- сных файлов файлового архива .filelist.conf. Внутренние команды, предназначенные для использования в секции FILES: FAreaTree Сменить файловый раздел по дереву каталогов; FAreaChange Сменить файловый раздел по планарному списоку; FileList Получить список файлов текущего раздела с описаниями; DownLoad Принять указанные файлы из текущего раздела; DlNewFiles Принять указанные файлы по дате из текущего раздела; UpLoad Передать файлы на BBS; NewFiles Искать новые файлы по дате в текущем разделе; BNewFiles То же, но сразу по всем разделам (режим Browse); RawList Получить список файлов раздела в формате UNIX; SearchStr Искать файлы по подстрокам в текущем разделе; BSearchStr То же, но сразу по всем разделам (режим Browse); KillFiles Удалить указанные файлы в текущем разделе; Смотри также: 3.1. Настройка главного файла конфигурации. 3.5. Настройка групповых прав. 3.6. Настройка протоколов передачи файлов. 3.7. Настройка просмотрщиков архивов. 3.8. Настройка индексных файлов файлового архива. 4.7. Настройка секции MESSAGES (.msgarea.conf) --------------------------------------------------------------------- TNSDrive имеет целый ряд встроенных функции для работы с электронной почтой. Помимо штатного почтового ящика пользователя в котором хранит- ся его личная переписка, в системе предусмотрена возможность работы с множеством разнообразных тематический разделов с локальными сообщения- ми (почтовыми фолдерами) доступные всем пользователям на чтение и за- пись. При работе с почтовыми фолдерами пользователи имеют практически все необходимые средства для чтения сообщений, поиска по ключевым сло- вам (в том числе и русским), посылки сообщений, перенаправления сооб- щений, архивирования сообщений и тд. Почтовые фолдеры могут быть двух типов: * Почтовые ящики, где хранится личная переписка пользователя и куда поступают пришедшие по электронной почте письма. Здесь отслеживает- ся статус письма (поле Status заголовка): новое, нечитанное, уда- ленное и тд; и проверяются групповые права по идентификатору серви- са Email. Пользователь может иметь более одного фолдера, работающе- го в режиме почтового ящика; * Публичные базы сообщений, где пользователь может считывать и запи- сывать (но не удалять) любое сообщение. Здесь отслеживается только дата последнего прочитанного сообщения, статусы сообщений не обра- батываются. Файл, содержащий такой фолдер не может быть модифициро- ван пользователем. Новое сообщение добавляется к концу файла. Пользователь может послать безадресное письмо всем (To: All); Как и почтовый ящик почтовые фолдеры хранятся в общепринятом в UNIX формате хранения почты, где каждому разделу соответствует отдельный текстовый файл в котором последовательно друг за другом располагаются сообщения состоящие из заголовка, оформленного в соответствии с RFC822, и тела сообщения. Почтовые фолдеры описываются в файле .msgarea.conf, он располагается в том же каталоге что и все использующие его внутренние функции и прог- раммы для работы с почтой. Таким образом, возможно создание неограни- ченного количества разделов с сообщениями, каждый из которых имеет свой собственный файл конфигурации подразделов. Это удобно при очень большом массиве сообщений, где для каждого крупного тематического раз- дела может быть создана своя собственная система меню. Интересующий пользователя раздел с сообщениями может быть выбран с по- мощью команды MAreaChange. Изначально выбран почтовый ящик пользовате- ля, если у него на это имеются соответствующие права. Максимальное количество описываемых в одном конфигурационном файле фолдеров не может превышать 2048. Пример файла .msgarea.conf: # Фолдер[.УровеньДоступа] Описание HOME Ваш входной почтовый ящик mbox:~/.save.20 Самые ценные письма храните здесь folders/Jobs Ищу/даю работу /usr/bbs/msg/Games Обсуждение игрушек Слева указывается путь к почтовому фолдеру с необязательным мини- мальным уровнем доступа (число за последней точкой в пути), справа описание фолдера, оно будет показано пользователю при выборе. По ключевому слову `HOME' подставляется путь к почтовому ящику пользо- вателя, как правило это файл .mbox в его домашнем каталоге. С помощью ключевого слова `mbox:' возможно изменить месторасположение почтового ящика пользователя. В случае если в пути к фолдеру не указан абсолютный путь, то фолдер адресуется относительно текущего меню. Для адресации относительно до- машнего каталога пользователя применяется символ тильда. Заранее никаких файлов-фолдеров создавать не нужно, система сама соз- даст их при первой необходимости на основе файлов конфигурации. Следует иметь ввиду что путь к каталогам и файлам содержащим базы со- общений должен быть доступен на запись BBS (процессу drive). Если пользователь отправляет сообщение находясь в разделе почтового ящика, то считается что письмо предназначено для отправки по E-mail, даже если письмо отправляется абоненту, находящемуся в той же системе. Такое письмо в поле адресата обязательно должно содержать символ '@' иначе система будет искать адресат в списке коротких имен или алиасов. При попытке оправить письмо находясь в публичных разделах, система проверяет существование указанного абонента и запрещает посылку несу- ществующим адресатам (кроме All). Если абонент находится в той же системе, достаточно ввести полное имя или алиас, полный адрес будет подставлен автоматически. Результирующая строка адресата приводится к нижнему регистру с фильт- рацией на запрещенные символы. Пропускаются только латинские буквы, цифры и символы из набора ".!@#%-_:/=", строка завершается при обнару- жении любого символа с кодом меньше либо равно пробел или символов ',' и ';'. Отправка E-mail осуществляется с помощью вызова внешней программы из bin/send_mail с двумя аргументами, где первый аргумент это список ад- ресатов разделенных запятой; второй - это полный путь к файлу где со- держится оформленное для отправки сообщение. Пример файла send_mail для отправки с помощью системного sendmail: #!/bin/sh # Arguments: # $1 - address for mailing # $2 - filename of the outgoing letter, probably $HOME/.letter size=`/bin/cat $2 | /usr/bin/wc -c` date=`/bin/date +"%d/%m/%y %H:%M:%S"` echo "$date $EMAIL to $1 size $size" >> /var/tmp/send_mail.log /usr/sbin/sendmail $1 < $2 Администратор системы может определить диапазон запрещенных E-mail ад- ресов с помощью .badaddr.conf или групповых прав из .group.conf по идентификатору сервиса Email. Список команд, предназначенных для использования в секции MESSAGES: MAreaChange Сменить раздел сообщений по планарному списку; ReadMsg Читать сообщения; ListMsg Получить список сообщений текущего раздела; ListNewMsg Получить список новых сообщений раздела; SaveMsg Сохранить/переместить сообщения раздела в файл; KillMsg Удалить сообщения в текущем разделе; EnterMsg Ввести новое сообщение в текущий раздел; SearchMsg Искать сообщение по подстроке в текущем разделе; YourMsg Искать сообщения для пользователя в разделе; Смотри также: 3.1. Настройка главного файла конфигурации. 3.5. Настройка групповых прав. 3.10. Настройка запрещенных почтовых адресов. 3.11. Настройка почтовых псевдонимов. Приложение А: bbsmail. 4.8. Настройка секции USENET (.usenetpath/.usenetarea.conf) --------------------------------------------------------------------- TNSDrive имеет внутренние средства для работы с телеконференциями USE- NET. При работе с USENET пользователи имеют практически все необходи- мые средства для чтения статей, поиска по ключевым словам (в том числе и русским), размещения статей, перенаправления статей на e-mail адрес, ответа на статью в том числе и по e-mail, уничтожения статей и пр. Встроенный ньюс-ридер производит обьединение статей в тематические подборки (thread), что позволяет пользователю работать с телеконферен- циями в удобном и экономичном по времени режиме. Поддерживается оба режима работы с серверами USENET: * Через локальный spool/active, расположенный на той же машине где функционирует система TNSDrive; * По протоколу NNTP (сетевой протокол передачи телеконференций, ис- пользуемый в Internet); Точно так же как в секции сообщений, возможна организация неограничен- ного число тематических меню, например отдельное меню для работы с группами, относящимися к тематическому разделу relcom.commerce.*, или разделить меню по признаку используемого сервера USENET по NNTP или через spool, возможна также одновременная работа с несколькими серве- рами USENET. Существует два файла конфигурации которые необходимо иметь в соответс- твующем данному меню каталоге, это файл .usenetpath.conf в котором описывается способ работы с сервером USENET и .usenetarea.conf в кото- ром задаются доступные пользователям разделы (группы) USENET. Пример файла .usenetpath.conf: # При работе через локальный spool/active: /news/spool /news/lib/active /news/lib/newsgroups # При работе по NNTP указывается адрес NNTP-сервера: #news.foo.bar В конфигурации указывается либо каталог содержащий локальный spool и файлы active и newsgroups (последний необязателен), либо адрес сервера USENET для доступа по NNTP. В одном таком файле может быть указана только одна активная строка. Формат файла .usenetarea.conf: # Маска УровеньДоступа(Чтение/Запись) ^nsk\.* /10 ^relcom\.* commerce 20/30 ^alt\.* 50 В левой позиции указываются маски на USENET группы. Маскирование вы- полняется с помощью regex-выражений, регистр букв не учитывается. В правой позиции можно указывать уровни доступа к USENET группам на чтение и запись в формате: [READ][/WRITE]. Если в поле READ не указано ничего, то считается что читать могут все. Если в поле WRITE не указа- но ничего, то считается что писать не может никто. Пользователь имеет два способа выбора нужной группы: с помощью команды UAreaChange или UAreaTree. В первом случае выдается полный планарный список всех доступных групп, во втором поиск нужной группы начинается со списка корневых групп и продолжается к подгруппам до момента, пока в выбранной подгруппе не окажется других подгрупп. Пользователь может сам выбрать критерий сортировки статей по сочетанию из восьми возможных параметров с помощью команды NewsSort. Возможные критерии составной сортировки: a Убывание по номерам статей; A Возрастание по номерам статей; d Убывание по дате статьи; D Возрастание по дате статьи; f Убывание по строке в поле From; F Возрастание по строке в поле From; s Убывание по строке в поле Subject; S Возрастание по строке в поле Subject; Посылка статьи осуществляется с помощью вызова внешней программы из bin/send_news с одним аргументом, содержащим полный путь к файлу где содержится оформленная для отправки статья. Пример файла send_news для отправки с помощью программы inews: #!/bin/sh # Arguments: # $1 - filename of the outgoing article, probably $HOME/.article /usr/local/bin/inews -h $1 Список команд, предназначенных для использования в секции USENET: UAreaTree Сменить группу Usenet по дереву каталогов; UAreaChange Сменить группу Usenet по планарному списку; ListArticles Получить список статей текущей группы; UsenetReader Читать статьи текущей группы; PostArticle Послать новую статью в группу; AuthorSearch Искать статьи по автору; SubjectSearch Искать статьи по тематике; Смотри также: 3.1. Настройка главного файла конфигурации. 3.5. Настройка групповых прав. 3.10. Настройка запрещенных почтовых адресов. 4.9. Настройка секции FTP (.ftplist.conf) --------------------------------------------------------------------- TNSDrive имеет встроенный FTP-клиент (сетевой протокол передачи фай- лов, используемый в Internet) с передачей конечному пользователю по протоколу Zmodem. Благодаря этому пользователь имеет возможность при- нимать файлы с помощью Zmodem с удаленных FTP серверов без промежуточ- ного сохранения в домашнем каталоге, что дает существенный выигрыш по времени и упрощает использование. Пользователь принимает файл по Zmo- dem непосредственно с удаленного FTP сервера. Поддерживается режим восстановления прерванных передач, режим полностью интегрирован в про- токол FTP в соответствии со стандартом Zmodem и скрыт от конечного пользователя. Во встроенном FTP-клиенте есть два варианта выбора удаленного FTP сер- вера: * С помощью произвольно заданного адреса в команде FTPopen. В этом случае пользователь имеет возможность войти в FTP сервер под произ- вольным идентификатором; * Из списка адресов доступных FTP серверов в команде FTPselect. В этом случае пользователь входит в сервер под заданным идентификато- ром, определенным администратором; Команда выбора FTP сервера из списка (FTPselect) использует файл кон- фигурации .ftplist.conf, расположенный в том же меню-каталоге что и все ориентированные на FTP-клиент команды. Формат файла .ftplist.conf: # FTPсервер [УровеньДоступа] Описание ftp.nsk.su CAD lab BBS throught FTP ftp.relcom.ru 20 Relcom Co, Moscow ftp.ru 50 Demos+, Moscow В левой позиции задается адрес FTP сервера. Это поле имеет следующий формат: [user[:pswd]@]host[:port] user Необязательный входной идентификатор пользователя. По умолчанию ftp или anonymous; pswd Необязательный входной пароль. По умолчанию почтовый адрес текущего пользователя; host Обязательный адрес FTP сервера; port Необязательный номер алтернативного порта для FTP ко- манд. По умолчанию 21; В средней позиции может быть задан цифрой минимальный уровень доступа необходимый пользователю для того чтобы "увидеть" данный FTP сервер. Крайняя правая позиция содержит описание данного FTP сервера так как оно будет показано пользователю при выборе. Для ограничения диапазона адресов FTP серверов доступных пользователю, используются групповые права из .group.conf по идентификатору сервиса FTP. Здесь же возможно задание и прав доступа на определенные каталоги и файлы удаленного FTP сервера. Внутренние команды, предназначенные для использования в секции FTP: FTPopen Открыть соединение с произвольным FTP сервером; FTPselect Выбрать соединение из списка FTP серверов; FTPlist Обработать и показать содержимое текущего каталога; FTPraw Получить список файлов каталога в формате UNIX; FTPstat Получить состояние текущего соединения; FTPpwd Получить имя текущего каталога; FTPcdup Вернуться в родительский каталог; FTPcwd Сменить текущий каталог; FTPget Принять указанные файлы из текущего раздела; FTPnew Принять указанные файлы по дате из текущего раздела; Смотри также: 3.5. Настройка групповых прав. 4.10. Настройка секции ONBOARD --------------------------------------------------------------------- Секция ONBOARD не требует какой-либо специальной настройки. Соответс- твующие команды размещаются в системе меню данной секции по усмотрению администратора. Список команд, рекомендуемых для использования в секции ONBOARD: WhoIsThere Список присутствующих в системе пользователей; UserList Список/поиск пользователей системы; WhoIsWho Вся доступная информация о любом пользователе; WhoDo Кто что делает в системе в текущий момент; WhoInConf Список присутствующих в on-line конференции; GoInConf Войти в on-line конференцию; GoInTalk Вызвать пользователя для личной беседы; GoUnixChat Вызвать пользователя UNIX для личной беседы; CallSignList Список/поиск имеющихся алиасов пользователей; MakeCallSign Создать/изменить собственный алиас пользователя; Finger Искать информацию о пользователе на хосте в сети; Talk Вызвать пользователя на хосте в сети для беседы; Все эти команды не требуют каких-либо специальных файлов конфигурации. Команда MakeCallSign создает/дописывает файл .callsign.conf в домашнем каталоге системы, этим файлом пользуется и команда CallSignList. Смотри также: 3.1. Настройка главного файла конфигурации. 4.11. Настройка секции PROFILE --------------------------------------------------------------------- Секция PROFILE не требует какой-либо специальной настройки. Соответс- твующие команды размещаются в системе меню данной секции по усмотрению администратора. Список команд, рекомендуемых для использования в секции PROFILE: Language Выбрать системный язык/кодировку; Protocol Выбрать файловый протокол по умолчанию; Realname Установить реальное имя пользователя; UserLocation Установить город/страну пользователя; Organization Установить организацию/фирму пользователя; Phone Установить номера телефона пользователя; Signature Установить сигнатуру для писем пользователя; NewsSort Выбрать критерий сортировки для статей Usenet; ChPassword Установить новый пароль пользователя; ScrLines Установить количество строк на экране; HotKey Выбрать режим горячих клавиш меню; ShortMenu Выбрать режим с отсутствием меню; Mesg Выбрать режим "не беспокоить"; Все эти команды производят модификацию значений соответствующих пере- менных в профайле пользователя .user.conf или .cuser.conf его домашне- го каталога. 4.12. Настройка секции BULLETINS --------------------------------------------------------------------- TNSDrive имеет простой и гибкий механизм отображения информационных файлов-бюллетеней. Основная его особенность состоит в том, что любые действия над содержащейся в них информацией не требует какого-либо вмешательства в конфигурацию самой системы. Системный администратор либо программа-автомат просто помещает файл в определенный каталог, содержимое этого каталога интерпретируется и отображается пользователю по следующим правилам: * Каждый файл в имени которого нет лидирующей точки является отобра- жаемым элементом меню в команде чтения файлов-бюллетеней; * При выводе файлы сортируются по дате последней модификации, причем первым в меню будет самый "свежий" бюллетень; * Меню заголовок к данному файлу является первой значащей строкой из содержимого самого файла, пустые строки, строки начинающиеся с '#' и любые лидирующие пробельные символы в строке при поиске заголовка пропускаются; Возможна организация неограниченного числа тематических информационных разделов, каждый из которых образуется применением в определенном мес- те меню внутренней команды ReadFiles и наличием каталога .readfiles содержащего файлы с сообщениями и расположенного в директории этого же меню. Файл-бюллетень может содержать в тексте ANSI-последовательности и клю- чевые слова внутренних переменных и функций, предназначенных как для показа, так и для выполнения. Возможно определение альтернативного имени каталога .readfiles в пара- метре READFILESDIR в главном файле конфигурации .system.conf или прос- тым присвоением внутренней переменной READFILESDIR нового значения. Смотри также: 3.1. Настройка главного файла конфигурации. 4.13. Другие возможности --------------------------------------------------------------------- В TNSDrive имеются некоторые независимые команды, не отнесенные ни к одной из приведенных выше секций. Их использование возможно в любой точке меню в произвольном сочетании с другими командами. Другие команды и переключатели: Quit Немедленно завершить процесс drive; GoodBye Разьединение, выход из системы; MailToSysop Написать письмо администратору системы; MailCheck Проверить почтовый ящик на новую почту; PressAnyKey Пауза до нажатия любой клавишы; RIPsave Сохранить текущее состояние RIP графики; RIPrestore Восстановить состояние RIP графики; ExternalMenu Не изображать текущее меню встроенными средствами; ExternalTalk Использовать внешнюю программу в командах общения; MoreOff Выключить контроль за количеством выведенных строк; MoreOn Включить контроль за количеством выведенных строк; Переключатели ExternalMenu, ExternalTalk и MoreOff как правило ис- пользуются в .header файлах до вывода меню и действуют в пределах до возврата в него, т.е. перед очередным перечитыванием меню переключате- ли устанавливаются в значения по умолчанию. Для предотвращения возврата каретки в конце изображаемой строки следу- ет использовать ключ %\ (процент и обратный слэш). Если в символы процента заключена цифра либо строка цифр, то это зна- чение будет использовано в секундах для паузы. Текст изображаемого пользователю файла может включать в себя также и другие файлы предназначенные для отображения или содержать имена прог- рамм для непосредственного запуска. Таким образом, возможна многократная вложенность отображаемых файлов вместе с выполнением внешних программ. Для этого следует указать сим- вол '!' в первой позиции имени файла замкнутого с обоих сторон симво- лами '%'. Если в имени файла отсутствует абсолютный путь (первый сим- вол '/'), то файл ищется в директории текущего меню, чтобы сослаться на путь относительно домашнего (рабочего) каталога самой BBS, ис- пользуется символ '~' в первой его позиции. Выполняемые файлы запускаются как и все внешние программы, невыполняе- мые отображаются с интерпретацией содержимого. Для выполняемых файлов возможно применение аргументов, например %!/bin/ls -la%. Shell-файлы должны содержать #!/bin/sh в своей первой строке. Еще пример - если в файле .header было указано %ExternalMenu% и он за- канчивался %!.mainmenu%, то вместо встроенной системы изображения меню будет изображено содержимое файла .mainmenu из каталога текущего меню (однако ожидаться для ввода будут клавиши именно реального меню). Предусмотрена возможность использования в ключевых выражениях также и самих значений встроенных переменных. Значение переменной внутри клю- чевого слова или выражения вызывается названием этой переменной с предварительным символом '$'. Например, в результате использования выражения %!/bin/ls -l $MENUDIR% будет отображено содержимое текущего меню каталога. Значения внутрен- них переменных могут быть использованы и для формирования самой коман- ды вызова, например %!.mainmenu.$LANGNUMBER.$TERM% может дать ре- зультат отображения файла с именем .mainmenu.1.ansi. 5. База пользователей ===================================================================== 5.1. Локальный режим и режим BBS --------------------------------------------------------------------- TNSDrive поддерживает два взаимоисключающих режима работы с базой пользователей: * Локальный режим или режим простейшего командного интерпретатора с системой меню. Собственная база пользователей отсутствует. Пользо- ватель является штатным пользователем UNIX из /etc/passwd; * Режим BBS. В этом режиме TNSDrive работает с собственной базой пользователей представляющей из себя структуру каталогов, названия которых соответствуют входным именам пользователей; Определение текущего режима работы происходит в момент старта модуля drive, если он запущен от пользователя bbs или tns, то выбирается ре- жим BBS, если от любого другого пользователя, то локальный режим. В пределах одной системы UNIX (на одном компьютере) невозможно однов- ременное использование локального режима и режима BBS. В обоих режимах пользователь имеет свой собственный домашний каталог и находящийся в нем профайл с текущими установками пользователя и неко- торые другие служебные файлы и подкаталоги, которые создаются по мере необходимости в процессе работы системы. Во время работы TNSDrive за- щищает профайл пользователя от несанкционированного воздействия. Реко- мендуется запуск модуля drive непосредственно программой login (drive прописывается как shell пользователя в /etc/passwd). В локальном режиме каждый пользователь имеет свой собственный UID, оп- ределенный администратором ОС UNIX. Не рекомендуется назначать пользо- вателям локального режима значения UID меньше либо равно 100, только больше 100. В этом режиме не работают встроенные функции взаимодейс- твия пользователей между собой (секция ONBOARD). В локальном режиме домашний каталог пользователя и домашний каталог системы это один и тотже каталог. Основные файлы конфигурации и систе- му меню следует размещать в каталоге /etc/tns. Для локального режима не предусмотрена возможность самопроизвольной регистрации новых пользователей системы. В режиме BBS все пользователи имеют один и тот же UID соответствующий пользователю UNIX с именем bbs или tns. Не рекомендуется назначать значение этого UID меньше либо равно 100, только больше 100. Входной пароль пользователя хранится в значении параметра PASSWORD (в крипто- ваном виде) в профайле пользователя. Для режима BBS предусмотрена возможность самопроизвольной регистрации новых пользователей в системе. 5.2. Профайл пользователя (.user.conf) --------------------------------------------------------------------- У любого пользователя системы в домашнем каталоге может находиться файл персональных настроек (профайл) с именем .user.conf. При старте модуль drive считывает профайл в память и вся дальнейшая работа с фай- лом происходит по его копии в памяти, при изменении текущего значения любого параметра образ файла из памяти записывается на диск. Пользователь с рабочим профайлом .user.conf имеет статус Regular и по- суточный контроль времени пребывания в системе, когда с наступлением новых суток лимит времени выделяется вновь. Параметр TIMELEFT находя- щийся в файле .user.conf содержит остаток допустимого времени за пос- ледние сутки вхождения пользователя в систему. Формат файла .user.conf: # Комментарий ПАРАМЕТР=значение ... Значения у параметров задаются вплотную после символа '=' (равно) без всяких кавычек и апострофов. Следующие параметры сохраняются в профайле пользователя и могут пред- ставлять интерес для администратора: PASSWORD Закриптованный с помощью DES входной пароль пользователя. Если значение у параметра отсутствует, то пользователь считается заблокированным; TERM Тип графики пользователя: dump, ansi или rip; LASTLOGIN Время последнего входа пользователя в систему. В секундах с 1 января 1970 года; LASTCALLTIME Время последнего выхода пользователя из системы. В секундах с 1 января 1970 года; CALLNUMBER Порядковый номер звонка пользователя; TIMELEFT Суточный остаток времени пользователя в минутах; PRIVLEVEL Уровень доступа пользователя. Минимум 0, максимум 99; GROUP Имена групп, к которым относится пользователь. Разделяются пробелами и/или запятыми; MENUPATH Путь к каталогу меню в котором находился пользователь перед тем как вышел из системы. При следующем вхождении он будет возвращен в эту точку меню, если это возможно; LANGUAGE Идентификатор (название) последнего выбранного пользователем языка и таблицы перекодировки; WARNING Содержит однострочное сообщение которое получит пользователь единожды при очередном входе в систему сразу после ввода паро- ля. Если строка начинается с символа '#' (решетка), то счита- ется что указан номер сообщения из системного файла сообщений, которое и будет отображено; Следующие параметры могут быть записаны в профайл пользователя только самим администратором и являются индивидуальными лимитами данного пользователя (преобладают над всеми другими аналогичными параметрами): DAILYTIMELEFT Максимально доступное время в минутах предоставляемое пользо- вателю в системе в одни сутки. Если указан ноль, то счетчик времени пребывания в системе не уменьшается (пользователь по- лучает статус Infinity); SESSIONTIME Максимальное время продолжительности одного сеанса (сессии) в минутах. Если указано меньше трех минут, то игнорируется; INFINITY Пользователь может находиться в on-line конференции на BBS не- ограниченное количество времени. Параметр должен иметь значе- ние Yes, On или 1 для включения данного режима; TERMINATOR Пользователь обладает правами терминатора в on-line конферен- ции на BBS и может находиться там неограниченное количество времени. Параметр должен иметь значение Yes, On или 1 для включения данного режима; DAILYDLLIMIT Лимит суточного размера Download пользователя в килобайтах. Если указан ноль, то суточный размер Donwload не ограничен; SYSDLULRATIO Требуемое соотношение размера Download к Upload пользователя. Если указан ноль, то соотношение не контроллируется; ULMULTIPLIER Множитель, на который будет умножен размер Upload пользователя для компенсации значения параметра DL size в переделах текуще- го соединения. Если ноль, то компенсация не производится; MSGREADLIMIT Максимально допустимое количество E-mail сообщений разрешенных для чтения. Если указан ноль, то количество не лимитировано; MSGPOSTLIMIT Максимально допустимое количество E-mail сообщений разрешенных ARTREADLIMIT Максимально допустимое количество статей Usenet разрешенных для чтения. Если указан ноль, то количество не лимитировано; ARTSIZELIMIT Максимально допустимый общий размер статей Usenet разрешенный на отправку. Если указан ноль, то количество не лимитировано; ARTPOSTLIMIT Максимально допустимое количество статей Usenet разрешенных на отправку. Если указан ноль, то количество не лимитировано; DEFINE-FROM E-mail адрес пользователя, отличный от предопределенного в системе. Значение этого параметра проставляется в поле From: исходящих писем и статей пользователя; INTERRUPT Задает интервал прерываний по таймеру в секундах (по умолчанию 10 сек). Не рекомендуется применение значений меньше 5 и больше 20; TIMERATE В каждом прерывании из общего значения счетчика остатка време- ни вычитается указанное здесь значение (по умолчанию 10 сек). Не рекомендуется применение значений меньше 5 и больше 20; 5.3. Альтернативный профайл (.cuser.conf) --------------------------------------------------------------------- У любого пользователя системы в домашнем каталоге может находиться альтернативный файл персональных настроек с именем .cuser.conf. При старте модуль drive считывает профайл в память и вся дальнейшая работа с файлом происходит по его копии в памяти, при изменении текущего зна- чения любого параметра образ файла из памяти записывается на диск. Пользователь с текущим рабочим профайлом .cuser.conf имеет статус Charge и не имеет посуточного контроля времени пребывания в системе. Параметр TIMELEFT находящийся в файле .cuser.conf содержит общий оста- ток выделенного пользователю времени. Формат файла .cuser.conf полностью идентичен формату файла .user.conf. Пользователь может иметь оба профайла одновременно, в этом случае сис- тема после ввода пользователем входного имени будет дополнительно зап- рашивать статус с которым пользователь предполагает войти в систему. Профайлы .user.conf и .cuser.conf абсолютно никак не связаны между со- бой и могут содержать даже разные входные пароли. Их обьединяет только общий каталог расположения и соответственно входное имя пользователя в обоих случаях одинаково. 5.4. Групповой банк времени (.guser.conf) --------------------------------------------------------------------- Нет информации. Находится в состоянии разработки и тестирования. 5.5. Альтернативная процедура входа (.startup) --------------------------------------------------------------------- Если в каталоге пользователя обнаружен файл .startup, то он будет от- работан прежде всевозможных welcome файлов и собственно самого меню. Если данный файл имеет признак выполняемости, то он будет выполнен как и все внешние программы, в противном случае это обычный отображаемый файл c интерпретацией содержимого. Файл .startup должен иметь владельца с UID меньше 100, иначе он не бу- дет выполнен или проинтерпретирован на ключевые последовательности. Файл .startup может находиться и в домашнем каталоге BBS, в этом слу- чае он является общим для всех пользователей, не имеющих собственных стартовых файлов. Эта начальная процедура может быть очень удобна, например для отобра- жения какой-либо информации и вринудительного выхода из системы с по- мощью внутренней команды Quit или для запуска внешних приложений таких как PPP или SLIP с контролем используемого времени. 5.6. Дополнительная процедура выхода (logout) --------------------------------------------------------------------- В системе может быть использована дополнительная внешняя процедура, вызываемая непосредственно перед завершением процесса drive. Процедура является внешней выполняемой программой, определенной в па- раметре LOGOUT главного файла конфигурации .system.conf, по умолчанию и при наличии вызывается bin/logout от домашнего каталога системы. Файл logout должен иметь владельца с UID меньше 100, иначе он будет проигнорирован. Запуск logout осуществляется с помощью системного вызова system() без применения программы-загрузчика. При запуске logout передается один аргумент - количество использованного времени в этом сеансе связи в минутах и устанавливаются следующие переменные окружения: PATH=/usr/bbs:/usr/bbs/bin:/usr/bbs/usr/Firstname/Lastname USER=Firstname Lastname GROUP=default HOME=/usr/bbs/usr/Firstname/Lastname CALLSIGN=first или Firstname.Lastname DOTTEDNAME=Firstname.Lastname HOSTNAME=bbs.foo.bar EMAIL=$CALLSIGN@$HOSTNAME TIMELEFT=текущий остаток времени пользователя в минутах PRIVLEVEL=уровень доступа пользователя Из процедуры logout может быть вызвана утилита setuser для модификации значений переменных текущего профайла пользователя. Приложение А: Справочник по програмам пакета TNSDrive ===================================================================== А.1. drive - основной выполняемый модуль --------------------------------------------------------------------- NAME drive - основной выполняемый модуль BBS SYNTAX drive [-s speed] [menu [level]] DESCRIPTION Программа интерактивного взаимодействия с пользователем. Выполняет функцию интерпретатора команд и осуществляет кон- троль использования времени, обладает большим колличеством вс- троенных функций, комманд и переменных. OPTIONS speed нарицательная скорость соединения, используется для некоторых внутренних вычислений и отображений; menu имя каталога стартового меню, по умолчанию Main_menu в домашнем каталоге системы или значение MENUPATH из файла главных настроек .system.conf; level уровень доступа текущего пользователя; CAUTION Для правильной работы предпочтителен set-GID на группу tty. Drive может иметь set-UID, в этом случае он будет работать с эффективными правами данного UID, но запуск любых внешних при- ложений будет осуществляться с реальным UID от которого drive и был запущен. Возможен запуск непоследственно программой login, не требует наличия системного shell. Аргументы предназначены для тестирования и отладки и не должны использоваться в нормальных условиях эксплуатации. А.2. tnspasswd - назначение или изменение пароля пользователя --------------------------------------------------------------------- NAME tnspasswd - назначение или изменение пароля пользователя SYNTAX tnspasswd DESCRIPTION Смена либо задание пароля пользователя в персональном файле настроек .user.conf. Все пароли хранятся в закодированном виде, поэтому ручная его установка в .user.conf невозможна. Программа ищет .user.conf в текущем каталоге, если его нет, то он будет создан; .user.conf должен быть доступен на запись программе drive. BUGS Следует иметь ввиду что tnspasswd порождает файл .user.conf с правами пользователя ее запустившего, при изменении файла пра- ва наследуются. Не работает с файлом .cuser.conf. А.3. setuser - изменение текущих значений переменных процесса drive --------------------------------------------------------------------- NAME setuser - изменить текущие значения переменных процесса drive SYNTAX setuser [-r] [-s] [-t tty] [-u username] [settings...] DESCRIPTION Позволяет модифицировать значения некоторых внутренних пере- менных непосредственно во время работы пользователя либо, бу- дучи вызвана без аргументов, выводит список всех находящихся на линии пользователей. Чтобы изменить значения переменных необходимо идентифицировать требуемый процесс drive с помощью ключа -t и/или ключа -u. Если эти ключи не использовались при запуске setuser, то выби- рается текущее tty с которого он запущен. Если setuser запущен без контрольного терминала (например с помощью cron(8)), то выбираются все работающие в данный момент процессы drive. Новые значения переменных можно также сохранить в специальный файл .setuser в домашнем каталоге BBS или удалить его. Данный файл всякий раз будет интерпретироваться вновь запускаемыми процессами drive. Таким образом, setuser в сочетании с системным cron может быть использован для создания каких-либо временных событий в BBS. OPTIONS -r удалить файл .setuser; -s записать (добавить) установки в файл .setuser; -t выбрать пользователей по маске на используемое tty; -u выбрать пользователей по маске на входное имя; Возможна модификация следующих значений: MENUDIR каталог меню; * FILEAREADIR каталог файловой области; * READFILESDIR имя каталога .readfiles; UPLOADDIR каталог для upload; * MSGAREADIR файл с базой сообщений; * TIMELEFT остаток времени в минутах; * GROUP группа пользователя; * CALLSIGN короткое имя пользователя (позывной); PRIVLEVEL уровень доступа; * DAILYDLLIMIT дневной лимит размера download; SYSDLULRATIO требуемое отношение DL/UL; ULMULTIPLIER множитель размера upload; TIMERATE значение скорости убывания времени (sec); INTERRUPT интервал прерываний по таймеру (sec); MESG N-включить, Y-выключить режим "небеспокоить"; CONNECT скорость соединения; DISPLAY вызвать файл на tty пользователя; KICKER T-терминатор, K-кикер, other-снять эти права; FINGER путь/файл с программой finger; TALK путь/файл с программой talk; Значения помеченные звездочкой сохраняются в соответствующем файле конфигурации пользователя. Ошибочные значения или названия переменных игнорируются. Данные установки осуществляются вне зависимости от того в ка- ком приложении или меню находится пользователь. Команда DISPLAY может быть использована для вызова файла с указанным имен непосредственно на терминал пользователя. Если вызываемый файл имеет признак выполняемого файла, то пользова- тель окажется в данном приложении как если бы он запустил его из меню. EXAMPLES Назначить находящемуся на линии пользователю с именем Demo User остаток времени в 30 минут и уровень доступа 10: setuser -u 'Demo User' TIMELEFT=30 PRIVLEVEL=10 Переместить пользователя находящегося на линии ttyA03 в меню с персональными установками: setuser -t A03 MENUDIR=Main_menu/Profile Показать пользователю сообщение из файла .info.show: setuser -u "Demo User" DISPLAY=.info.show CAUTION SetUser возможно запустить только пользователем root или про- цессом drive. В процессе работы имеет реальные права bbs. А.4. tnsadmin - обслуживание базы пользователей --------------------------------------------------------------------- NAME tnsadmin - обслуживание базы пользователей SYNTAX tnsadmin [bbsdir] tnsadmin -P days [-l level] [-y] [bbsdir] DESCRIPTIONS Это полноэкранная интерактивная программа для обслуживания ба- зы пользователей. Если при запуске был использован ключ -P то программа работает в упрощенном режиме предназначенном только для удаления пользователей (смотри ниже). Для вывода списка команд помощи нужно нажать клавишу h. Ниже приведены основные клавиши управления и их функции: ENTER редактирование файла настроек пользователя; TAB переключить режим отображения; INS отметить пользователей; DEL удалить пользователя или отмеченных пользователей; w записать всех или отмеченных пользователей в выбранный файл (зависит от режима отображения); / поиск пользователя в списке (нечувствителен к регистру, поиск идет вниз по списку от курсора); u cортировка по именам; n cортировка по фамилиям; p cортировка по уровню доступа; s сортировка по флагам статуса; l сортировка по последнему времени входа в систему; c сортировка по числу входов в систему; t сортировка по остатку времени; r составная (сложная) сортировка; Сокращения в столбце флагов статуса: R пользователь имеет статус regular (обычный); C пользователь имеет статус charge (платный); I пользователь имеет статус infinity (счетчик времени не убывает); B пользователь имеет заблокированный аккаунт (пустое или отсутствует поле PASSWORD); T пользователь имеет статус терминатора (действует в конференции); OPTIONS -P режим "только удаление", в аргументе days указывается колличество дней сколько пользователь не выходил на связь от текущего даты; -l удалять только тех пользователей, чей уровень доступа меньше или равен указанному аргументу level; -y удалять молча без лишних вопросов (можно запускать из cron(8)); bbsdir каталог где установлена BBS, по умолчанию используются данные из /etc/passwd; CAUTION TNSadmin требует исключительных прав доступа root или bbs. В режиме "только удаление" работает только от root. Не следует устанавливать какой-либо set-UID данной программе. Не следует располагать данную программу в каталогах, доступных на чтение и запуск пользователям из BBS. А.5. onboard - взаимодействие с пользователями --------------------------------------------------------------------- NAME onboard - взаимодействие с пользователями SYNTAX onboard -c | -d | -g | -t onboard ttyXX onboard -u substr | -s substr | -w username DESCRIPTION Программа предназначена для пользователей UNIX и администрато- ра системы. Позволяет следующее: * участвовать в on-line конференции на BBS; * взаимодействовать с пользователем BBS в личной беседе; * определить наличие пользователей на BBS; * искать пользователей по ключевому слову в базе пользователей BBS либо выводить весь список пользователей; * просматривать всю имеющуюся информацию о пользователе; Если при запуске программы не было указано ни одного аргумен- та, то выводится список присутствующих в BBS пользователей. OPTIONS -c список пользователей находящихся в конференции; -d кто что делает; -g войти в конференцию (присваивается статус terminator); -t запросить пользователя в талк; -u список пользователей имеющих подстроку substr в своем имени (all - все пользователи); -s список коротких имен пользователей (callsign) имеющих подстроку substr в своем callsign или полном имени; -w выдать всю имеющуюся информацию о пользователе; ttyXX ответить на талк-запрос пользователя поступивший с терминала ttyXX. CAUTION OnBoard должен обладать эффективными правами bbs, поэтому не- обходимо установить этой программе set-UID на bbs. А.6. bbsmail - поместить почту в почтовый ящик пользователя --------------------------------------------------------------------- NAME bbsmail - поместить почту в почтовый ящик пользователя SYNTAX bbsmail [-r] [-o] [-i file] [-f name] [-s subj] to-addr... DESCRIPTION Программа предназначена для помещения пришедшего по e-mail или отправленного локально письма в почтовый ящик одному или нес- кольким пользователям BBS. С помощью bbsmail можно помещать письма и в другие разделы со- общений на BBS (folders), не только в личные почтовые ящики. Письмо с заголовком подается на стандартный ввод (stdin) или может браться из заданного в аргументе -i имени файла. В аргументе to-addr перечисляются имена пользователей BBS которым предназначено данное сообщение. Имя получателя может быть указано в любом виде: 'John Doe' john.doe@bbs.foo.bar john JOHN@bbs.foo.bar последние два примера применимы если пользователь имеет корот- кое имя (callsign) john. Для того чтобы пользователи BBS имели возможность получать e-mail следует сконфигурировать соответствующим образом сис- темный sendmail, например так: sendmail.cf: Mbbs-mail, P=/usr/bbs/bin/bbsmail, F=mDFMhu, S=11, R=21, M=100000, A=bbsmail $u mailertable: bbs.foo.bar bbs-mail:bbs Для работы с EXIM надо прописать, например так: exim.conf: # В разделе роутеров: bbsmail_router: driver = manualroute route_list = bbs.gelf.no-ip.org transport = bbsmail # В разделе транспортов: bbsmail: driver = pipe user = bbs command = /usr/bbs/bin/bbsmail ${local_part} return_fail_output = true OPTIONS -r ограниченный режим приема писем - письма принимаются только от зарегистрированных в системе пользователей; -o вывести результирующее сообщение на стандартный вывод (stdout) иначе письмо помещается в почтовый ящик; -i считать письмо из указанного файла иначе stdin; -f нарицательное имя фолдера куда направлено письмо, используется только для заполнения поля X-Folder; -s тематика письма, заменяет существующее поле Subject; CAUTION BBSmail может иметь set-UID на bbs или может быть запущен с эффективными правами root чтобы иметь возможность установить эффективные права bbs для помещения результирующего сообщения в почтовый ящик пользователя. При выводе результирующего сообщения на stdout (ключ -o) пе- реключения эффективных прав на bbs не происходит, наследуются права запускающего процесса. А.7. fullidx - генерация списков файлового архива --------------------------------------------------------------------- NAME fullidx - генерация списков файлового архива SYNTAX fullidx [-c config] [-m marknew] [-n newdays] [dir] DESCRIPTION Программа предназначена для создания файловых списков, либо для простого просмотра содержимого каталога в манере как это выглядит из самой BBS. В качестве конфигурационного файла по умолчанию используется файл .fullidx.conf расположенный в домашнем каталоге bbs. Его пример: # Название системы SYSTEMNAME=My Great BBS # Скрытая от пользователя верхушка файлового архива HIDEDIR=/bbs/ # Имена индексных файлов содержащие описание конкретной файло- # вой области в формате "file description..." FILESLIST=files.bbs 00_index.txt # Заголовок полученного списка взять из файла BANNER=/usr/bbs/.banner.show # Файл с описанием файловых разделов из которого будут взяты # пути к каталогам с индексными файлами. AREACONF=/usr/bbs/Main_menu/Files_section/.filearea.conf # Файлы созданные позднее чем указанное колличество дней назад # будут помечены звездочкой как новые MARKNEW=30 # Файлы не имеющие своего описания получат указанное NODESCONFILE=[ No description on file ] # Разделы не имеющие своего описания получат указанное NODESCONAREA=[ No description on area ] OPTIONS -c файл конфигурации, по умолчанию .fullidx.conf в домашнем каталоге bbs. -m дней от текущей даты для маркировки новых файлов; -n дней от текущей даты для попадания файла в список; dir создать список только для указанного каталога; А.8. tnsgroup - проверка групповых прав пользователей --------------------------------------------------------------------- NAME tnsgroup - проверка групповых прав пользователей SYNTAX tnsgroup [-f file] [groups...] DESCRIPTION Проверяет правильность структуры файла конфигурации групповых прав .group.conf и выдает в наглядном формате права групп. OPTIONS -f алтернативный файл групповых прав, по умолчанию используется .group.conf из домашнего каталога bbs; groups выдать права указанных групп, по умолчанию все группы; А.9. tnsmon - on-line монитор-ассистент --------------------------------------------------------------------- NAME tnsmon - on-line монитор-ассистент SYNTAX tnsmon DESCRIPTION Это полноэкранная интерактивная программа для непосредственно- го наблюдениями за действиями пользователей. Отображает актуальный список пользователей находящихся на ли- нии и позволяет оперативно получить полную информацию о пользователе и его состоянии, снять пользователя с линии. Позволяет ассестировать ввод/вывод пользователя. Клавиша h выдает страницу помощи по клавишам и функциям прог- раммы, среди которых движение курсором, получение некоторой информации о пользователе (клавиша TAB), терминирование пользователя (клавиша DEL), и непосредственное наблюдение за пользователем (клавиша ENTER). При наблюдении Ваш экран является копией экрана пользователя за исключением тех моментов, когда пользователь находится во внешнем приложении. Вы можете вводить данные также как это де- лает пользователь и это будет выглядеть как будто это и есть ввод пользователя. С помощью клавиш HOME и END можно установить/получить значения текущих внутренних переменных, PageUp и PageDown увеличивают/ уменьшают лимит пользователя по 5 минут за одно нажатие и тд. CAUTION TNSmon должен иметь эффективные права bbs, поэтому необходимо установить этой программе set-UID на bbs. Не следует располагать данную программу в общедоступных ката- логах UNIX. А.10. msgpack - обслуживание базы сообщений --------------------------------------------------------------------- NAME msgpack - обслуживание базы сообщений SYNTAX msgpack [-b] [-c] [-q] [-d days] [-n num] -m dir msgpack [-b] [-c] [-q] [-d days] [-n num] files... DESCRIPTION Программа предназначена для удаления устаревших или превысив- ших лимит по колличеству сообщений в базах сообщений и конвер- тации баз формата Squish в традиционный формат хранения почты в OS UNIX. Программа позволяет обрабатывать как отдельные файлы содержа- щие базы сообщений так и сканировать домашние каталоги пользо- вателей в поисках почтовых ящиков. Программу можно также использовать для простого просмотра кол- личества сообщений в почтовых ящиках пользователей если запус- кать ее без необязательных параметров. OPTIONS -b создавать резервную копию базы сообщений; -c конвертирование базы сообщений из старого формата Squish в новый текстовый формат; -q "молчаливый" режим; -d дней от текущей даты для удаления сообщений; -n оставить в базе указанное колличество сообщений; -m режим сканирования почтовых ящиков пользователей; Если указан ключ -m то в обязаательном параметре следует ука- зывать не имена файлов а стартовый каталог базы пользователей. EXAMPLE Удалить сообщения старше 30 дней от текущей даты в базах сооб- щений находящихся в файлах каталога /usr/bbs/msg: msgpack -d 30 /usr/bbs/msg/* Оставить в почтовых ящиках пользователей, домашние каталоги которых расположены в /usr/bbs/usr, максимум по 100 сообщений (удалятся более старые): msgpack -n 100 -m /usr/bbs/usr Конвертировать почтовые ящики из старого формата в новый для версии TNSDrive 1.4 (с удалением старых): msgpack -cc -m /usr/bbs/usr CAUTION MsgPack может иметь set-UID на bbs или может быть запущен с эффективными правами root чтобы иметь возможность установить эффективные права bbs для изменения файла базы сообщений. Если программа имеет set-UID на bbs, ее не следует располагать в каталогах, доступных на чтение и запуск пользователям из BBS или UNIX. Приложение Б: Основные файлы конфигурации системы ===================================================================== Б.1. .system.conf - главные системные настройки --------------------------------------------------------------------- Не обязателен, но рекомендуем. Используется модулем drive. Файл содержит главные системные настройки и установки по умолчанию, в нем происходит инициализация переменных и установка начальных парамет- ров системы. Настраивает точку входа в меню MENUPATH. Хранится в домашнем каталоге системы или в файле /etc/tns/system. Детально описан в пункте 3.1. Руководства Администратора. Б.2. .language.conf - настройка языков --------------------------------------------------------------------- Обязателен. Используется модулем drive. Файл настраивает языки и таблицы перекодировок, в нем происходит ини- циализация системных сообщений и файлов помощи основных встроенных функций. По крайней мере один язык должен быть определен. Хранится в домашнем каталоге системы или в файле /etc/tns/language. Детально описан в пункте 3.2. Руководства Администратора. Б.3. .tty.conf - контроль входных линий --------------------------------------------------------------------- Не обязателен. Используется модулем drive. Файл предназначен для контроля доступа пользователей к определенным входным линиям в установленное время. Хранится в домашнем каталоге системы или в файле /etc/tns/tty. Детально описан в пункте 3.3. Руководства Администратора. Б.4. .limits.conf - пользовательские лимиты --------------------------------------------------------------------- Не обязателен, но рекомендуем. Используется модулем drive. Файл определяет зависимость наиболее важных системных лимитов и ресур- сов от текущего уровня доступа пользователя. Настраивает допустимое суточное время пребывания пользователя в системе. Хранится в домашнем каталоге системы или в файле /etc/tns/limits. Детально описан в пункте 3.4. Руководства Администратора. Б.5. .group.conf - групповые права пользователей --------------------------------------------------------------------- Не обязателен, но рекомендуем. Используется модулем drive. Файл описывает группы пользователей с определением прав доступа к кон- кретным системным сервисам. Рекомендуется определение по крайней мере одной группы default. Хранится в домашнем каталоге системы или в файле /etc/tns/group. Детально описан в пункте 3.5. Руководства Администратора. Б.6. .ftp.conf - конфигурация протоколов передачи файлов --------------------------------------------------------------------- Не обязателен, но рекомендуем. Используется модулем drive. Файл описывает протоколы и способы передачи файлов, поддерживаемые системой для приема/передачи файлов с пользователем. Рекомендуется оп- ределение по крайней мере одного протокола Zmodem. Хранится в домашнем каталоге системы или в файле /etc/tns/ftp. Детально описан в пункте 3.6. Руководства Администратора. Б.7. .viewers.conf - конфигурация файл-вьюверов --------------------------------------------------------------------- Не обязателен. Используется модулем drive. Файл описывает способы отображения внутреннего содержимого файлов, на- ходящихся в файловом архиве и в домашнем каталоге пользователя. Хранится в домашнем каталоге системы или в файле /etc/tns/viewers. Детально описан в пункте 3.7. Руководства Администратора. Б.8. .filelist.conf - конфигурация индексных файлов --------------------------------------------------------------------- Не обязателен. Используется модулем drive. Файл определяет список индексных файлов файлового архива, способы и режимы отображения содержимого файловых разделов. Хранится в домашнем каталоге системы или в файле /etc/tns/filelist. Детально описан в пункте 3.8. Руководства Администратора. Приложение В: Системные файлы-сообщения пользователю ===================================================================== В.1. .nologin - вход в систему запрещен --------------------------------------------------------------------- Если файл с именем .nologin присутствует в домашнем каталоге BBS, то входящие пользователи будут отвергаться системой. При этом пользовате- лю будет отображено содержимое файла .nologin. Если файл пустой, то будет отображено внутреннее системное сообщение. Встроенные команды и переменные системы не могут быть использованы в этом файле. В.2. .nonewuser - вход новым пользователям запрещен --------------------------------------------------------------------- Если файл с именем .nonewuser присутствует в домашнем каталоге BBS, то самопроизвольная регистрация новых пользователей запрещена. В систему могут войти только те пользователи, входное имя которых было зарегис- трировано в системе ранее. В файле могут использоваться ключевые последовательности встроенных в систему команд и переменных, файл может быть и выполняемым. Ни одна пользовательская переменная не определена на момент выполнения данного файла. В.3. .ttyallow.show - входная линия недоступна --------------------------------------------------------------------- Файл .ttyallow.show демонстрируется пользователю если тот пытается зайти на запрещенную входную линию либо в запрещенное время. Соответс- твие между tty и временем определяется в файле .tty.conf. Файл может находится в домашнем каталоге BBS. Встроенные команды и переменные системы не могут быть использованы в этом файле. В.4. .banner.show - системная заставка --------------------------------------------------------------------- В файле .banner.show домашнего каталога BBS хранится системная застав- ка, отображаемая пользователю всякий раз непосредственно перед входом в систему (запросом входного имени). В файле могут использоваться ключевые последовательности встроенных в систему команд и переменных, файл может быть и выполняемым. Ни одна пользовательская переменная не определена на момент выполнения данного файла. В.5. .notfound.show - такой пользователь не найден --------------------------------------------------------------------- Файл .notfound.show домашнего каталога BBS демонстрируется пользовате- лю в случае если он ввел незарегистрированное в системе входное имя, файл отображается непосредственно перед запросом на подтверждение дан- ного имени. В файле могут использоваться ключевые последовательности встроенных в систему команд и переменных, файл может быть и выполняемым. Ни одна пользовательская переменная не определена на момент выполнения данного файла. В.6. .newusers.show - вывеска новому пользователю --------------------------------------------------------------------- Файл .newusers.show домашнего каталога BBS демонстируется пользователю в процессе его самопроизвольной регистрации непосредственно перед предложением назначить пароль вновь регистрируемого в системе пользо- вателя. В файле могут использоваться ключевые последовательности встроенных в систему команд и переменных, файл может быть и выполняемым. Ни одна пользовательская переменная кроме входного имени не определена на момент выполнения данного файла. В.7. .userdeny.show - сообщение заблокированному пользователю --------------------------------------------------------------------- Файл .userdeny.show домашнего каталога BBS - это вывеска пользователю с заблокированным акаунтом, когда параметр PASSWORD в профайле пользо- вателя не определен или отсутствует его значение. В файле могут использоваться ключевые последовательности встроенных в систему команд и переменных, файл может быть и выполняемым. Ни одна пользовательская переменная кроме входного имени не определена на момент выполнения данного файла. В.8. .badpasswd.show - сообщение о вводе плохого пароля --------------------------------------------------------------------- Если за все пять предоставленных попыток пользователь не смог пра- вильно ввести свой входной пароль, то непосредственно перед разьедине- нием ему будет продемонстрирован файл .badpasswd.show из домашнего ка- талога BBS. В файле могут использоваться ключевые последовательности встроенных в систему команд и переменных, файл может быть и выполняемым. Ни одна пользовательская переменная кроме входного имени не определена на момент выполнения данного файла. В.9. .daylimit.show - исчерпан дневной лимит времени --------------------------------------------------------------------- Файл .daylimit.show домашнего каталога BBS отображается перед рассое- динением пользователю, исчерпавшему суточный лимит времени пребывания в системе. В файле могут использоваться ключевые последовательности встроенных в систему команд и переменных, файл может быть и выполняемым. Некоторые пользовательские переменные не определены на момент выполне- ния данного файла. В.10. .climit.show - исчерпан оплаченный лимит времени --------------------------------------------------------------------- Файл .climit.show домашнего каталога BBS отображается перед рассоеди- нением пользователю, работающему в режиме Charge и полностью исчерпав- шему все выделенное ему время пребывания в системе. В файле могут использоваться ключевые последовательности встроенных в систему команд и переменных, файл может быть и выполняемым. Ни одна пользовательская переменная кроме входного имени не определена на момент выполнения данного файла. В.11. .newuser.show - вывеска впервые вошедшему пользователю --------------------------------------------------------------------- Файл .newuser.show домашнего каталога BBS - это вывеска впервые вошед- шему в систему пользователю. Как правило в файле используются ключевые последовательности встроен- ных в систему команд и переменных. Файл может быть выполняемым. Возможно использование любых пользовательских и системных переменных. В.12. .rookie.show - вывеска со второго по седьмой входа пользователя --------------------------------------------------------------------- Файл .rookie.show домашнего каталога BBS демонстрируется пользователю со второго по седьмой по счету вход в систему. Как правило в файле используются ключевые последовательности встроен- ных в систему команд и переменных. Файл может быть выполняемым. Возможно использование любых пользовательских и системных переменных. В.13. .welcome.show - вывеска после седьмого входа пользователя --------------------------------------------------------------------- Файл .welcome.show домашнего каталога BBS демонстрируется "старому" пользователю, который вошел в систему более семи раз. Как правило в файле используются ключевые последовательности встроен- ных в систему команд и переменных. Файл может быть выполняемым. Возможно использование любых пользовательских и системных переменных. В.14. .goodbye.show - вывеска непосредственно перед разьединением --------------------------------------------------------------------- Файл .goodbye.show отображается пользователю в команде GoodBye непос- редственно перед разьединением. Как правило в файле используются ключевые последовательности встроен- ных в систему команд и переменных. Файл может быть выполняемым. Возможно использование любых пользовательских и системных переменных. Приложение Г: Сопутствующие программы ===================================================================== Помимо стандартных утилит пакета TNSDrive рекомендуется использование следующих программ, добавляющих полную функциональность системе BBS: Г.1. ngetty/showtty --------------------------------------------------------------------- Обычное BSD getty, но с возможностью мониторинга модемных линий. TNSDrive пользуется некоторыми возможностями ngetty. Г.2. sz/rz --------------------------------------------------------------------- Протоколы передачи файлов Zmodem, Xmodem, Ymodem. Стандартный пакет sz/rz требует некоторой модификации на предмет логи- рования переданных файлов для полноценной работы в составе TNSDrive. Г.3. zip/unzip, rar, unarj --------------------------------------------------------------------- Всевозможные архиваторы. Могут использоваться в некоторых функциях TNSDrive для просмотра со- держимого архива либо динамической упаковки передаваемых файлов. Г.4. pico --------------------------------------------------------------------- Простой полноэкранный редактор. Стандартный редактор pico требует некоторой модификации для обеспече- ния полной security (невозможность запуска внешнего shell, невозмож- ность редактирование произвольного файла и тп). Г.5. netchat --------------------------------------------------------------------- Netchat демон объединяет on-line конференции различных BBS, функциони- рующих под управлением TNSDrive, в единую сетевую конференцию. Netchat также обладает возможностями "Псевдо Сисопа" (PSYS), иными словами мо- жет выступать в конференции как один из участников беседы. Г.6. hydracom --------------------------------------------------------------------- Наиболее продвинутый двунаправленный протокол для передачи файлов, впервые реализованный разработчиками TNSDrive в среде UNIX, поддержи- вающий формат DSZ log и имеющий аналогичного сородича в MSDOS. Подроб- ную документацию смотрите в файле hydracom.doc пакета HydraKit. Г.7. lynx --------------------------------------------------------------------- Текстовый WWW клиент. Стандартный WWW клиент Lynx требует некоторой модификации для обеспе- чения полной security (невозможность запуска внешнего shell, невозмож- ность редактирование произвольного файла и тп) и функций локализации. Г.8. finger --------------------------------------------------------------------- Рекомендуется использование программы finger специально адаптированной для эксплуатации в составе BBS под управлением TNSDrive. Г.9. talk/ntalkd --------------------------------------------------------------------- Рекомендуется использование программ talk/ntalkd специально адаптиро- ванных для эксплуатации в составе BBS под управлением TNSDrive. Все эти и многие другие программы можно найти в каталогах ftp://ftp.turbo.nsk.su/pub/TNSDrive ftp://ftp.turbo.nsk.su/pub/unix