Basic Networking Utilities (BNU) - UUCP
постановка в пакет заданий на пересылку файлов
и выполнение команд на удаленной системе
С точки зрения пользователя
(по материалам Using UUCP and Usenet. O'Reilly & Associates, Inc.)
версия BNU (1983). признак: /usr/lib/uucp/Systems
Все команды в /usr/bin
uuglist # узнать список приоритетов
uuname # выдает список систем, к которым можно обратиться uucico
uuname -l # выдает имя локальной системы
uuname -c # выдает список систем, к которым можно обратиться по cu
mail <имя_системы>!<имя_пользователя> # послать письмо
если система или пользователь не существует, то Вы получите
сообщение об этом
mail newyork!tom < report # посылка текстового файла
mail newyork!japan!anna # посылка письма по цепочке
uucp [option] source destination # копировать файлы с/на удал.компьютер
source и destinaton имеют вид: [<имя_системы>!]<имя_файла(ов)>
-C копировать файл в буфер пересылки вместо создания ссылки
-f не создавать директорию, если не существует
-j вывести номер задания
-m известить заказчика почтой о завершении работы
-n <имя_пользователя> известить получателя о прибытии файла
-r поставить задание в очередь, но не запускать uucico сразу же
-s <файл> послать сообщение о передаче в файл
Команда uucp НЕ пересылает файлы, а только ставит их в очередь
программа uucico соединяется с удаленной системой, берет их из очереди
и пересылает.
Можно использовать метасисмволы как на локальном, так и на
удаленном конце (не забудьте "закавычить" их).
Если Вы указываете относительное имя файла, то uucp
добавляет перед ним имя текущей директории перед дальнейшей
обработкой.
Не удаляйте файл, не дождавшись конца пересылки (или используйте -C).
Относительное имя на удаленном конце также расширяется
именем текущей директории на ЛОКАЛЬНОМ конце!
Ограничения на пересылку
Администратор каждой системы задает список директорий из которых
чужие системы могут читать и в которые они могут писать.
/usr/spool/uucppublic - эта директория обычно доступна
(не забудьте побыстрее взять их оттуда).
Можно просто писать ~/[<имя_пользователя>].
По умолчанию берется пользователь uucp (его домашняя директория
и есть /usr/spool/uucppublic).
Пользователь uucp должен иметь право читать/писать файл
на соответствующей машине (пересылка ведется от его имени!).
uuto [options] file(s) <имя_системы>!<имя_пользователя>
послать файлы на удаленную систему, в
/usr/spool/uucppublic/receive/<имя_пользователя>/<имя_системы>
и известить письмом получателя
-m послать письмо заказчику о завершении
-p сделать копию файла в буфер перед пересылкой
uupick [-s <имя_системы>] [<имя файла>]
посмотреть нет ли файлов, отправленных с помощью uuto
данному пользователю [из данной системы] и в диалоге запросить
d удалить файл
m [dir] переслать файл
a [dir] переслать все файлы с той же системы
q выйти
uux [options] <имя_системы>!<командная строка>
Выполнить командную строку на удаленной системе.
Опять-таки только ставит в очередь.
Описок возможных команд ограничен и определяется администратором
удаленной системы.
Если в командной строке встречается воскл.знак, то uux считает
что файл надо взять с другой системы (если перед воскл.знаком
пробел, то с Вашей системы, иначе он пытается выделить имя системы
перед воскл. знаком). Относительные имена рассматриваются относительно
рабочей директории uucp на удаленной машине. UUCP использует uucp
чтобы собрать все затребованные файлы и скопировать их на ту
систему, где будет исполняться командная строка. Эти файлы должны иметь
соответствующие права и существовать на момент пересылки (а не только
в момент вызова uux).
Допустимые спец. символы: < > ; | (не забудьте о двойных кавычках)
Недопустимые спец. символы: << >> & [ ] ?
Стандартный вывод теряется (если он не перензначен в файл или канал).
Удаленная команда выполняется от имени пользователя uucp.
- взять стандартный ввод и передать как стандартный ввод команды
на удаленной системе
-a <имя_пользователя> известить о завершении
-c не копировать затребованные файлы в spool-директорию
-C копировать их
-g <буква> задать приоритет задания (a - старший, Z - младший)
-j вывести номер задания
-n не извещать письмом о завершении
-p использовать стандартный ввод
-r поставить задание в очередь, но не запускать uucico
-s <имя_файла> послать статус пересылки в файл
-x <число> задать уровень отладки (9 - старший, 0 - младший)
Пример
uux "foreign!who > my!~john/who.foreign"
uux "foreign!who | rmail (my!john)" # скобки экранируют ! от инт-и uux
uustat [options] # выдать состояние заданий
-a всех
-k <номер_задания> удалить задание из очереди
-m проверить доступность других систем
-p выдать ps для всех процессов, связанных с UUCP
-q выдать число заданий в очереди (имя системы, число заданий, время
посл. попытки контакта и его состояние
-r <номер_задания> "потрогать" файлы, связанные с заданием
-s <имя_системы> выдавать информацию, связанную с системой
-u <имя_пользователя> выдавать информацию, связанную с пользователем
о каждом задании выдается:
номер задания, время постановки в очередь, тип запроса(S - пересылка, R -
прием), имя удал. системы, имя выдавшего запрос пользователя, размер и
имя файла или команда и ее параметры
uulog [options] # показать журнал сообщений
-u <имя_пользователя> для данного пользователя
-s <имя_системы> для данной системы
-f <имя_системы> аналогично, как в tail -f
-<число> показать последние <число> строк
-x проверить uuxqt файл для данной системы или пользователя
Как все это работает:
uucp создает рабочий файл в /usr/spool/uucp, содержащий имя
исходного файла, имя результирующего файла, тип запроса,
опции (может быть копирует исходный файл)
вызывается uucico
создается статус-файл для задания
uucico сканирует спул-директорию в поисках готовых заданий и пытается
установить контакт с удаленной системой (создавая при этом
лок-файл, чтобы другой экземпляр uucico не лез к той же
системе). При этом могут быть следующие проблемы
SYSTEM not in Systems (имя системы не найдено в файле Systems)
Wrong time to call (неподходящее время для контакта или
Ваша система пассивная)
CALLBACK REQUIRED (Ваша система сконфигурирована для обратного
вызова)
NO CALL (RETRY TIME WAS NOT REACHED) совсем недавно пытались
связаться с этой системой, время до повторной попытки
еще не истекло
NO DEVICES AVAILABLE терминальная линия занята другим
процессом
DIAL FAILED либо удал. система не отвечает, либо проблемы
с файлом Devices
DEVICE LOCKED остался замок от пред. попытки доступа к той же
удал. системе
LOGIN FAILED (BAD LOGIN/PASSWORD) не удалось войти в удал.
систему
STARTUP FAILED
REMOTE REJECT AFTER LOGIN двум uucico не удалось начать разговор
WRONG MACHINE NAME наша система незнакома удал. системе
BAD LOGINE/MACHINE COMBINATION проблема с правами
REMOTE HAS A LOCK FILE FOR ME удал. система в это же время
вызовает нашу
Вот теперь начинается передача файлов
REMOTE ACCESS TO PATH/FILE DENIED не хватает прав на передачу
BAD READ не хватило места на удаленной машине
теперь системы обмениваются пакетами данных и подтверждениями
CONVERSATION FAILED пропала связь во время передачи
Как только передача файла успешно завершена, он пересылается из
временной директории на предназначенное ему место
Если среди запросов был запрос на удаленное выполнение, то
в спул-директории на удаленной машине создается файл с запросом
на выполнение
Как только вызывающая uucico передала все запросы, она пытается
завершить работу, если приемной uucico есть что передать, то
они меняются ролями, иначе сеанс завершается.
Если был передат запрос на выполнение, то на удаленной машине
вызывается uuxqt, который читает файл с запросом на выполнение,
проверяет есть ли команда в списке разрешенных, запускает
пересылку необходимых файлов и, в конце концов, выполняет
команду.
CONVERSATION SUCCEEDED хотя сама удаленная команда могла и
не выполниться
cu [options] <тел.номер>|<имя_системы> # удаленный терминал
-a<имя_устройства> указать имя устройства-номеронабирателя
-d печать диагностики
-e линия с проверкой на четность
-l имя файла в /dev
-h полудуплексная линия
-o линия с проверкой на нечетность
-s <скорость>
No device available (устройство занято другой программой)
а может быть было занято
а может быть на том конце не висит getty (ttymon)
а может быть параметры линии разные
а может надо пару раз нажать Enter
строчки, начинающиеся с тильды, интерпретируются как команды:
~. завершить сеанс
~~ маскировать тильду
~%take from [to] взять текстовый файл с удаленной системы
(только в Unix, без проверки и с причудами)
~%put from [to] положить текстовый файл на удаленную систему
(только в Unix)
~!<команда> выполнить команду на локальной системе
~$<команда> выполнить команду на лок.системе и послать вывод
на удаленную
~%cd <директория> сменить рабочую директорию на лок.системе
~%break
~t выдать характеристики линии
Передача файлов по цепочке
только через /usr/spool/uucppublic
на промежуточных машинах д.б. разрешено выполнять uux
на всех машинах д.б. одна версия uucp
неэтично пересылать большие файлы за чужой счет
большой файл может быть обрезан
=============================================================================
С точки зрения администратора
(по материалам Motorola Unix System V/88 4.0)
Все файлы в /etc/uucp и /var/spool/uucp д.б. с правами для uucp, а не root
home для uucp: /usr/lib/uucp
Пользователь nuucp должен иметь вместо ком.процессора uucico
Большинство административных программ лежит в /usr/lib/uucp
uucleanup, Uutry, uucheck
Демоны:
uucico - выбирает устройство, устанавливает связь, входит в удал.систему
пересылает файлы, журнализует результаты и извещает пользователя
почтой; вызывается из uucp, uux, uuto, uusched и Uutry
uuxqt - ищет в спул-директории заказы на выполнение, пришедшие с удал.
компьютера и выполняет их; вызывается из uudemon.hour (cron)
uusched - планирует выполнение заказов; вызывается из uudemon.hour (cron).
Файлы:
база данных: /etc/uucp, определяет устройства, линии, системы, права...
административные файлы: буферная директория, файлы замки, копии файлов, ...
журналы
Процедура установки:
1. Инсталяция BNU
2. /etc/uucp/Permissions (LOGNAME=nuucp)
3. /etc/uucp/Devconfig для uucp поверх tcp
service=cu device=tcp push=ttcompat:tirdwr
service=uucico device=tcp push=ttcompat:tirdwr
4. /etc/uucp/Sysfiles лучше не трогать
5. /etc/uucp/Limits лучше не трогать
6. завести пользователя uucp и nuucp
uucp:x:5:5:0000-uucp(0000):/usr/lib/uucp
nuucp:x:10:10:0000uucp(0000):/var/spool/uucppublic:/usr/lib/uucp/uucico
не забудь сказать pwconv
Обслуживание (командные файлы в /usr/lib/uucp,надо занести их вызов в cronroot)
uudemon.poll
читает Poll и если там упоминается какая-то система, то в спул-директорию
записывается задание на общение с ней (таким образом обеспечивается опрос
систем, даже если у нашей машины нет никаких заданий к ним)
рекомендация: дважды в час перед uudemon.hour
uudemon.hour
вызывает uusched, который ищет файлы с заказами и планирует их
вызывает uuxqt, который ищет файлы с заказами на выполнение с других систем
рекомендация: дважды в час
uudemon.admin
вызывает uustat -p -q и посылает почтой uucp
рекомендуется: трижды в день
uudemon.cleanup
собирает журналы от всех машин, сливает их в .Old
удаляет старые заказы и файлы с данными (7дней и старше)
удаляет старые (2 дня) заказы на выполнение с чужих машин
возвращает почту, которую не смогли отправить
посылает письмо со статистикой
рекомендуется: раз в день в конце
Могут расти файлы: /usr/adm/sulog, /usr/lib/cron/log
Отладка:
/usr/lib/uucp/uucheck -v # проверяет все ли файлы для UUCP в наличии
/usr/lib/uucp/Uutry -r имя_системы # запуск uucico под отладкой
(в файл /tmp/имя_системы)
Протоколы передачи:
g - проверка ошибок и повтор( ширина окна 7, размер пакета 64)
G - то же самое, но ширину окна можно менять от 1 до 7, размер от 32 до 4096
e - без обработки ошибок
База данных (в /etc/uucp):
Config - параметры UUCP
Protocol=G(7,512)ge
протокол по умолчанию
Devices - описание типа устройства
Type Line Line2 Class dialer-token пары
где Type - тип: Direct - прямое соединение
ACU[,протоколы] - модем
имя сети - например TCP
имя системы - признак того, что данное устройство
для определенной системы в Systems
Type должен соответсвовать полю Type в Systems (третье)
пример:
TCP,eg tcp - - TLIS \D
Line - имя устройства (имя файла в /dev), если за ним идет ',M'
то устройство будет открыто не дожидаясь наличия несущей
Line 2 - должен быть прочерк
Class - для ACU и Direct скорость устройства, может быть с буквой
перед ней, чтобы различать классы диалеров, это поле д.
соответствовать четвертому полю в Systems
Может стоять слово Any, тогда в Systems скорость д.б.
указана явно (а то будет по умолчанию 1200)
dialer-token пары: dialer может быть имя модема, слово direct или
uudirect для Direct; token либо стоит сразу же за ним, либо
берется из Systems; в последней паре token обычно отсутствует
и берется из поля Phone файла Systems; для dialer должна
быть соответствующая строчка в Dialers или это зафиксированное
имя: TLI (без стримов), TLIS (со стримами).
для обычного модема пара только одна: в качестве dialers
указано слово, которое соответствует первому полю в файле
Dialers; token - опускается (в этом случае в качестве token для
диалера передается поле Phone из Systems.
Для прямого соединения или имя системы указывается слово direct
или uudirect. Другие случаи вряд ли нам встретятся.
Dialers - определяет начальные переговоры по линии, прежде чем по
ней можно будет передавать данные
имя_диалера замены ожидаем-посылаем ...
имя_диалера соответствует пятому полю в Devices
замены - строка перекодировки номера телефона: пары символов: первый
символ из пары отображается на второй( обычно заменяют
знак = на команду дождаться гудка и знак - на команду паузы)
нулевая строка изображается как ""
специальные символы:
\p пауза 0.5 секунды
\d задержка 2 секунды
\D телефонный номер или token без трансляции через Dialcodes
\T - //- с трансляцией
\K break
\E при выводе символа в линию, проверяется возвращается ли он
обратно
\e запретить это дело
\r CR
\c в конце строки запрещает LF и CR (обычно добавляются авт-ки)
\M включить CLOCAL
\m выключить
\n NL (LF)
\<три восьмеричных цифры>
Systems - содержит информацию, необходимую uucico для установления связи
с удаленной системой. Каждая строка описывает отдельную систему с
которой можно связаться или которая может связаться с Вами. Одной
системе может соответствовать несколько строк, каждая из которых
представляет отдельный путь доступа к системе.
имя_системы время_доступа тип класс номер_телефона ожидаем посылаем ...
время_доступа ограничивает время когда можно вызывать удаленную
систему и имеет формат: день_и_время[;минут_до_повтора]
день записывается так:
Su Mo Tu We Th Fr Sa Wk (рабочие дни) Any Never
время записывается в виде интервала:
0800-1230 (с 8.00 до 12.30)
0800-0600 (кроме как с 6.00 до 8.00)
тип и класс должны соответствовать первому и четвертому полям
в файле Devices; в поле класс может стоять Any
номер_телефона может содержать буквенное сокращение, которое заменяется
на строку из Dialcodes
поле ожидаем может иметь форму:
ожидаем[-посылаем-ожидаем] где посылаем шлется, если предыдущее
ожидаем не сбылось и т.д.
пустая строка выглядит так ""
каждое посылаем по умолчанию дополняется LF, если не завершается \c
специальные символы:
\p пауза 0.5 секунды
\d задержка 2 секунды
\K break
BREAK -//-
\b BS
\N NULL
\E при выводе символа в линию, проверяется возвращается ли он
обратно
\e запретить это дело
\r CR
\s пробел
\t табуляция
\\ \
\c в конце строки запрещает LF и CR (обычно добавляются авт-ки)
\M включить CLOCAL
\m выключить
\n NL (LF)
\<три восьмеричных цифры>
Dialcodes - в каждой строке содержит буквенное сокращение (см. поле
номер_телефона в файле Systems) и соответствующий номер
Permissions - определяются права удаленных компьютеров на вход, пересылку
и исполнение; в файл входят строки двух типов: MACHINE и LOGNAME
каждый UID, используемый для входа удаленной системы д. присутсво-
вать, причем ровно в одной LOGNAME-строке
если вызываемая система не встречается ни в одной MACHINE-строке, то
действуют правила по умолчанию: локальные пересылки будут разрешены;
удаленный компьютер может посылать файлы в Ваш /usr/spool/uucppublic;
с удаленного компьютера можно запрашивать выполнение только rmail.
когда вызывают Вашу систему, то Вы не можете убедиться, что вызывающая
система та, за которую она себя выдает.
логическая строка состоит из имя/значение пар, разделенных пробелами
имя=значение
MACHINE=<имя_системы>[:<имя_системы>...] когда мы звоним
можно использовать также слово OTHER
LOGNAME=<имя_пользователя>[:<имя_пользователя>...] когда нам звонят
REQUEST=[yes|_no] разрешать ли вызывающей системе запрашивать пересылку
SENDFILE=[yes|_call] когда удаленный компьютер, вызвавший Вас заканчивает
работу, то он может спросить Ваш компьютер нет ли у него заданий;
yes разрешает Вашему компьютеру ответить (в строке LOGNAME) - обя-
зательно если Ваш компьютер в пассивном режиме; call - запрещает.
READ и WRITE определяет из каких директорий uucico может читать или
писать; по умолчанию оба равны /usr/spool/uucppublic; может быть
несколько имен разделенных двоеточием
NOREAD и NOWRITE определяют исключения для READ и WRITE
CALLBACK=[yes|_no] - в ответ на вызов Ваша система не передает файлы,
а перезывает удаленную систему; не устанавливайте с обоих концов.
COMMANDS определяет список команд, которые удаленная система
может выполнять на Вашей системе (в строках типа MACHINE независимо от
того, кто кого вызывает); по умолчанию rmail. По умолчанию путь
для команды /usr/bin. Если в списке команд указан явный путь
для команды (/usr/ucb/rmail), то именно он будет использован,
независимо от того, какой путь указан в uux. Можно также указать ALL.
При этом подстановка путей все равно происходит.
VALIDATE доп. контроль над выполнением команд: привилегированный
компьютер должен входить на Ваш через отдельный UID и в LOGNAME-
строке для этого UID должна быть опция VALIDATE=<имя_системы>:...
в которой указано имя этого компьютера
если опции одинаковы, то в одной строке может быть и MACHINE и LOGNAME
Poll - информация для опроса других систем, для каждой системы содержит
одну строчку: в первом поле имя системы, затем табуляция, затем список
часов через пробел. Используется демоном uudemon.poll, который
устанавливает рабочие файлы для планировщика, который запускается
через uudemon.hour
Devconfig - для работы через TCP/IP
service=cu device=tcp push=ttcompat:tirdwr
service=uucico device=tcp push=ttcompat:tirdwr
вместо стрим-модуля ttcompat на Вашей машине м.б. ntty
device должен соответствовать строчке в файле Device
Sysfiles позволяет установить различные файлы, используемые в качестве
Systems, Devices и Dialers для uucp и cu
service=cu:uucico systems=Systems:Local_systems
Limits - ограничивается максимальное число одновременных uucico, uuxqt
и uusched, формат:
service=[uucico|uuxqt|uusched] max=<число>
Grades - определение типов приоритетов работ и ограничения для работ
данного приоритета
<польз.приоритет> <сист.приоритет> <размер_задания>
где <польз.приоритет> - имя приоритета с точки зрения пользователя;
<сист.приоритет> - одна буква от A до z (A - высший, z - низший
приоритет);
<размер_задания> - 5000, 10K, 5M, Any
- как интерпретировать id-список:
User, Non-user, Group, Non-group
- список имен через пробел или Any
одному польз.приоритету может соответствовать несколько строк, они
будут просматриваться последовательно, до тех пор пока не попадется
та, которая удовлетворяет ограничениям
обязательно надо определить приоритет default:
default Z Any User Any
remote.unknown - программа, выполняющаяся, если система не найдена
в Systems. Обычно она заносит попытку в журнал и прерывает соединение
Если программа не имеет прав на выполнение, то Ваша система будет
принимать вызов от ЛЮБОЙ удаленной системы.
Административные файлы
TM (временные файлы с данными, передача которых не закончена)
/var/spool/uucp/<имя_уд.системы>/TM.pid.ddd
как только файл данных передан полностью, он копируется в место
назначения, указанное в C.sysnxxx
LCK (замок для предотвращения дублирования передачи)
LCK.<имя_системы>.<сист.приоритет>
файл содержит pid держателя замка
LK (замок для предотвращения одновременного использования устройства)
LK.<ст_номер_устройства_содерж_директорию>.<ст_номер_у-ва>.<мл_номер>
файл содержит pid держателя замка
C. (текст задания на пересылку или выполнение)
C.<имя_уд_системы><систприоритет><номер_задания>
содержит тип запроса S(посылка), R(прием)
полное имя файла для пересылки
полное имя целевого файла
имя пользователя
список опций
имя ассоциированного файла в спул-директории
биты режима исходного файла
имя уд.пользователя, которого надо известить
D. (файлы данных - если заказано копирование исходных файлов)
D.<имя_системы><номер_задания><номер_файла>
P. (контрольная точка - файл, переданный не полностью; новые версии
UUCP могут возобновлять передачу с точки прерывания, а не с начала
P.<имя_системы><номер_задания><номер_файла>
X. заказ на выполнение, переданные с удаленного компьютера
X.<имя_системы><сист.приоритет><номер_задания>
имя заказчика и его системы
имя файла(ов), необходимых для исполнения
имя файла, который будет использован как стандартный ввод
имя системы и файла, куда передать стандартный вывод и stderr
командная строка
строка для кода возврата
Журналы
все команды, выданные пользователем, администратором и оператором
/var/spool/uucp/.Admin/command
имя_пользователя время_запуска командная_строка
журнал изменения состояния системы и очереди
/var/spool/uucp/.Log/<программа>/<имя_системы>
где <программа> - это uucp, uucico, uux и uuxqt
имя_пользователя имя_уд.системы ид время pid номер_передачи статус почему
где ид - ид-р задания, если оно сейчас выполняется
журнал ошибок
/var/spool/uucp/.Admin/errors
тип_ошибки программа pid время сообщение номер_ошибки модуль строка
журнал пересылок
/var/spool/uucp/.Admin/xferstats
имя_уд.системы имя_пользователя M/S время_записи \
C(uucico)/U(uucp)/X9uux)/Q(uuxqt) pid номер_передачи имя_устройства \
направление длина время_передачи скорость признак_ошибки
учетный журнал (о пересылке на системе-запросчике, о выполнении - исполнителе)
/var/spool/uucp/.Admin/account
собирается только если файл существует и имеет права на запись для uucp
uid номер_задания размер(байт или секунд) C(выплонено)/P(частично) \
класс_обслуживания(S - стандартный) сист.приоритет имя_исходной_системы
имя_заказчика время имя_результ.системы имя_польз.назначения \
имя устройства "" тип_задания(xfer - передача, rexe - выполнение \
командная_строка
нарушения безопасности
/var/spool/uucp/.Admin/security
xfer имя_системы_запросчика имя_запросчика имя_системы_исполнителя \
имя_польз.исполнителя целевое_имя_файла имя_исходной_системы \
имя_собственника_файла имя_исх.файла размер время_модиф_файла \
время_начала_передачи время_завершения_передачи
rexe имя_системы_запросчика имя_запросчика имя_исполнителя время \
командная_строка
журнал производительности
/var/spool/uucp/.Admin/perflog
собирается только если файл существует и имеет права на запись для uucp
записи двух видов: о соединении и о передаче
conn время pid имя_системы Master/Slave имя_уд.системы имя_устройства \
протокол ""
xfer сист.приоритет время pid имя_системы Master/Slave имя_уд.системы \
имя_устройства протокол "" номер_задания время_пребывания_в_очереди \
полное_время_оборота размер командная_строка \
время_извлечения_из_очереди(real,user,system) \
время_передачи(real,user,system), время_завершения(real,user,system) \
признак_ошибки
список неизвестных систем, пытавшихся подсоединиться к нашей
/var/spool/uucp/.Admin/Foreign
Популярность: 17, Last-modified: Sat, 25 Mar 1995 07:58:29 GmT