который общается с вызывающим процессом.
Следующая конфигурация - прямое подключение через селектор порта
- показана на рис. 8-8. Здесь тоже кабель, идущий от DTE-1 к
селектору порта, должен быть нулевым модемом.
Рис. 8-8. Прямое подключение через селектор порта
---------------------------------------------------------------------------
+---------+ +----------+ +---------+
| | | | | |
| UNIX 1 | | | | UNIX 2 |
| | Нулевой | Селектор | Прямой | |
| tty00 |--------->| порта |-------->| tty00 |
| | модем | | кабель | |
| | | | | |
+---------+ +----------+ +---------+
ДЕЙСТВИЯ ДЕЙСТВИЯ
1. cu -ltty00 -s9600 dir 1. getty tty00 9600
login имя_пользователя
sh
2. uucp файл 2. getty 9600 tty00
unix 2!~/user login uucp
uucico
---------------------------------------------------------------------------
Селектор порта принимает любое количество входных линий и
переключает их на меньшее количество фиксированных входных линий
компьютера. Таким образом, можно получить доступ ко всем терминалам,
не имея входной линии, которая часто бы пустовала, поскольку она
предназначена определенному лицу. Регистрационная последовательность
в точности такая же, как и для прямого подключения, кроме каких-либо
дополнительных нажатий на клавиши, применяемых для прохождения через
селектор. Обычно возврат каретки активизирует линию, чтобы получить
регистрационную подсказку.
Последняя конфигурация (на рис. 8-9) представляет собой
дистанционное подключение двух систем UNIX. Каждое терминальное
устройство DTE соединяется со своим модемом прямым кабелем. DTE-1
вызывает DTE-2 либо вручную с помощью cu, либо с помощью утилиты
uucp, использующей uucico и программу набора телефонного номера.
Самое большое отличие в том, что это подсоединение работает на
скорости 1200 бод. Это значит, что либо DTE-2 запускает 1200-бодовый
процесс getty, либо если getty имеет скорость 9600, то вам нужно
сбросить ее. Для того чтобы понизить скорость, в программе cu
требуется ввести ~%b в качестве сигнала break. Или, если вы работаете
с помощью uucp, можно поместить строку BREAK в файле L.sys, чтобы
отправить ее в вызванную систему.
Рис. 8-9. Дистанционное соединение двух систем UNIX
---------------------------------------------------------------------------
+---------+ +---------+
| | | |
| UNIX 1 | ***** _||_ ***** | UNIX 2 |
| | Прямой * * _||_ * * Прямой | |
| tty00 |------->* модем *-- || --* модем *------->| tty00 |
| | кабель * * || * * кабель | |
| | ***** || ***** | |
+---------+ +---------+
ДЕЙСТВИЯ ДЕЙСТВИЯ
1. cu -ltty00 -s9600 dir 1. getty 1200 tty00
login имя_пользователя
sh
2. uucp файл 2. getty 1200 tty00
unix 2!~/user login uucp
uucico
---------------------------------------------------------------------------
ОБЛАСТИ ДЛЯ ПЕРЕДАВАЕМЫХ ФАЙЛОВ
Когда вы пересылаете файлы между машинами, uucp придерживается
определенных протоколов и стандартов. Один из них связан с тем,
откуда и куда могут поступать файлы. Чтобы свести возможную
неразбериху к минимуму и обеспечить определенную степень защиты,
создаются защищенный и публичный каталоги для хранения стоящих в
очереди заданий и переданных файлов.
Наиболее важен каталог /usr/spool/uucp. Он содержит LOGFILE, что
дает возможность с помощью команды "tail -f LOGFILE" заглянуть в
операции передачи во время их выполнения. Транзакции uucp и mail
попадают в этот каталог. Обычно транзакция состоит из управляющего
файла (C.*) и файла данных (D.*). Когда одна машина используется в
качестве центрального узла, ее каталог uucp может заполниться очень
большим количеством файлов. Необходимо обычное сопровождение и
постоянное слежение за файлами занятости (LCK* и STST*), чтобы быть
уверенным, что все работает правильно.
Следующий интересный каталог /usr/spool/uucppublic, чаще всего
известный под названием PUBDIR (это shell-переменная). Он содержит
каталоги, названные по имени каждого пользователя, чтобы хранить
файлы, проходящие транзитом с одной машины на другую. Большинство
каталогов имеют все права доступа, что обеспечивает другим
пользователям возможность копировать файлы. Я посчитал полезным
создать переменную среды интерпретатора shell, которая содержит
маршрутный префикс моего каталога в /usr/spool/uucppublic, т.е.
P=/usr/spool/uucppublic/russ. Теперь я могу обращаться к файлам,
вводя $P/*. Это значительно сокращает ввод и упрощает пересылку
файлов в этот каталог и из него.
Переменная PUBDIR поддерживается синтаксисом uucp. В данном
примере используется синтаксис uucp:
$ uucp * remote!~/user
Эта команда копирует каждый файл текущего каталога в систему
"remote", затем обозначение ~/ превращается в префикс
/usr/spool/uucppublic. Если в этой команде user не является
каталогом, копируемые файлы получают имя user, а не копируются в
каталог с именем user. Вы должны сами создать каталог, после чего
применить к нему команду chmod 777, чтобы в него можно было
копировать. Для справки отметим, что указание ^user превращается
программой uucp в $HOME/user, а ^/user превращается uucp в
$PUBDIR/user.
Еще один способ ввода команды с помощью shell-переменных
выглядит так:
$ uucp * remote!$P
Такая команда копирует все файлы в мой каталог PUBDIR. Если я
зарегистрировался в этой системе, я могу ввести:
$ ls -al $P
или
$ cd $P
$ ls -al
для того, чтобы увидеть все скопированные файлы.
Один из моментов, за которым вы должны следить,- разрушительные
командные файлы типа "uuclean". Эти программы обычно запускаются
процессом cron или некоторыми другими фоновыми программами. Они
проходят по всем областям системы, связанным с uucp, находят файлы, к
которым не было обращений определенный период времени, и удаляют их.
Это может быть катастрофическим, если вы используете PUBDIR в
качестве временной области хранения. Вот как может выглядеть одна из
таких "очищающих" операций:
PATH=/usr/bin:/bin
export PATH
cd /usr/spool/uucp
find C. D. TM. X. XTMP -type f -mtime +7 -exec rm {} \;
cd /usr/spool/uucppublic
find . -type f -mtime +7 -exec rm {} \;
Если в вашей системе работают такие очищающие командные файлы,
имеется несколько способов сохранения файлов от неумышленного
уничтожения. Первый способ - постоянно обрабатывать все файлы
утилитой touch, чтобы они не распознавались оператором find, который
ищет старые файлы. Это можно сделать так:
$ find $P -exec touch {} \;
Утилита touch обновляет дату доступа и изменения файла. Фигурные
скобки означают, что нужно поместить в них литеральное имя,
соответствующее оператору find. Вам желательно оформить это в виде
запланированного процесса, который запускается чаще, чем программа
очистки!
Другая стратегия - проанализировать очищающую программу (или
командный файл). Она запускается суперпользователем (root)? Если нет,
то команда "chmod 000 $P" может помешать ей вести поиск имен внутри
моего каталога. Если же программа очистки запущена
суперпользователем, то, конечно, никакие ограничения прав доступа ее
не остановят. В какое время она запускается? Могу ли я приказать ей
пройти мимо меня, не заглядывая в мои файлы? Что является стартовым
каталогом для очищающего командного файла? Углубляясь в эти вопросы,
мы можем собрать много информации о том, что делает этот командный
файл и какие действия мы можем предпринять, чтобы он нам не навредил.
Может показаться, что самый легкий способ - просто удалить
программу очистки (в предположении, что вы имеете на это право). Это,
однако, не способствует поддержке свободного пространства и чистых
каталогов. К тому же если вы хотите запретить очистку каталогов,
которые очень важны для вас, то вы должны нести ответственность за их
сопровождение.
СЕТЕВАЯ БЕЗОПАСНОСТЬ
Каталог uucppublic, как мы уже видели, содержит файлы,
передаваемые транзитом между системами. Обычно все подкаталоги в
uucppublic имеют режим доступа rwxrwxrwx. Это сразу же порождает
проблему защиты, ведь кто угодно может создать, разрушить или
изменить файлы в этих каталогах.
Такие права доступа должны соблюдаться для любого каталога,
который является источником или адресатом для файлов, передаваемых с
помощью uucp. Uucp требует, чтобы все промежуточные каталоги имели
разрешение на чтение и запись для всех пользователей. Если uucp берет
из каталога исходные файлы, должны быть обеспечены права на чтение.
Если же uucp записывает файлы в этот каталог, нужны права на запись в
каталог-адресат. Если вы хотите, чтобы файлы uucp попадали прямо в
ваш регистрационный каталог, вы должны разрешить запись в ваш каталог
для всех окружающих.
Широко открытый доступ на запись позволяет доставлять файлы
прямо к вашему порогу, но вы не знаете, кому вы открываете двери.
Если вы заботитесь о безопасности, вам не пон ПРИЕМЫ П.
может записать все, что угодно, в ваше рабочее пространство. Одно из
решений - разблокировать ваш регистрационный каталог, но
заблокировать все ваши подкаталоги, кроме тех, которые нужны для
uucp. Основная проблема при этом - так установить все права доступа,
чтобы каждый файл обрабатывался надлежащим образом.
Более простое решение - держать ваши каталоги для uucp за
пределами вашего регистрационного дерева каталогов. Это избавляет вас
от проблемы безопасности, но означает, что вы должны вручную
копировать файлы после их попадания в каталог туда, где вы хотите их
фактически разместить.
ОГРАНИЧИТЕЛЬНЫЕ ФАЙЛЫ
Когда удаленная система регистрируется в центральной системе с
помощью uucp, несколько файлов в центральной системе определяют,
какие возможности имеет удаленная система. Эти конфигурационные файлы
размещаются в каталоге /usr/lib/uucp.
Первый из таких файлов называется L.cmds. Он содержит имена всех
команд центральной системы, которые можно выполнить из удаленной
системы. Если удаленная система посылает команду посредством uux, то
команда выполняется только при условии, что имя этой команды
присутствует в файле L.cmds.
Следующий файл - USERFILE - определяет, к каким каталогам
центральной системы может иметь доступ удаленная система. Вы можете
ограничить пересылки одним каталогом или разрешить доступ к любому
файлу системы. По умолчанию в файле USERFILE имеется такая запись:
uucp, /
что позволяет пользователю uucp (подразумеваемому пользовательскому
имени процесса uucico) читать и писать файлы в любом месте дерева,
начиная от корня и двигаясь вниз, т.е. фактически во всей системе.
Это открывает лазейки в системе защиты, например:
uucp central!/etc/passwd /tmp
Здесь извлекается парольный файл из другой системы. С помощью