
\chapter{Компьютер как средство обмена информацией}
\section{Что такое сети}
Компьютер в наше время редко работает в одиночестве. Как правило,
гораздо выгоднее дать компьютерам возможность обмениваться информацией
между собой. При этом, например, несколько человек могут работать с
одной и той же информацией. Кроме этого выясняется, что дорогое
переферийное оборудование, например принтер, не нужно подключать к
каждому компьютеру~--- один принтер вполне способен обслужить целую
лабораторию, а то и отдел. Если при этом каждый сотрудник может со
своего рабочего места послать файл на печать, то встать и дойти до
принтера, чтобы взять пачку бумаги, обычно проблемы не составляет.

Любое соединение компьютеров между собой, которое им позволяет
обмениватья информацией, называется сетью. В наше время сети как правило
делаются при помощи какого-нибудь кабеля (коакисального или витой пары).
Обмен информацией по инфракрасным или радио-каналам пока широкого
распространения не получил. В результате, у каждого компьютера обычно
есть два кабеля, которые соединяют его с внешним миром (и вызывают
больше всего проблем)~--- кабель питания и компьютерная сеть. К
сожалению, в русском языке задолго до появления компьютеров появилось
выражение <<включить в сеть>>, в смысле подключить к электропитанию.
Поэтому, когда возникают <<неполадки с сетью>>, далеко не всегда из
контекста ясно, о какой сети идет речь~--- о силовой или об
информационной.

Сети бывают разного размера~--- локальные (в пределах нескольких комнат)
или глобальные\footnote{Впрочем, в процессе эволюции выжила только одна
глобальная сеть~---Internet}. С точки зрения пользователя и программ,
принципиальной разницы между теми и другими нет, поскольку и в Internet
и в локальных сетях используются одни и те же протоколы обмена
информации, и, соответственно, одни и те же прикладные программы.

\section{Доступ к ресурсам удаленного компьютера}
\subsection{Telnet, rlogin и ssh}
Первое, что приходит в голову, когда заходит речь об использовании
ресурсов удаленного компьютера~--- залогиниться на него и выполнять там
программы точно так же, как мы это делаем на локальном компьютере. Благо
UNIX~--- операционная система многопользователськая. 

Это действительно так. Для этого существует несколько сетевых протоколов
(стандартизованных способов обмена информацией по сети). Каждому из этих
протоколов соответсвует программа-сервер, которая предоставляет ресурсы
своего компьютера в пользование другим, и программа-клиент, которая
позволяет этим воспользоваться. Одним из самых известных протоколов для
удаленной работы с Unix является telnet. 

Выполнив команду telnet имя-машины, мы увидем на экране приглашение
login: от той машины, а затем и Password:, после чего появится командная
строка shell. Все замечательно, только у все что мы набираем на
клавиатуре, передается по сети, и пароль в том числе. Поэтому, работать
по telnet в глобальной сети не безопасно. Кто нибудь между нами и тем
компьютером, на котором мы работаем (а tcp-соединение в Internet обычно
проходит через несколько десятков промежуточных компьютеров) может
перехватить пароль, и, воспользовавшись им, украсть наши данные или
просто воспользоваться нашей машиной для каких-нибудь своих, возможно
противозаконных целей. Поэтому системные администраторы обычно запрещают
доступ по telnet из-за пределов локальной сети.

Да и в локальной сети использовать telnet не очень удобно. Каждый раз,
когда нам нужно выполнить команду на соседней машине, приходится вводить
имя и пароль. Спрашивается, зачем? Ведь локальная машина уже проверила,
что тот кто за ней сидит, знает этот пароль. Другое дело, если локальная
машина работает под DOS или Windows. В этом случае telnet действительно
являетс самым правильным протоколом для доступа к UNIX машине в
локальной сети.

Для доступа к одной Unix-машины с другой, существует более удобный
протокол rsh, у которого есть целых два клиента~--- rlogin и rsh.

В отличие от telnet, эти клиенты сами передают удаленной машине имя
текущего пользователя\footnote{telnet тоже это умеет, но пароль все
равно придется вводить}. После этого, rlogin работает в точности как
telnet, создавая интерактивную сессию, а rsh выполняет на удаленной
машине одну указанную ему в командной строке команду, и возвращает ее
результаты своему пользователю.

Вообще говоря, это совершенно не гарантирует безопасности. Мало ли где в
мире есть пользователь имя которого совпадает с вашим. К тому же, rlogin 
и rsh позволяют указать имя на удаленной машине, отличное от вашего
имени на локальной. Поэтому, у вас есть возможность явно указать, с
каких машин и каким пользователям можно выполнять программы от вашего
имени на данной машине. Для этого нужно записать имена этих машин в файл
.rhosts в домашней директории. (там можно указать либо просто имя
машины, тогда считается, что имя пользователя должно совпадать на обоих
машинах, либо имя машины и через пробел имя пользователя).

При попытке обратиться с машины, не указанной в файле .rhosts при помощи
rlogin, у вас по-прежнему спросят пароль. А вот rsh и rcp просто
откажутся работать.

К сожалению, и rsh тоже не обеспечивает безопасной работы через Intenet.
Во-первых, имя машины, и даже ее сетевой адрес, можно подделать.
Во-вторых, все что мы набираем на клавиатуре передается по-прежнему
открытым текстом, поэтому можно подсмотреть, во-первых какие-либо важные
данные, во вторых, чей-нибудь пароль, если мы вдруг решим сменить свое
имя пользователя при помощи команды su.

Поэтому был создан протокол ssh. Он очень похож на rsh, но отличается
тем, что вся информация, передающаяся по сети, шифруется, а в начале
работы проверяется <<электронная подпись>> машины, чтобы убедиться, что
адрес не был подделан. ssh как-правило не использует файл .rhosts. При
работе через Internet, надежнее спросить пароль, тем более, что
шифрование надежно защитит его от прослушивания. Поэтому, в дистрибутив
ssh входит программка ssh-askpass, которая позволяет ввести пароль один
раз за сессию. В ней приняты специальные меры, которые защищают этот
пароль от подсматривания другими пользователями той же машины.

Клиент ssh объединяет в себе функции rlogin и rsh. Если его запустить
без указания команды в командной строке, то он создает интерактивную
сессию. Если указать команду, то он выполняет ее и заканчивает работу. 

Было бы обидно, если бы мощными средствами защиты, встроенными в ssh,
нельзя было бы воспользоваться при работе с другими протоколами. Поэтому
ssh обеспечивает так называемый port-forwarding, т.е. принимает запросы,
предназначенные для какого-нибудь другого протокола, как если бы он был
сервером этого протокола на локальной машине, и передает их по своему
зашифрованному каналу на другую машину настоящему серверу.

\subsection{X window в сети}

Все способы, которые мы рассматривали в предыдущем разделе, касались
запуска на удаленной машине текстовых программ. А как же быть с
графическими? Оказывается~--- еще проще. Сетевые возможности встроены в
систему X-Window изначально.

При запуске каждая программа под X смотрит в переменную environment
DISPLAY, и определяет по ней, на какой дисплей ей выводить свои окошки.

Если имя дисплея содержит имя машины, то окошки появятся на той машине,
и ввод с клавиатуры будет тоже восприниматься оттуда.

\subsection{Можно ли удаленно запустить программу под Windows}
\subsection{ftp, rcp и scp}
\subsection{Как работать с сетевыми дисками и принтерами}
\subsection{Наиболее распространенные типы сетей}
\subsection{Безопасность в сетях и понятие о правах доступа}
\section{Электронная почта}
\subsection{Как послать и прочитать письмо}
\subsection{Стандарт MIME или как послать картинку}
\subsection{Электронная подпись и криптография}
\subsection{Как ходит почта}
\section{так широко разрекламированный Internet}
\subsection{Анонимный ftp}
\subsection{Всемирная паутина} 
\subsection{Новости USENET}
\subsection{прочие IP-службы}
\section{Модемная связь}
\subsection{Чем модем отличается от сетевой платы}
\subsection{Терминальные программы}
\subsection{Подключение к Internet через модем}
\subsection{BBS}
\subsection{FIDO}
