diff options
Diffstat (limited to 'documentation/content/ru/books/handbook/network-servers/_index.adoc')
| -rw-r--r-- | documentation/content/ru/books/handbook/network-servers/_index.adoc | 2959 |
1 files changed, 1445 insertions, 1514 deletions
diff --git a/documentation/content/ru/books/handbook/network-servers/_index.adoc b/documentation/content/ru/books/handbook/network-servers/_index.adoc index 1ff6cd167e..3ea093d18f 100644 --- a/documentation/content/ru/books/handbook/network-servers/_index.adoc +++ b/documentation/content/ru/books/handbook/network-servers/_index.adoc @@ -1,12 +1,14 @@ --- -title: Глава 25. Сетевые серверы -part: Часть IV. Сетевые коммуникации -prev: books/handbook/mail +description: 'Эта глава рассказывает о некоторых из наиболее часто используемых сетевых служб в системах UNIX' next: books/handbook/firewalls -showBookMenu: true -weight: 30 params: - path: "/books/handbook/network-servers/" + path: /books/handbook/network-servers/ +part: 'IV. Сетевое взаимодействие' +prev: books/handbook/mail +showBookMenu: true +tags: ["network", "servers", "inetd", "NFS", "NIS", "LDAP", "DHCP", "DNS", "Apache HTTP", "FTP", "Samba", "NTP", "iSCSI"] +title: 'Глава 32. Сетевые серверы' +weight: 37 --- [[network-servers]] @@ -17,7 +19,7 @@ params: :icons: font :sectnums: :sectnumlevels: 6 -:sectnumoffset: 25 +:sectnumoffset: 32 :partnums: :source-highlighter: rouge :experimental: @@ -48,111 +50,82 @@ include::../../../../../shared/asciidoctor.adoc[] endif::[] [[network-servers-synopsis]] -== Краткий обзор +== Обзор -Эта глава посвящена некоторым наиболее часто используемым сетевым службам систем UNIX(R). Мы опишем, как установить, настроить, протестировать и поддерживать многие различные типы сетевых сервисов. Для облегчения вашей работы в главу включены примеры конфигурационных файлов. +В этой главе рассматриваются некоторые из наиболее часто используемых сетевых служб в системах UNIX(R). Сюда входит установка, настройка, тестирование и поддержка различных типов сетевых служб. В этой главе приведены примеры конфигурационных файлов для справки. -После чтения этой главы вы будете знать: +К концу этой главы читатели будут знать: -* Как управлять даемоном inetd. -* Как настроить сетевую файловую систему. -* Как настроить сетевой сервер информации для совместного использования учётных записей пользователей. -* Как настроить автоматическое конфигурирование сетевых параметров при помощи DHCP. -* Как настроить сервер имён. -* Как настроить Apache HTTP сервер. -* Как настроить файловый и сервер печати для Windows(R) клиентов с использованием Samba. -* Как синхронизировать дату и время, а также настроить сервер времени с протоколом NTP. -* Как настроить стандартный демон протоколирования, `syslogd`, принимать сообщения от удалённых хостов. +* Как управлять демоном inetd. +* Как настроить Network File System (NFS). +* Как настроить сервер сетевой информации (NIS) для централизации и совместного использования учетных записей пользователей. +* Как настроить FreeBSD в качестве сервера или клиента LDAP +* Как настроить автоматические параметры сети с использованием DHCP. +* Как настроить сервер доменных имен (DNS). +* Как настроить веб-сервер Apache HTTP. +* Как настроить сервер протокола передачи файлов (FTP). +* Как настроить файловый и печатный сервер для клиентов Windows(R) с использованием Samba. +* Как синхронизировать время и дату, а также настроить сервер времени с использованием протокола Network Time Protocol (NTP). +* Как настроить iSCSI. -Перед чтением этой главы вы должны: +Эта глава предполагает базовые знания о: -* Понимать основы работы скриптов [.filename]#/etc/rc#. -* Свободно владеть основными сетевыми терминами. -* Знать как устанавливать дополнительные программы сторонних разработчиков (crossref:ports[ports, Установка приложений. порты и пакеты]). +* Скриптах [.filename]#/etc/rc#. +* Сетевой терминологии. +* Установке дополнительного стороннего программного обеспечения (crossref:ports[ports,Установка приложений: Пакеты и Порты]). [[network-inetd]] -== "Супер-сервер"inetd +== Суперсервер inetd -[[network-inetd-overview]] -=== Обзор +Демон man:inetd[8] иногда называют суперсервером, потому что он управляет соединениями для многих служб. Вместо запуска множества приложений, достаточно запустить только службу inetd. Когда поступает соединение для службы, управляемой inetd, он определяет, какому программе предназначено соединение, создает процесс для этой программы и делегирует программе сокет. Использование inetd для служб, которые не используются интенсивно, может снизить нагрузку на систему по сравнению с запуском каждого демона отдельно в автономном режиме. -man:inetd[8] иногда называют также "супер-сервером Интернет", потому что он управляет соединениями к многим сервисам. Когда inetd принимает соединение, он определяет, для какой программы предназначено соединение, запускает соответствующий процесс и предоставляет ему сокет, ссылка на который передается процессу в качестве стандартных устройств ввода, вывода и сообщения об ошибках. Для не слишком нагруженных серверов запуск через inetd может уменьшить общую нагрузку на систему по сравнению с запуском каждого даемона индивидуально в выделенном режиме. +Прежде всего, inetd используется для запуска других демонов, но несколько простых протоколов обрабатываются внутри него, таких как chargen, auth, time, echo, discard и daytime. -В первую очередь inetd используется для вызова других даемонов, но несколько простых протоколов, таких, как chargen, auth и daytime, обслуживаются непосредственно. +Этот раздел охватывает основы настройки inetd. -Этот раздел посвящен основам настройки inetd посредством его параметров командной строки и его конфигурационного файла, [.filename]#/etc/inetd.conf#. +[[network-inetd-conf]] +=== Файл конфигурации -[[network-inetd-settings]] -=== Настройки +Настройка inetd выполняется путем редактирования [.filename]#/etc/inetd.conf#. Каждая строка этого файла конфигурации представляет приложение, которое может быть запущено inetd. По умолчанию каждая строка начинается с комментария (`+#+`), что означает, что inetd не ожидает подключений для каких-либо приложений. Чтобы настроить inetd на ожидание подключений для приложения, удалите `+#+` в начале соответствующей строки. -inetd инициализируется посредством системы man:rc[8]. Параметр `inetd_enable` по умолчанию установлен в `NO`, однако может быть включен утилитой sysinstall в процессе установки. Указание +После сохранения изменений настройте inetd для запуска при загрузке системы, отредактировав [.filename]#/etc/rc.conf#: [.programlisting] .... inetd_enable="YES" .... -или +Чтобы запустить inetd сейчас, чтобы он начал прослушивать настроенную службу, введите: -[.programlisting] -.... -inetd_enable="NO" -.... - -в файле [.filename]#/etc/rc.conf# разрешит или запретит запуск inetd во время загрузки. Команда - -[.programlisting] +[source, shell] .... -/etc/rc.d/inetd rcvar +# service inetd start .... -покажет текущие установки переменных, относящихся к inetd. - -Кроме того, через `inetd_flags` даемону inetd могут быть переданы различные параметры командной строки. - -[[network-inetd-cmdline]] -=== Параметры командной строки - -Как и большинство даемонов, для inetd существует большое количество разнообразных опций, изменяющих его поведение. Полный из список таков: - -`inetd [-d] [-l] [-w] [-W] [-c maximum] [-C rate] [-a address | hostname] [-p filename] [-R rate] [-s maximum] [configuration file]` - -Опции могут передаваться inetd при помощи переменной `inetd_flags` файла [.filename]#/etc/rc.conf#. По умолчанию переменная `inetd_flags` установлена в `-wW -C 60`, то есть включает обработку TCP wrapping и запрещает обращаться с одного IP-адреса к сервису более чем 60 раз в минуту. - -Несмотря на то, что ниже по тексту мы упоминаем опции ограничения частоты обращения к службам (rate-limiting), в большинстве случаев начинающим пользователям нет необходимости менять эти параметры. Эти опции могут стать полезными в том случае, если вы обнаружите, что ваша система принимает чрезмерное количество соединений. Полный список опций можно найти на странице справочника man:inetd[8]. - --c maximum:: -Определение максимального числа одновременных запусков каждой службы; по умолчание не ограничено. Может быть переопределено индивидуально для каждой службы при помощи параметра `max-child`. - --C rate:: -Определение по умолчанию максимального количества раз, которое служба может быть вызвана с одного IP-адреса в минуту; по умолчанию не ограничено. Может быть переопределено для каждой службы параметром `max-connections-per-ip-per-minute`. - --R rate:: -Определяет максимальное количество раз, которое служба может быть вызвана в минуту; по умолчанию 256. Частота, равная 0, не ограничивает число вызовов. - --s maximum:: -Задает максимальное количество процессов, одновременно обслуживающих один сервис для одного IP-адреса; по умолчанию не ограничено. Может переопределяться для каждой службы параметром `max-child-per-ip`. - -[[network-inetd-conf]] -=== [.filename]#inetd.conf# - -Настройка inetd производится через файл [.filename]#/etc/inetd.conf#. - -Если в файле [.filename]#/etc/inetd.conf# делались изменения, то inetd можно заставить считать его конфигурационный файл повторно посредством команды +После запуска inetd необходимо уведомлять его о каждом изменении в файле [.filename]#/etc/inetd.conf#: [[network-inetd-reread]] .Перезагрузка конфигурационного файла inetd [example] ==== -[source,shell] +[source, shell] .... -# /etc/rc.d/inetd reload +# service inetd reload .... ==== -В каждой строке конфигурационного файла описывается отдельный даемон. Комментариям в файле предшествует знак "#". Строки в файле [.filename]##/etc/inetd.conf## имеют такой формат: +Обычно запись по умолчанию для приложения не требует редактирования, кроме удаления `+#+`. В некоторых ситуациях может быть целесообразно изменить запись по умолчанию. + +В качестве примера, это стандартная запись для man:ftpd[8] по IPv4: + +[.programlisting] +.... +ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l +.... + +Семь столбцов в записи следующие: [.programlisting] .... @@ -165,33 +138,28 @@ server-program server-program-arguments .... -Пример записи для даемона man:ftpd[8], использующего IPv4: - -[.programlisting] -.... -ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -.... +где: service-name:: -Это имя сервиса, предоставляемого конкретным даемоном. Оно должно соответствовать сервису, указанному в файле [.filename]#/etc/services#. Здесь определяется, какой порт должен обслуживать inetd. При создании нового сервиса он должен помещаться сначала в файл [.filename]#/etc/services#. +Имя службы демона для запуска. Оно должно соответствовать службе, указанной в [.filename]#/etc/services#. Это определяет, на каком порту inetd ожидает входящие соединения для этой службы. При использовании пользовательской службы она сначала должна быть добавлена в [.filename]#/etc/services#. socket-type:: -`stream`, `dgram`, `raw` либо `seqpacket`. `stream` должен использоваться для ориентированных на соединение даемонов TCP, когда как `dgram` используется для даемонов, использующих транспортный протокол UDP. +Либо `stream`, `dgram`, `raw`, или `seqpacket`. Используйте `stream` для TCP-соединений и `dgram` для UDP-сервисов. protocol:: -Одно из следующих: +Используйте одно из следующих названий протоколов: + - [.informaltable] [cols="1,1", frame="none", options="header"] |=== -| Протокол -| Описание +| Имя протокола +| Объяснение -|tcp, tcp4 + +|tcp или tcp4 |TCP IPv4 -|udp, udp4 +|udp или udp4 |UDP IPv4 |tcp6 @@ -201,149 +169,134 @@ protocol:: |UDP IPv6 |tcp46 -|TCP как для IPv4, так и для v6 +|Как TCP IPv4, так и IPv6 |udp46 -|UDP как для IPv4, так и для v6 +|Как UDP IPv4, так и IPv6 |=== + {wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]:: -`wait|nowait` определяет, может ли даемон, вызванный из inetd, работать с собственным сокетом, или нет. Сокеты типа `dgram` должны использовать параметр `wait`, когда как даемоны с потоковыми сокетами, которые обычно многопоточны, должны использовать `nowait`. `wait` обычно передает много сокетов одному даемону, когда как `nowait` порождает даемон для каждого нового сокета. -+ -Максимальное число порожденных даемонов, которых может создать inetd, может быть задано параметром `max-child`. Если нужно ограничение в десять экземпляров некоторого даемона, то после параметра `nowait` нужно задать `/10`. При задании `/0` ограничения на количество экземпляров снимаются. +In this field, `wait` or `nowait` must be specified. `max-child`, `max-connections-per-ip-per-minute` and `max-child-per-ip` are optional. + -Кроме `max-child`, могут быть задействованы два других параметра, ограничивающих максимальное число соединений от одного источника. `max-connections-per-ip-per-minute` ограничивает количество соединений от одного IP-адреса в течение минуты, так что значение, равное десяти, будет ограничивать любой заданный IP-адрес на выполнение десяти попыток подключения к некоторому сервису в минуту. Параметр `max-child-per-ip` ограничивает количество дочерних процессов, которые могут быть одновременно задействованы на обслуживание одного IP-адреса. Эти опции полезны для предотвращения намеренного или ненамеренного расходования ресурсов и атак типа Denial of Service (DoS) на машину. +`wait|nowait` указывает, способна ли служба обрабатывать свой собственный сокет. Типы сокетов `dgram` должны использовать `wait`, в то время как для демонов `stream`, которые обычно многопоточные, следует использовать `nowait`. `wait` обычно передаёт несколько сокетов одному демону, тогда как `nowait` создаёт дочерний демон для каждого нового сокета. + -В этом поле одно из значений `wait` или `nowait` обязательны. `max-child`, `max-connections-per-ip-per-minute` и `max-child-per-ip` опциональны. +Максимальное количество дочерних демонов, которые может породить inetd, задается параметром `max-child`. Например, чтобы ограничить десять экземпляров демона, укажите `/10` после `nowait`. Указание `/0` позволяет создавать неограниченное количество дочерних процессов. + -Многопоточный даемон типа stream без ограничений `max-child`, `max-connections-per-ip-per-minute` или `max-child-per-ip` будет определен просто как `nowait`. +`max-connections-per-ip-per-minute` ограничивает количество соединений с любого конкретного IP-адреса в минуту. Как только лимит достигнут, последующие соединения с этого IP-адреса будут отбрасываться до конца минуты. Например, значение `/10` ограничивает любой конкретный IP-адрес десятью попытками соединения в минуту. `max-child-per-ip` ограничивает количество дочерних процессов, которые могут быть запущены от имени любого отдельного IP-адреса в любой момент времени. Эти опции позволяют ограничить чрезмерное потребление ресурсов и помогают предотвратить атаки типа "Отказ в обслуживании". + -Тот же самый даемон с ограничением в максимум десять даемонов будет определен так: `nowait/10`. -+ -Та же конфигурация с ограничением в двадцать соединений на IP-адрес в минуту и общим ограничением в максимум десять порожденных даемонов выглядит так: `nowait/10/20`. -+ -Эти параметры, используемые все со значениями по умолчанию даемоном man:fingerd[8], имеют такой вид: +Пример можно увидеть в настройках по умолчанию для man:fingerd[8]: + [.programlisting] .... -finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s +finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -k -s .... -+ -Наконец, пример, описывающий ограничение на 100 даемонов в целом, при этом не более чем по 5 на один IP-адрес, будет выглядеть так: `nowait/100/0/5`. user:: -Это имя пользователя, под которым должен работать соответствующий даемон. Чаще всего даемоны работают как пользователь `root`. Для обеспечения безопасности некоторые серверы запускаются как пользователь `daemon` или как пользователь с минимальными правами `nobody`. +Имя пользователя, от имени которого будет работать демон. Демоны обычно работают от имени `root`, `daemon` или `nobody`. server-program:: -Полный маршрут к даемону, который будет выполняться при установлении соединения. Если даемон является сервисом, предоставляемым самим inetd, то нужно задать ключевое слово `internal`. +Полный путь к демону. Если демон является службой, предоставляемой inetd внутренне, используйте `internal`. server-program-arguments:: -Этот параметр работает вместе с параметром `server-program`, задавая параметры, начиная с `argv[0]`, передаваемые даемону при запуске. Если в командной строке задано `mydaemon -d`, то `mydaemon -d` будет являться значением для `server-program-arguments`. И снова, если даемон является внутренней службой, то здесь нужно использовать `internal`. +Используется для указания любых аргументов командной строки, передаваемых демону при его запуске. Если демон является внутренней службой, используйте `internal`. -[[network-inetd-security]] -=== Безопасность +[[network-inetd-cmdline]] +=== Параметры командной строки -В зависимости от выбранных при установке параметров, многие из служб inetd могут оказаться по умолчанию включенными. Если нет особой нужды в некотором даемоне, подумайте, не стоит ли его выключить? Поместите знак "#" перед ненужным даемоном в [.filename]##/etc/inetd.conf## и <<network-inetd-reread,пошлите сигнал для inetd>>. Некоторые даемоны, такие, как fingerd, вообще нежелательны, потому что они дают информацию, которая может оказаться полезной атакующему. +Как и большинство серверных демонов, inetd имеет ряд опций, которые можно использовать для изменения его поведения. По умолчанию inetd запускается с параметрами `-wW -C 60`. Эти опции включают TCP wrappers для всех сервисов, включая внутренние, и предотвращают запросы любого IP-адреса к любому сервису чаще 60 раз в минуту. -Некоторые даемоны не заботятся о безопасности и имеют большие тайм-ауты для соединений или вообще их не имеют. Это позволяет атакующему неспешно устанавливать соединения к конкретному даемону, истощая имеющиеся ресурсы. Может оказаться полезным задать для некоторых даемонов ограничения `max-connections-per-ip-per-minute`, `max-child` и `max-child-per-ip`, особенно если вы обнаружите слишком большое число соединений. +Для изменения параметров по умолчанию, передаваемых inetd, добавьте запись `inetd_flags` в файл [.filename]#/etc/rc.conf#. Если inetd уже запущен, перезапустите его командой `service inetd restart`. -По умолчанию механизм TCP wrapping включен. Обратитесь к справочной странице по man:hosts_access[5] для получения более подробной информации о задании ограничений TCP для различных даемонов, запускаемых посредством inetd. +Доступные варианты ограничения скорости: -[[network-inetd-misc]] -=== Разное +-c maximum:: +Укажите максимальное количество одновременных вызовов каждой службы по умолчанию, где по умолчанию значение не ограничено. Может быть переопределено для каждой службы отдельно с помощью параметра `max-child` в [.filename]#/etc/inetd.conf#. + +-C rate:: +Укажите максимальное количество вызовов службы с одного IP-адреса в минуту по умолчанию. Это значение может быть переопределено для отдельной службы с помощью параметра `max-connections-per-ip-per-minute` в файле [.filename]#/etc/inetd.conf#. -daytime, time, echo, discard, chargen и auth все являются услугами, предоставляемыми самим inetd. +-R rate:: +Укажите максимальное количество вызовов службы в течение одной минуты, где значение по умолчанию — `256`. Значение `0` позволяет неограниченное количество. -Сервис auth предоставляет идентификационные сетевые услуги и поддается настройке; прочие сервисы ненастраиваемы. +-s maximum:: +Укажите максимальное количество раз, которое служба может быть вызвана с одного IP-адреса одновременно, по умолчанию значение не ограничено. Может быть переопределено для каждой службы отдельно с помощью параметра `max-child-per-ip` в [.filename]#/etc/inetd.conf#. -Обратитесь к справочной странице по man:inetd[8] для получения более подробной информации. +Доступны дополнительные параметры. Полный список параметров смотрите в man:inetd[8]. -[[network-nfs]] -== Network File System (NFS) +[[network-inetd-security]] +=== Безопасность -Кроме поддержки многих прочих типов файловых систем, во FreeBSD встроена поддержка сетевой файловой системы (Network File System), известной как NFS. NFS позволяет системе использовать каталоги и файлы совместно с другими машинами, посредством сети. Посредством NFS пользователи и программы могут получать доступ к файлам на удалённых системах точно так же, как если бы это были файлы на собственных дисках. +Многие демоны, которыми может управлять inetd, не обладают достаточной защитой. Некоторые демоны, такие как fingerd, могут предоставлять информацию, полезную для злоумышленника. Включайте только необходимые службы и отслеживайте систему на предмет чрезмерных попыток подключения. Параметры `max-connections-per-ip-per-minute`, `max-child` и `max-child-per-ip` могут быть использованы для ограничения подобных атак. -Вот некоторые из наиболее заметных преимуществ, которые даёт использование NFS: +По умолчанию TCP wrappers включены. Дополнительную информацию о наложении TCP-ограничений на различные демоны, запускаемые через inetd, можно найти в man:hosts_access[5]. -* Отдельно взятые рабочие станции используют меньше собственного дискового пространства, так как совместно используемые данные могут храниться на одной отдельной машине и быть доступными для других машин в сети. -* Пользователям не нужно иметь домашние каталоги, отдельные для каждой машины в вашей сети. Домашние каталоги могут располагаться на сервере NFS и их можно сделать доступными отовсюду в сети. -* Устройства хранения информации, такие, как дискеты, приводы CD-ROM и устройства Zip(R), могут использоваться другими машинами в сети. Это может привести к уменьшению переносимых устройств хранения информации в сети. +[[network-nfs]] +== Сетевая файловая система (NFS — Network File System) + +FreeBSD поддерживает Network File System (NFS), что позволяет серверу делиться каталогами и файлами с клиентами по сети. С помощью NFS пользователи и программы могут обращаться к файлам на удалённых системах так, как если бы они хранились локально. + +NFS имеет множество практических применений. Некоторые из наиболее распространенных вариантов использования включают: -=== Как работает NFS +* Данные, которые в противном случае дублировались бы на каждом клиенте, могут храниться в одном месте и быть доступными для клиентов в сети. +* Несколько клиентов могут нуждаться в доступе к каталогу [.filename]#/usr/ports/distfiles#. Общий доступ к этому каталогу позволяет быстро получить исходные файлы без необходимости загрузки их на каждый клиент. +* На крупных сетях часто удобнее настроить центральный NFS-сервер, на котором хранятся все домашние каталоги пользователей. Пользователи могут входить в систему с любого клиента в сети и получать доступ к своим домашним каталогам. +* Управление экспортом NFS упрощено. Например, существует только одна файловая система, в которой необходимо настраивать политики безопасности или резервного копирования. +* Съемные устройства хранения данных могут использоваться другими компьютерами в сети. Это уменьшает количество устройств в сети и обеспечивает централизованное управление их безопасностью. Часто бывает удобнее устанавливать программное обеспечение на несколько компьютеров с централизованного носителя для установки. -NFS строится по крайней мере из двух основных частей: сервера и одного или большего количества клиентов. Клиент обращается к данным, находящимся на сервере, в режиме удалённого доступа. Для того, чтобы это нормально функционировало, нужно настроить и запустить несколько процессов. +NFS состоит из сервера и одного или нескольких клиентов. Клиент удалённо получает доступ к данным, хранящимся на машине сервера. Для корректной работы необходимо настроить и запустить несколько процессов. -На сервере работают следующие даемоны: +Эти демоны должны быть запущены на сервере: [.informaltable] [cols="1,1", frame="none", options="header"] |=== -| Даемон +| Демон | Описание + |nfsd -|Даемон NFS, обслуживающий запросы от клиентов NFS. +|Демон NFS, обслуживающий запросы от клиентов NFS. |mountd -|Даемон монтирования NFS, который выполняет запросы, передаваемые ему от man:nfsd[8]. +|Демон монтирования NFS, который выполняет запросы, полученные от nfsd. |rpcbind -|Этот даемон позволяет клиентам NFS определить порт, используемый сервером NFS. +| Этот демон позволяет клиентам NFS определять, какой порт использует сервер NFS. |=== -Клиент может запустить также даемон, называемый nfsiod. nfsiod обслуживает запросы, поступающие от сервера от сервера NFS. Он необязателен, увеличивает производительность, однако для нормальной и правильной работы не требуется. Для получения дополнительной информации обратитесь к разделу справочной системы о man:nfsiod[8]. +Запуск man:nfsiod[8] на клиенте может повысить производительность, но не является обязательным. [[network-configuring-nfs]] -=== Настройка NFS - -Настройка NFS является достаточно незамысловатым процессом. Все процессы, которые должны быть запущены, могут быть запущены во время загрузки посредством нескольких модификаций в вашем файле [.filename]#/etc/rc.conf#. - -Проверьте, что на NFS-сервере в файле [.filename]#/etc/rc.conf# имеются такие строки: +=== Настройка сервера -[.programlisting] -.... -rpcbind_enable="YES" -nfs_server_enable="YES" -nfs_server_flags="-u -t -n 4" -mountd_flags="-r" -.... +Файловые системы, которые сервер NFS будет предоставлять в общий доступ, указаны в [.filename]#/etc/exports#. Каждая строка в этом файле определяет файловую систему для экспорта, клиентов, которые имеют доступ к этой файловой системе, и любые параметры доступа. При добавлении записей в этот файл каждая экспортируемая файловая система, её свойства и разрешённые хосты должны быть указаны в одной строке. Если в записи не указаны клиенты, то любой клиент в сети может подключить эту файловую систему. -mountd запускается автоматически, если включена функция сервера NFS. +Следующие записи в [.filename]#/etc/exports# демонстрируют, как экспортировать файловые системы. Примеры могут быть изменены в соответствии с файловыми системами и именами клиентов в сети читателя. В этом файле можно использовать множество опций, но здесь упомянуты лишь некоторые. Полный список опций смотрите в man:exports[5]. -На клиенте убедитесь, что в файле [.filename]#/etc/rc.conf# присутствует такой параметр: +В этом примере показано, как экспортировать [.filename]#/cdrom# на три хоста с именами _alpha_, _bravo_ и _charlie_: [.programlisting] .... -nfs_client_enable="YES" +/cdrom -ro alpha bravo charlie .... -Файл [.filename]#/etc/exports# определяет, какие файловые системы на вашем сервере NFS будут экспортироваться (иногда их называют "совместно используемыми"). Каждая строка в [.filename]#/etc/exports# задаёт файловую систему, которая будет экспортироваться и какие машины будут иметь к ней доступ. Кроме машин, имеющих доступ, могут задаваться другие параметры, влияющие на характеристики доступа. Имеется полный набор параметров, которые можно использовать, но здесь пойдёт речь лишь о некоторых из них. Описания остальных параметров можно найти на страницах справочной системы по man:exports[5]. - -Вот несколько примерных строк из файла [.filename]#/etc/exports#: - -В следующих примерах даётся общая идея того, как экспортировать файловые системы, хотя конкретные параметры могут отличаться в зависимости от ваших условий и конфигурации сети. К примеру, чтобы экспортировать каталог [.filename]#/cdrom# для трёх машин, находящихся в том же самом домене, что и сервер (поэтому отсутствует доменное имя для каждой машины) или для которых имеются записи в файле [.filename]#/etc/hosts#. Флаг `-ro` указывает на использование экспортируемой файловой системы в режиме только чтения. С этим флагом удалённая система не сможет никоим образом изменить экспортируемую файловую систему. - -[.programlisting] -.... -/cdrom -ro host1 host2 host3 -.... +Флаг `-ro` делает файловую систему доступной только для чтения, предотвращая внесение клиентами изменений в экспортированную файловую систему. В этом примере предполагается, что имена хостов находятся либо в DNS, либо в [.filename]#/etc/hosts#. Обратитесь к man:hosts[5], если в сети нет DNS-сервера. -В следующей строке экспортируется файловая система [.filename]#/home#, которая становится доступной трем хостам, указанным по их IP-адресам. Это полезно, если у вас есть собственная сеть без настроенного сервера DNS. Как вариант, файл [.filename]#/etc/hosts# может содержать внутренние имена хостов; пожалуйста, обратитесь к справочную систему по man:hosts[5] для получения дополнительной информации. Флаг `-alldirs` позволяет рассматривать подкаталоги в качестве точек монтирования. Другими словами, это не монтирование подкаталогов, но разрешение клиентам монтировать только каталоги, которые им требуются или нужны. +Следующий пример экспортирует [.filename]#/home# трём клиентам по IP-адресу. Это может быть полезно для сетей без DNS или записей в [.filename]#/etc/hosts#. Флаг `-alldirs` позволяет подкаталогам быть точками монтирования. Другими словами, он не будет автоматически монтировать подкаталоги, но разрешит клиенту монтировать необходимые каталоги по мере надобности. [.programlisting] .... -/home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4 +/usr/home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4 .... -В строке, приведённой ниже, файловая система [.filename]#/a# экспортируется таким образом, что она доступна двум клиентам из других доменов. Параметр `-maproot=root` позволяет пользователю `root` удалённой системы осуществлять запись на экспортируемую файловую систему как пользователь `root`. Если параметр `-maproot=root` не задан, то даже если пользователь имеет права доступа `root` на удалённой системе, он не сможет модифицировать файлы на экспортированной файловой системе. +Следующий пример экспортирует [.filename]#/a#, чтобы два клиента из разных доменов могли получить доступ к этой файловой системе. Параметр `-maproot=root` позволяет пользователю `root` на удалённой системе записывать данные в экспортированную файловую систему как `root`. Если параметр `-maproot=root` не указан, пользователь `root` на клиенте будет отображён на учётную запись `nobody` на сервере и будет ограничен правами доступа, определёнными для `nobody`. [.programlisting] .... /a -maproot=root host.example.com box.example.org .... -Для того, чтобы клиент смог обратиться к экспортированной файловой системе, он должен иметь права сделать это. Проверьте, что клиент указан в вашем файле [.filename]#/etc/exports#. - -В файле [.filename]#/etc/exports# каждая строка содержит информацию об экспортировании для отдельной файловой системы для отдельно взятого хоста. Удалённый хост может быть задан только один раз для каждой файловой системы, и может иметь только одну запись, используемую по умолчанию, для каждой локальной файловой системы. К примеру, предположим, что [.filename]#/usr# является отдельной файловой системой. Следующий [.filename]#/etc/exports# будет некорректен: +Клиент может быть указан только один раз для каждой файловой системы. Например, если [.filename]#/usr# представляет собой одну файловую систему, следующие записи будут недопустимыми, так как обе указывают на один и тот же узел: [.programlisting] .... @@ -352,269 +305,218 @@ nfs_client_enable="YES" /usr/ports client .... -Одна файловая система, [.filename]#/usr#, имеет две строки, задающие экспортирование для одного и того же хоста, `client`. Правильный формат в этом случае таков: +Правильный формат для данной ситуации — использовать одну запись: [.programlisting] .... /usr/src /usr/ports client .... -Свойства отдельной файловой системы, экспортируемой некоторому хосту, должны задаваться в одной строке. Строки без указания клиента воспринимаются как отдельный хост. Это ограничивает то, как вы можете экспортировать файловые системы, но для большинства это не проблема. - -Ниже приведён пример правильного списка экспортирования, где [.filename]#/usr# и [.filename]#/exports# являются локальными файловыми системами: +Ниже приведён пример корректного списка экспорта, где [.filename]#/usr# и [.filename]#/exports# являются локальными файловыми системами: [.programlisting] .... -# Экспортируем src и ports для client01 и client02, но -# только client01 имеет права пользователя root на них +# Export src and ports to client01 and client02, but only +# client01 has root privileges on it /usr/src /usr/ports -maproot=root client01 -/usr/src /usr/ports client02 -# Клиентские машины имеют пользователя root и могут монтировать всё в -# каталоге /exports. Кто угодно может монтировать /exports/obj в режиме чтения +/usr/src /usr/ports client02 +# The client machines have root and can mount anywhere +# on /exports. Anyone in the world can mount /exports/obj read-only /exports -alldirs -maproot=root client01 client02 /exports/obj -ro .... -Даемон mountd должен быть проинформирован об изменении файла [.filename]#/etc/exports#, чтобы изменения вступили в силу. Это может быть достигнуто посылкой сигнала HUP процессу `mountd`: +Чтобы включить процессы, необходимые для работы сервера NFS при загрузке, добавьте следующие параметры в [.filename]#/etc/rc.conf#: + +[.programlisting] +.... +rpcbind_enable="YES" +nfs_server_enable="YES" +mountd_enable="YES" +.... + +Сервер можно запустить, выполнив следующую команду: -[source,shell] +[source, shell] .... -# kill -HUP `cat /var/run/mountd.pid` +# service nfsd start .... -или вызовом скрипта `mountd` подсистемы man:rc[8] с соответствующим параметром: +Всякий раз, когда запускается сервер NFS, также автоматически запускается mountd. Однако mountd читает [.filename]#/etc/exports# только при запуске. Чтобы последующие изменения в [.filename]#/etc/exports# вступили в силу немедленно, заставьте mountd перечитать его: -[source,shell] +[source, shell] .... -# /etc/rc.d/mountd onereload +# service mountd reload .... -За подробной информацией о работе скриптов rc.d обращайтесь к crossref:config[configtuning-rcd,Использование rc во FreeBSD 5.X и последующих версиях]. +Обратитесь к man:zfs-share[8] для описания экспорта наборов данных ZFS через NFS с использованием свойства ZFS `sharenfs` вместо файла man:exports[5]. -Как вариант, при перезагрузке FreeBSD всё настроится правильно. Хотя выполнять перезагрузку вовсе не обязательно. Выполнение следующих команд пользователем `root` запустит всё, что нужно. +Обратитесь к man:nfsv4[4] для описания настройки NFS версии 4. -На сервере NFS: +=== Настройка клиента -[source,shell] +Чтобы включить клиенты NFS, установите эту опцию в файле [.filename]#/etc/rc.conf# каждого клиента: + +[.programlisting] .... -# rpcbind -# nfsd -u -t -n 4 -# mountd -r +nfs_client_enable="YES" .... -На клиенте NFS: +Затем выполните эту команду на каждом клиенте NFS: -[source,shell] +[source, shell] .... -# nfsiod -n 4 +# service nfsclient start .... -Теперь всё должно быть готово к реальному монтированию удалённой файловой системы. В приводимых примерах сервер будет носить имя `server`, а клиент будет носить имя `client`. Если вы только хотите временно смонтировать удалённую файловую систему, или всего лишь протестировать ваши настройки, то просто запустите команды, подобные приводимым здесь, работая как пользователь `root` на клиентской машине: +Клиент теперь имеет всё необходимое для монтирования удалённой файловой системы. В этих примерах имя сервера — `server`, а имя клиента — `client`. Чтобы смонтировать [.filename]#/home# с сервера `server` в точку монтирования [.filename]#/mnt# на клиенте `client`: -[source,shell] +[source, shell] .... # mount server:/home /mnt .... -По этой команде файловая система [.filename]#/home# на сервере будет смонтирована в каталог [.filename]#/mnt# на клиенте. Если всё настроено правильно, вы сможете войти в каталог [.filename]#/mnt# на клиенте и увидеть файлы, находящиеся на сервере. +Файлы и каталоги в [.filename]#/home# теперь будут доступны на `client`, в директории [.filename]#/mnt#. -Если вы хотите автоматически монтировать удалённую файловую систему при каждой загрузке компьютера, добавьте файловую систему в [.filename]#/etc/fstab#. Вот пример: +Для монтирования удаленной файловой системы при каждой загрузке клиента добавьте её в [.filename]#/etc/fstab#: [.programlisting] .... -server:/home /mnt nfs rw 0 0 +server:/home /mnt nfs rw 0 0 .... -На страницах справочной системы по man:fstab[5] перечислены все доступные параметры. +Обратитесь к man:fstab[5] для описания всех доступных опций. -=== Блокировка файлов +=== Блокировка -Некоторым приложениям (например, mutt) для корректной работы необходима возможность блокировки файлов (file locking). При работе по NFS блокировка файлов может осуществляться при помощи демона rpc.lockd. Чтобы его активировать, добавьте следующие записи в файл [.filename]#/etc/rc.conf# как на клиенте, так и на сервере NFS (предполагается, что и клиент, и сервер уже сконфигурированы): +Некоторые приложения требуют блокировки файлов для корректной работы. Чтобы включить блокировку, выполните следующую команду как на клиенте, так и на сервере: -[.programlisting] +[source, shell] .... -rpc_lockd_enable="YES" -rpc_statd_enable="YES" +# sysrc rpc_lockd_enable="YES" .... -Запустите демоны, выполнив следующие команды: +Затем запустите службу man:rpc.lockd[8]: -[source,shell] +[source, shell] .... -# /etc/rc.d/lockd start -# /etc/rc.d/statd start +# service lockd start .... -Если нет необходимости в настоящей блокировке файлов между сервером NFS и клиентами, то клиент NFS может быть настроен так, чтобы выполнять блокировки файлов локально, для чего необходимо передать опцию `-L` команде man:mount_nfs[8]. За подробностями обратитесь к странице справочника man:mount_nfs[8]. +Если блокировка не требуется на сервере, клиент NFS можно настроить для локальной блокировки, добавив параметр `-L` при выполнении команды mount. Дополнительные сведения см. в man:mount_nfs[8]. -=== Практическое использование +[[network-autofs]] +=== Автоматизация монтирования с помощью man:autofs[5] -У NFS есть много вариантов практического применения. Ниже приводится несколько наиболее широко распространённых способов её использования: +[NOTE] +==== +Автомонтирование man:autofs[5] поддерживается начиная с FreeBSD 10.1-RELEASE. Для использования функциональности автомонтирования в более старых версиях FreeBSD используйте man:amd[8]. В этой главе описывается только автомонтирование man:autofs[5]. +==== -* Настройка несколько машин для совместного использования CDROM или других носителей. Это более дешёвый и зачастую более удобный способ установки программного обеспечения на несколько машин. -* В больших сетях может оказаться более удобным настроить центральный сервер NFS, на котором размещаются все домашние каталоги пользователей. Эти домашние каталоги могут затем экспортироваться в сеть так, что пользователи всегда будут иметь один и тот же домашний каталог вне зависимости от того, на какой рабочей станции они работают. -* Несколько машин могут иметь общий каталог [.filename]#/usr/ports/distfiles#. Таким образом, когда вам нужно будет установить порт на несколько машин, вы сможете быстро получить доступ к исходным текстам без их загрузки на каждой машине. +Утилита man:autofs[5] — это общее название для нескольких компонентов, которые вместе позволяют автоматически монтировать удалённые и локальные файловые системы при обращении к файлу или каталогу внутри этих файловых систем. Она состоит из компонента ядра man:autofs[5] и нескольких пользовательских приложений: man:automount[8], man:automountd[8] и man:autounmountd[8]. Она служит альтернативой для man:amd[8] из предыдущих выпусков FreeBSD. amd по-прежнему предоставляется для обратной совместимости, так как эти утилиты используют разные форматы карт; формат, используемый autofs, совпадает с форматом других автомонтировщиков SVR4, таких как в Solaris, MacOS X и Linux. -[[network-amd]] -=== Автоматическое монтирование с amd +Виртуальная файловая система man:autofs[5] монтируется на указанные точки монтирования с помощью man:automount[8], который обычно запускается во время загрузки. -man:amd[8] (даемон автоматического монтирования) автоматически монтирует удалённую файловую систему, как только происходит обращение к файлу или каталогу в этой файловой системе. Кроме того, файловые системы, которые были неактивны некоторое время, будут автоматически размонтированы даемоном amd. Использование amd является простой альтернативой статическому монтированию, так как в последнем случае обычно всё должно быть описано в файле [.filename]#/etc/fstab#. +Всякий раз, когда процесс пытается получить доступ к файлу в точке монтирования man:autofs[5], ядро уведомляет демон man:automountd[8] и приостанавливает вызвавший процесс. Демон man:automountd[8] обрабатывает запросы ядра, находя соответствующую карту и монтируя файловую систему в соответствии с ней, после чего сигнализирует ядру о разблокировке процесса. Демон man:autounmountd[8] автоматически размонтирует автомонтируемые файловые системы по истечении некоторого времени, если они больше не используются. -amd работает, сам выступая как сервер NFS для каталогов [.filename]#/host# и [.filename]#/net#. Когда происходит обращение к файлу в одном из этих каталогов, amd ищет соответствующий удаленный ресурс для монтирования и автоматически его монтирует. [.filename]#/net# используется для монтирования экспортируемой файловой системы по адресу IP, когда как каталог [.filename]#/host# используется для монтирования ресурса по удаленному имени хоста. +Основной файл конфигурации autofs — это [.filename]#/etc/auto_master#. Он связывает отдельные карты с корневыми точками монтирования. Для объяснения синтаксиса [.filename]#auto_master# и карт обратитесь к man:auto_master[5]. -Обращение к файлу в каталоге [.filename]#/host/foobar/usr# укажет amd на выполнение попытки монтирования ресурса [.filename]#/usr#, который находится на хосте `foobar`. +Существует специальная карта автомонтирования, смонтированная в [.filename]#/net#. При обращении к файлу в этом каталоге, man:autofs[5] ищет соответствующую удалённую точку монтирования и автоматически монтирует её. Например, попытка доступа к файлу в [.filename]#/net/foobar/usr# приведёт к тому, что man:automountd[8] смонтирует экспорт [.filename]#/usr# с хоста `foobar`. -.Монтирование ресурса при помощи amd +.Подключение экспорта с помощью man:autofs[5] [example] ==== -Вы можете посмотреть доступные для монтирования ресурсы отдалённого хоста командой `showmount`. К примеру, чтобы посмотреть ресурсы хоста с именем `foobar`, вы можете использовать: +В этом примере `showmount -e` показывает экспортированные файловые системы, которые могут быть подключены с NFS-сервера `foobar`: -[source,shell] +[source, shell] .... % showmount -e foobar Exports list on foobar: -/usr 10.10.10.0 -/a 10.10.10.0 -% cd /host/foobar/usr +/usr 10.10.10.0 +/a 10.10.10.0 +% cd /net/foobar/usr .... ==== -Как видно из примера, `showmount` показывает [.filename]#/usr# как экспортируемый ресурс. При переходе в каталог [.filename]#/host/foobar/usr# даемон amd пытается разрешить имя хоста `foobar` и автоматически смонтировать требуемый ресурс. - -amd может быть запущен из скриптов начальной загрузки, если поместить такую строку в файл [.filename]#/etc/rc.conf#: - -[.programlisting] -.... -amd_enable="YES" -.... - -Кроме того, даемону amd могут быть переданы настроечные флаги через параметр `amd_flags`. По умолчанию `amd_flags` настроен следующим образом: - -[.programlisting] -.... -amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map" -.... - -Файл [.filename]#/etc/amd.map# задает опции, используемые по умолчанию при монтировании экспортируемых ресурсов. В файле [.filename]#/etc/amd.conf# заданы настройки некоторых более сложных возможностей amd. - -Обратитесь к справочным страницам по man:amd[8] и man:amd.conf[8] для получения более полной информации. - -[[network-nfs-integration]] -=== Проблемы взаимодействия с другими системами - -Некоторые сетевые адаптеры для систем PC с шиной ISA имеют ограничения, которые могут привести к серьезным проблемам в сети, в частности, с NFS. Эти проблемы не специфичны для FreeBSD, однако эту систему они затрагивают. +Результат выполнения `showmount` показывает, что [.filename]#/usr# экспортируется. При переходе в каталог [.filename]#/host/foobar/usr#, man:automountd[8] перехватывает запрос и пытается разрешить имя хоста `foobar`. В случае успеха man:automountd[8] автоматически монтирует исходный экспорт. -Проблема, которая возникает практически всегда при работе по сети систем PC (FreeBSD) с высокопроизводительными рабочими станциями, выпущенными такими производителями, как Silicon Graphics, Inc. и Sun Microsystems, Inc. Монтирование по протоколу NFS будет работать нормально, и некоторые операции также будут выполняться успешно, но неожиданно сервер окажется недоступным для клиент, хотя запросы к и от других систем будут продолжаться обрабатываться. Такое встречается с клиентскими системами, не зависимо от того, является ли клиент машиной с FreeBSD или рабочей станцией. Во многих системах при возникновении этой проблемы нет способа корректно завершить работу клиента. Единственным выходом зачастую является холодная перезагрузка клиента, потому что ситуация с NFS не может быть разрешена. - -Хотя "правильным" решением является установка более производительного и скоростного сетевого адаптера на систему FreeBSD, имеется простое решение, приводящее к удовлетворительным результатам. Если система FreeBSD является _сервером_, укажите параметр `-w=1024` на клиенте при монтировании. Если система FreeBSD является _клиентом_, то смонтируйте файловую систему NFS с параметром `-r=1024`. Эти параметры могут быть заданы в четвертом поле записи в файле [.filename]#fstab# клиента при автоматическом монтировании, или при помощи параметра `-o` в команде man:mount[8] при монтировании вручную. - -Нужно отметить, что имеется также другая проблема, ошибочно принимаемая за приведенную выше, когда серверы и клиенты NFS находятся в разных сетях. Если это тот самый случай, _проверьте_, что ваши маршрутизаторы пропускают нужную информацию UDP, в противном случае вы ничего не получите, что бы вы ни предпринимали. - -В следующих примерах `fastws` является именем хоста (интерфейса) высокопроизводительной рабочей станции, а `freebox` является именем хоста (интерфейса) системы FreeBSD со слабым сетевым адаптером. Кроме того, [.filename]#/sharedfs# будет являться экспортируемой через NFS файловой системой (обратитесь к страницам справочной системы по команде man:exports[5]), а [.filename]#/project# будет точкой монтирования экспортируемой файловой системы на клиенте. В любом случае, отметьте, что для вашего приложения могут понадобиться дополнительные параметры, такие, как `hard`, `soft` или `bg`. - -Пример системы FreeBSD (`freebox`) как клиента в файле [.filename]#/etc/fstab# на машине `freebox`: +Чтобы включить man:autofs[5] при загрузке, добавьте следующую строку в [.filename]#/etc/rc.conf#: [.programlisting] .... -fastws:/sharedfs /project nfs rw,-r=1024 0 0 +autofs_enable="YES" .... -Команда, выдаваемая вручную на машине `freebox`: +Затем man:autofs[5] может быть запущен выполнением: -[source,shell] +[source, shell] .... -# mount -t nfs -o -r=1024 fastws:/sharedfs /project +# service automount start +# service automountd start +# service autounmountd start .... -Пример системы FreeBSD в качестве сервера в файле [.filename]#/etc/fstab# на машине `fastws`: - -[.programlisting] -.... -freebox:/sharedfs /project nfs rw,-w=1024 0 0 -.... - -Команда, выдаваемая вручную на машине `fastws`: - -[source,shell] -.... -# mount -t nfs -o -w=1024 freebox:/sharedfs /project -.... - -Практически все 16-разрядные сетевые адаптеры позволят работать без указанных выше ограничений на размер блоков при чтении и записи. - -Для тех, кто интересуется, ниже описывается, что же происходит в при появлении этой ошибки, и объясняется, почему ее невозможно устранить. Как правило, NFS работает с "блоками" размером 8 килобайт (хотя отдельные фрагменты могут иметь меньшие размеры). Так, пакет Ethernet имеет максимальный размер около 1500 байт, то "блок" NFS разбивается на несколько пакетов Ethernet, хотя на более высоком уровне это все тот же единый блок, который должен быть принят, собран и _подтвержден_ как один блок. Высокопроизводительные рабочие станции могут посылать пакеты, которые соответствуют одному блоку NFS, сразу друг за другом, насколько это позволяет делать стандарт. На слабых, низкопроизводительных адаптерах пакеты, пришедшие позже, накладываются поверх ранее пришедших пакетов того же самого блока до того, как они могут быть переданы хосту и блок как единое целое не может быть собран или подтвержден. В результате рабочая станция входит в ситуацию тайм-аута и пытается повторить передачу, но уже с полным блоком в 8 КБ, и процесс будет повторяться снова, до бесконечности. - -Задав размер блока меньше размера пакета Ethernet, мы достигаем того, что любой полностью полученный пакет Ethernet может быть подтвержден индивидуально, и избежим тупиковую ситуацию. +Формат карты man:autofs[5] такой же, как и в других операционных системах. Информация об этом формате из других источников может быть полезной, например, из http://web.archive.org/web/20160813071113/http://images.apple.com/business/docs/Autofs.pdf[документации Mac OS X]. -Наложение пакетов может все еще проявляться, когда высокопроизводительные рабочие станции сбрасывают данные на PC-систему, однако повторение этой ситуации не обязательно с более скоростными адаптерами с "блоками" NFS. Когда происходит наложение, затронутые блоки будут переданы снова, и скорее всего, они будут получены, собраны и подтверждены. +Обратитесь к справочным страницам man:automount[8], man:automountd[8], man:autounmountd[8] и man:auto_master[5] для получения дополнительной информации. [[network-nis]] -== Network Information System (NIS/YP) +== Сетевая информационная система (NIS) -=== Что это такое? +Сетевая информационная система (NIS — Network Information System) предназначена для централизованного администрирования UNIX(R)-подобных систем, таких как Solaris(TM), HP-UX, AIX(R), Linux, NetBSD, OpenBSD и FreeBSD. Изначально NIS была известна как Yellow Pages, но название было изменено из-за проблем с товарными знаками. Именно поэтому команды NIS начинаются с `yp`. -NIS, что является сокращением от Network Information Services (Сетевые Информационные Службы), которые были разработаны компанией Sun Microsystems для централизованного администрирования систем UNIX(R) (изначально SunOS(TM)). В настоящее время эти службы практически стали промышленным стандартом; все основные UNIX(R)-подобные системы (Solaris(TM), HP-UX, AIX(R), Linux, NetBSD, OpenBSD, FreeBSD и так далее) поддерживают NIS. +NIS — это клиент-серверная система на основе удалённых вызовов процедур (RPC), которая позволяет группе машин в домене NIS использовать общий набор конфигурационных файлов. Это позволяет системному администратору настраивать клиентские системы NIS с минимальным объёмом конфигурационных данных, а также добавлять, удалять или изменять конфигурационные данные из единого места. -NIS первоначально назывались Yellow Pages (или yp), но из-за проблем с торговым знаком Sun изменила это название. Старое название (и yp) всё ещё часто употребляется. +FreeBSD использует вторую версию протокола NIS. -Это система клиент/сервер на основе вызовов RPC, которая позволяет группе машин в одном домене NIS совместно использовать общий набор конфигурационных файлов. Системный администратор может настроить клиентскую систему NIS только с минимальной настроечной информацией, а затем добавлять, удалять и модифицировать настроечную информацию из одного места. +=== Термины и процессы NIS -Это похоже на систему доменов Windows NT(R); хотя их внутренние реализации не так уж и похожи, основные функции сравнимы. +Таблица 28.1 обобщает термины и важные процессы, используемые NIS: -=== Термины/программы, о которых вы должны знать - -Существует несколько терминов и некоторое количество пользовательских программ, которые будут нужны, когда вы будете пытаться сделать NIS во FreeBSD, и в случае создания сервера, и в случае работы в качестве клиента NIS: - -[.informaltable] +.Терминология NIS [cols="1,1", frame="none", options="header"] |=== | Термин | Описание |Имя домена NIS -|Главный сервер NIS и все его клиенты (включая вторичные серверы), имеют доменное имя NIS. Как и в случае с именем домена Windows NT(R), имя домена NIS не имеет ничего общего с DNS. +|Серверы и клиенты NIS используют общее имя домена NIS. Как правило, это имя не связано с DNS. -|rpcbind -|Для обеспечения работы RPC (Remote Procedure Call, Удалённого Вызова Процедур, сетевого протокола, используемого NIS), должен быть запущен даемон rpcbind. Если даемон rpcbind не запущен, невозможно будет запустить сервер NIS, или работать как NIS-клиент. +|man:rpcbind[8] +|Эта служба включает RPC и должна работать для запуска сервера NIS или работы в качестве клиента NIS. -|ypbind -|"Связывает" NIS-клиента с его NIS-сервером. Он определяет имя NIS-домена системы, и при помощи RPC подключается к серверу. ypbind является основой клиент-серверного взаимодействия в среде NIS; если на клиентской машине программа ypbind перестанет работать, то эта машина не сможет получить доступ к серверу NIS. +|man:ypbind[8] +|Эта служба связывает клиент NIS с его сервером NIS. Она принимает имя домена NIS и использует RPC для подключения к серверу. Это основа клиент-серверного взаимодействия в среде NIS. Если эта служба не запущена на клиентской машине, она не сможет получить доступ к серверу NIS. -|ypserv -|Программа `ypserv`, которая должна запускаться только на серверах NIS: это и есть сервер NIS. Если man:ypserv[8] перестанет работать, то сервер не сможет отвечать на запросы NIS (к счастью, на этот случай предусмотрен вторичный сервер). Есть несколько реализаций NIS (к FreeBSD это не относится), в которых не производится попыток подключиться к другому серверу, если ранее используемый сервер перестал работать. Зачастую единственным средством, помогающим в этой ситуации, является перезапуск серверного процесса (или сервера полностью) или процесса ypbind на клиентской машине. +|man:ypserv[8] +|Это процесс для сервера NIS. Если эта служба перестанет работать, сервер больше не сможет отвечать на запросы NIS, поэтому, надеюсь, есть подчиненный сервер, который возьмет на себя управление. Некоторые клиенты, не относящиеся к FreeBSD, не будут пытаться переподключиться с использованием подчиненного сервера, и процесс ypbind, возможно, потребуется перезапустить на этих клиентах. -|rpc.yppasswdd -|Программа `rpc.yppasswdd`, другой процесс, который запускается только на главных NIS-серверах: это даемон, позволяющий клиентам NIS изменять свои пароли NIS. Если этот даемон не запущен, то пользователи должны будут входить на основной сервер NIS и там менять свои пароли. +|man:rpc.yppasswdd[8] +|Этот процесс работает только на основных серверах NIS. Этот демон позволяет клиентам NIS изменять свои пароли в NIS. Если этот демон не запущен, пользователям придется входить на главный сервер NIS и изменять пароли там. |=== -=== Как это работает? - -В системе NIS существует три типа хостов: основные (master) серверы, вторичные (slave) серверы и клиентские машины. Серверы выполняют роль централизованного хранилища информации о конфигурации хостов. Основные серверы хранят оригиналы этой информации, когда как вторичные серверы хранят ее копию для обеспечения избыточности. Клиенты связываются с серверами, чтобы предоставить им эту информацию. - -Информация во многих файлах может совместно использоваться следующим образом. Файлы [.filename]#master.passwd#, [.filename]#group# и [.filename]#hosts# используются совместно через NIS. Когда процессу, работающему на клиентской машине, требуется информация, как правило, находящаяся в этих файлах локально, то он делает запрос к серверу NIS, с которым связан. +=== Типы машин -==== Типы машин +В среде NIS существует три типа хостов: -* _Основной сервер NIS_. Такой сервер, по аналогии с первичным контроллером домена Windows NT(R), хранит файлы, используемые всеми клиентами NIS. Файлы [.filename]#passwd#, [.filename]#group# и различные другие файлы, используемые клиентами NIS, находятся на основном сервере. +* Основной сервер NIS + -[NOTE] -==== -Возможно использование одной машины в качестве сервера для более чем одного домена NIS. Однако, в этом введении такая ситуация не рассматривается, и предполагается менее масштабное использование NIS. -==== - -* _Вторичные серверы NIS_. Похожие на вторичные контроллеры доменов Windows NT(R), вторичные серверы NIS содержат копии оригинальных файлов данных NIS. Вторичные серверы NIS обеспечивают избыточность, что нужно в критичных приложениях. Они также помогают распределять нагрузку на основной сервер: клиенты NIS всегда подключаются к тому серверу NIS, который ответил первым, в том числе и к вторичным серверам. -* _Клиенты NIS_. Клиенты NIS, как и большинство рабочих станций Windows NT(R), аутентифицируются на сервере NIS (или на контроллере домена Windows NT(R) для рабочих станций Windows NT(R)) во время входа в систему. - -=== Использование NIS/YP +Этот сервер выступает в роли центрального хранилища информации о конфигурации хостов и содержит авторитетные копии файлов, используемых всеми клиентами NIS. Файлы [.filename]#passwd#, [.filename]#group# и другие, используемые клиентами NIS, хранятся на главном сервере. Хотя возможно, чтобы одна машина была основным сервером NIS для нескольких доменов NIS, такая конфигурация не рассматривается в этой главе, так как предполагается относительно небольшая среда NIS. +* Подчиненные серверы NIS ++ +Подчинённые серверы NIS хранят копии файлов данных NIS главного сервера для обеспечения избыточности. Подчинённые серверы также помогают распределить нагрузку основного сервера, так как клиенты NIS всегда подключаются к NIS серверу, который отвечает первым. +* Клиенты NIS ++ +Клиенты NIS проходят аутентификацию на сервере NIS при входе в систему. -В этом разделе приводится пример настройки NIS. +Информация из многих файлов может быть совместно использована с помощью NIS. Файлы [.filename]#master.passwd#, [.filename]#group# и [.filename]#hosts# часто распространяются через NIS. Когда процессу на клиенте требуется информация, которая обычно находится в этих файлах локально, он отправляет запрос к связанному с ним NIS-серверу. -==== Планирование +=== Планирование и подготовка -Давайте предположим, что вы являетесь администратором в маленькой университетской лаборатории. В настоящий момент в этой лаборатории с 15 машинами отсутствует единая точка администрирования; на каждой машине имеются собственные файлы [.filename]#/etc/passwd# и [.filename]#/etc/master.passwd#. Эти файлы синхронизируются друг с другом только вручную; сейчас, когда вы добавляете пользователя в лаборатории, вы должны выполнить команду `adduser` на всех 15 машинах. Понятно, что такое положение вещей нужно исправлять, так что вы решили перевести сеть на использование NIS, используя две машины в качестве серверов. +В этом разделе описывается пример среды NIS, состоящей из 15 машин FreeBSD без централизованной точки администрирования. На каждой машине есть свои файлы [.filename]#/etc/passwd# и [.filename]#/etc/master.passwd#. Эти файлы синхронизируются между собой только вручную. В настоящее время, когда в лабораторию добавляется новый пользователь, этот процесс необходимо повторять на всех 15 машинах. -Итак, конфигурация лаборатории сейчас выглядит примерно так: +Конфигурация лаборатории будет следующей: [.informaltable] [cols="1,1,1", frame="none", options="header"] @@ -623,13 +525,14 @@ NIS первоначально назывались Yellow Pages (или yp), н | IP-адрес | Роль машины + |`ellington` |`10.0.0.2` |Основной сервер NIS |`coltrane` |`10.0.0.3` -|Вторичный сервер NIS +|Подчиненный сервер NIS |`basie` |`10.0.0.4` @@ -644,84 +547,81 @@ NIS первоначально назывались Yellow Pages (или yp), н |Другие клиентские машины |=== -Если вы определяете схему NIS первый раз, ее нужно хорошо обдумать. Вне зависимости от размеров вашей сети, есть несколько ключевых моментов, которые требуют принятия решений. +Если это первый раз, когда разрабатывается схема NIS, её следует тщательно спланировать заранее. Независимо от размера сети, в процессе планирования необходимо принять несколько решений. -===== Выбор имени домена NIS +==== Выбор имени домена NIS -Это имя не должно быть "именем домена", которое вы использовали. Более точно это имя называется "именем домена NIS". Когда клиент рассылает запросы на получение информации, он включает в них имя домена NIS, частью которого является. Таким способом многие сервера в сети могут указать, какой сервер на какой запрос должен отвечать. Думайте о домене NIS как об имени группы хостов, которые каким-то образом связаны. +Когда клиент рассылает широковещательные запросы на получение информации, он включает имя домена NIS, к которому принадлежит. Таким образом, несколько серверов в одной сети могут определить, какой сервер должен отвечать на конкретный запрос. Думайте о доменном имени NIS как об имени для группы хостов. -Некоторые организации в качестве имени домена NIS используют свой домен Интернет. Это не рекомендуется, так как может вызвать проблемы в процессе решения сетевых проблем. Имя домена NIS должно быть уникальным в пределах вашей сети и хорошо, если оно будет описывать группу машин, которые представляет. Например, художественный отдел в компании Acme Inc. может находиться в домене NIS с именем "acme-art". В нашем примере положим, что мы выбрали имя `test-domain`. +Некоторые организации предпочитают использовать своё доменное имя интернета в качестве имени домена NIS. Это не рекомендуется, так как может вызвать путаницу при попытках отладки сетевых проблем. Имя домена NIS должно быть уникальным в пределах сети, и полезно, если оно описывает группу машин, которую представляет. Например, художественный отдел компании Acme Inc. может находиться в домене NIS "acme-art". В этом примере будет использоваться имя домена `test-domain`. -Несмотря на это, некоторые операционные системы (в частности, SunOS(TM)) используют свое имя домена NIS в качестве имени домена Интернет. Если одна или более машин в вашей сети имеют такие ограничения, вы _обязаны_ использовать имя домена Интернет в качестве имени домена NIS. +Однако некоторые операционные системы, отличные от FreeBSD, требуют, чтобы имя домена NIS совпадало с именем интернет-домена. Если одна или несколько машин в сети имеют это ограничение, _необходимо_ использовать имя интернет-домена в качестве имени домена NIS. -===== Требования к серверу +==== Требования к физическому серверу -Есть несколько вещей, которые нужно иметь в виду при выборе машины для использования в качестве сервера NIS. Одной из обескураживающей вещью, касающейся NIS, является уровень зависимости клиентов от серверов. Если клиент не может подключиться к серверу своего домена NIS, зачастую машину просто становится нельзя использовать. Отсутствие информации о пользователях и группах приводит к временной остановке работы большинства систем. Зная это, вы должны выбрать машину, которая не должна подвергаться частым перезагрузкам и не используется для разработки. Сервер NIS в идеале должен быть отдельно стоящей машиной, единственным целью в жизни которой является быть сервером NIS. Если вы работаете в сети, которая не так уж сильно загружена, то можно поместить сервер NIS на машине, на которой запущены и другие сервисы, просто имейте в виду, что если сервер NIS становится недоступным, то это негативно отражается на _всех_ клиентах NIS. +Есть несколько моментов, которые следует учитывать при выборе машины для использования в качестве сервера NIS. Поскольку клиенты NIS зависят от доступности сервера, следует выбрать машину, которая не перезагружается часто. Идеально, чтобы сервер NIS был отдельной машиной, единственной целью которой является быть сервером NIS. Если сеть не сильно загружена, допустимо разместить сервер NIS на машине, где выполняются другие службы. Однако, если сервер NIS станет недоступен, это негативно скажется на всех клиентах NIS. -==== Серверы NIS +=== Настройка основного сервера NIS -Оригинальные копии всей информации NIS хранится на единственной машине, которая называется главным сервером NIS. Базы данных, которые используются для хранения информации, называются картами NIS. Во FreeBSD эти карты хранятся в [.filename]#/var/yp/[domainname]#, где [.filename]#[domainname]# является именем обслуживаемого домена NIS. Один сервер NIS может поддерживать одновременно несколько доменов, так что есть возможность иметь несколько таких каталогов, по одному на каждый обслуживаемый домен. Каждый домен будет иметь свой собственный независимый от других набор карт. +Канонические копии всех NIS-файлов хранятся на основном сервере. Базы данных, используемые для хранения информации, называются NIS-картами. В FreeBSD эти карты хранятся в [.filename]#/var/yp/[domainname]#, где [.filename]#[domainname]# — это имя NIS-домена. Поскольку поддерживается несколько доменов, возможно наличие нескольких каталогов, по одному для каждого домена. Каждый домен будет иметь свой независимый набор карт. -Основной и вторичный серверы обслуживают все запросы NIS с помощью даемона `ypserv`. `ypserv` отвечает за получение входящих запросов от клиентов NIS, распознавание запрашиваемого домена и отображение имени в путь к соответствующему файлы базы данных, а также передаче информации из базы данных обратно клиенту. +Основные и подчинённые серверы NIS обрабатывают все запросы NIS через man:ypserv[8]. Этот демон отвечает за приём входящих запросов от клиентов NIS, преобразование запрошенного домена и имени карты в путь к соответствующему файлу базы данных и передачу данных из базы обратно клиенту. -===== Настройка основного сервера NIS +Настройка основного NIS-сервера может быть относительно простой, в зависимости от потребностей окружения. Поскольку FreeBSD предоставляет встроенную поддержку NIS, её достаточно включить, добавив следующие строки в [.filename]#/etc/rc.conf#: -Настройка основного сервера NIS может оказаться сравнительно простой, в зависимости от ваших потребностей. В поставку FreeBSD сразу включена поддержка NIS. Все, что вам нужно, это добавить следующие строки в файл [.filename]#/etc/rc.conf#, а FreeBSD сделает за вас всё остальное.. - -[.procedure] -==== -[.programlisting] -.... -nisdomainname="test-domain" -.... -. В этой строке задается имя домена NIS, которое будет `test-domain`, еще до настройки сети (например, после перезагрузки). -+ [.programlisting] .... -nis_server_enable="YES" +nisdomainname="test-domain" <.> +nis_server_enable="YES" <.> +nis_yppasswdd_enable="YES" <.> .... -. Здесь указывается FreeBSD на запуск процессов серверов NIS, когда дело доходит до сетевых настроек. -+ + +<.> Эта строка устанавливает имя домена NIS в `test-domain`. +<.> Это автоматизирует запуск процессов сервера NIS при загрузке системы. +<.> Это включает демон man:rpc.yppasswdd[8], позволяющий пользователям изменять свой NIS-пароль с клиентской машины. + +В многосерверном домене, где серверные машины также являются клиентами NIS, необходимо соблюдать осторожность. Обычно рекомендуется принудительно заставлять серверы привязываться к самим себе, а не разрешать им рассылать запросы на привязку и потенциально привязываться друг к другу. Могут возникнуть странные режимы сбоев, если один сервер выйдет из строя, а другие будут зависеть от него. В конечном итоге все клиенты превысят время ожидания и попытаются привязаться к другим серверам, но задержка может быть значительной, а режим сбоя сохранится, поскольку серверы могут снова привязаться друг к другу. + +Сервер, который также является клиентом, может быть принудительно привязан к определённому серверу путём добавления следующих строк в [.filename]#/etc/rc.conf#: + [.programlisting] .... -nis_yppasswdd_enable="YES" +nis_client_enable="YES" <.> +nis_client_flags="-S test-domain,server" <.> .... -. Здесь указывается на запуск даемона `rpc.yppasswdd`, который, как это отмечено выше, позволит пользователям менять свой пароль NIS с клиентской машины. -==== -[NOTE] -==== -В зависимости от ваших настроек NIS, вам могут понадобиться дополнительные строки. Обратитесь к <<network-nis-server-is-client,"разделу о серверах NIS, которые являются и клиентами NIS">> ниже для получения подробной информации. -==== +<.> Это позволяет также запускать клиентские приложения. +<.> Эта строка устанавливает имя домена NIS в `test-domain` и привязывает к себе. -После добавления вышеприведенных строк, запустите команду `/etc/netstart`, работая как администратор. По ней произойдет настройка всего, при этом будут использоваться значения, заданные в файле [.filename]#/etc/rc.conf#. И наконец, перед инициализацией карт NIS, запустите вручную демон ypserv: +После сохранения изменений введите `/etc/netstart`, чтобы перезапустить сеть и применить значения, указанные в [.filename]#/etc/rc.conf#. Перед инициализацией карт NIS запустите man:ypserv[8]: -[source,shell] +[source, shell] .... -# /etc/rc.d/ypserv start +# service ypserv start .... -===== Инициализация карт NIS -_Карты NIS_ являются файлами баз данных, которые хранятся в каталоге [.filename]#/var/yp#. Они генерируются из конфигурационных файлов, находящихся в каталоге [.filename]#/etc# основного сервера NIS, за одним исключением: файл [.filename]#/etc/master.passwd#. На это есть весомая причина, вам не нужно распространять пароли пользователя `root` и других административных пользователей на все серверы в домене NIS. По этой причине, прежде чем инициализировать карты NIS, вы должны сделать вот что: +==== Инициализация карт NIS + +NIS-карты создаются из конфигурационных файлов в [.filename]#/etc# на NIS-мастере, за исключением одного: [.filename]#/etc/master.passwd#. Это сделано для предотвращения распространения паролей на все серверы в NIS-домене. Поэтому перед инициализацией NIS-карт необходимо настроить основные файлы паролей: -[source,shell] +[source, shell] .... # cp /etc/master.passwd /var/yp/master.passwd # cd /var/yp # vi master.passwd .... -Вы должны удалить все записи, касающиеся системных пользователей (`bin`, `tty`, `kmem`, `games` и так далее), а также записи, которые вы не хотите распространять клиентам NIS (например, `root` и другие пользователи с UID, равным 0 (администраторы)). +Рекомендуется удалить все записи системных учетных записей, а также любые пользовательские учетные записи, которые не нужно распространять на клиенты NIS, такие как `root` и другие административные учетные записи. [NOTE] ==== -Проверьте, чтобы файл [.filename]#/var/yp/master.passwd# был недоступен для записи ни для группы, ни для остальных пользователей (режим доступа 600)! Воспользуйтесь командой `chmod`, если это нужно. +Убедитесь, что файл [.filename]#/var/yp/master.passwd# не доступен для чтения группе или всем, установив его права доступа на `600`. ==== -Когда с этим будет покончено, самое время инициализировать карты NIS! В поставку FreeBSD включен скрипт с именем `ypinit`, который делает это (обратитесь к его справочной странице за дополнительной информацией). Отметьте, что этот скрипт имеется в большинстве операционных систем UNIX(R), но не во всех. В системе Digital Unix/Compaq Tru64 UNIX он называется `ypsetup`. Так как мы генерируем карты для главного сервера NIS, то при вызове программы `ypinit` мы передаем ей параметр `-m`. Для генерации карт NIS в предположении, что вы уже сделали шаги, описанные выше, выполните следующее: +После завершения этой задачи инициализируйте карты NIS. FreeBSD включает скрипт man:ypinit[8] для этого. При создании карт для главного сервера укажите `-m` и задайте имя домена NIS: -[source,shell] +[source, shell] .... ellington# ypinit -m test-domain Server Type: MASTER Domain: test-domain @@ -729,12 +629,12 @@ Creating an YP server will require that you answer a few questions. Questions will all be asked at the beginning of the procedure. Do you want this procedure to quit on non-fatal errors? [y/n: n] n Ok, please remember to go back and redo manually whatever fails. -If you don't, something might not work. +If not, something might not work. At this point, we have to construct a list of this domains YP servers. rod.darktech.org is already known as master server. Please continue to add any slave servers, one per line. When you are done with the list, type a <control D>. -master server : ellington +master server : ellington next host to add: coltrane next host to add: ^D The current list of NIS servers looks like this: @@ -742,33 +642,38 @@ ellington coltrane Is this correct? [y/n: y] y -[..вывод при генерации карт..] +[..output from map generation..] NIS Map update completed. ellington has been setup as an YP master server without any errors. .... -Программа `ypinit` должна была создать файл [.filename]#/var/yp/Makefile# из [.filename]#/var/yp/Makefile.dist#. При создании этого файла предполагается, что вы работаете в окружении с единственным сервером NIS и только с машинами FreeBSD. Так как в домене `test-domain` имеется также и вторичный сервер, то вы должны отредактировать файл [.filename]#/var/yp/Makefile#: +Это создаст файл [.filename]#/var/yp/Makefile# на основе [.filename]#/var/yp/Makefile.dist#. По умолчанию этот файл предполагает, что в окружении есть единственный NIS-сервер только с клиентами FreeBSD. Поскольку у `test-domain` есть подчиненный сервер, отредактируйте эту строку в [.filename]#/var/yp/Makefile#, чтобы она начиналась с комментария (`+#+`): -[source,shell] +[.programlisting] .... -ellington# vi /var/yp/Makefile +NOPUSH = "True" .... -Вы должны закомментировать строку, в которой указано -[.programlisting] +==== Добавление новых пользователей + +Каждый раз при создании нового пользователя учетная запись должна быть добавлена на основной NIS-сервер, а NIS-карты должны быть перестроены. До этого новый пользователь не сможет войти в систему нигде, кроме главного NIS-сервера. Например, чтобы добавить нового пользователя `jsmith` в домен `test-domain`, выполните следующие команды на основном сервере: + +[source, shell] .... -NOPUSH = "True" +# pw useradd jsmith +# cd /var/yp +# make test-domain .... -(она уже не раскомментирована). +Пользователь также может быть добавлен с помощью `adduser jsmith` вместо `pw useradd smith`. -===== Настройка вторичного сервера NIS +=== Настройка подчиненного сервера NIS -Настройка вторичного сервера NIS осуществляется ещё проще, чем настройка главного сервера. Войдите на вторичный сервер и отредактируйте файл [.filename]#/etc/rc.conf# точно также, как вы делали это ранее. Единственным отличием является то, что при запуске программы `ypinit` мы теперь должны использовать опцию `-s`. Применение опции `-s` требует также указание имени главного сервера NIS, так что наша команда должна выглядеть так: +Для настройки подчиненного сервера NIS войдите на подчиненный сервер и отредактируйте [.filename]#/etc/rc.conf#, как для основного сервера. Не генерируйте карты NIS, так как они уже существуют на основном сервере. При запуске `ypinit` на подчиненном сервере используйте `-s` (для подчиненного) вместо `-m` (для основного). Эта опция требует указания имени основного сервера NIS в дополнение к имени домена, как показано в этом примере: -[source,shell] +[source, shell] .... coltrane# ypinit -s ellington test-domain @@ -780,7 +685,7 @@ Questions will all be asked at the beginning of the procedure. Do you want this procedure to quit on non-fatal errors? [y/n: n] n Ok, please remember to go back and redo manually whatever fails. -If you don't, something might not work. +If not, something might not work. There will be no further questions. The remainder of the procedure should take a few minutes, to copy the databases from ellington. Transferring netgroup... @@ -825,58 +730,46 @@ Transferring hosts.byname... ypxfr: Exiting: Map successfully transferred coltrane has been setup as an YP slave server without any errors. -Don't forget to update map ypservers on ellington. +Remember to update map ypservers on ellington. .... -Теперь у вас должен быть каталог с именем [.filename]#/var/yp/test-domain#. Копии карт главного сервера NIS должны быть в этом каталоге. Вы должны удостовериться, что этот каталог обновляется. Следующие строки в [.filename]#/etc/crontab# вашего вторичного сервера должны это делать: +Это создаст каталог на подчиненном сервере с именем [.filename]#/var/yp/test-domain#, который содержит копии карт основного сервера NIS. Добавление этих записей в [.filename]#/etc/crontab# на каждом подчиненном сервере заставит их синхронизировать свои карты с картами на основном сервере: [.programlisting] .... -20 * * * * root /usr/libexec/ypxfr passwd.byname -21 * * * * root /usr/libexec/ypxfr passwd.byuid +20 * * * * root /usr/libexec/ypxfr passwd.byname +21 * * * * root /usr/libexec/ypxfr passwd.byuid .... -Эти две строки заставляют вторичный сервер синхронизировать свои карты с картами главного сервера. Эти строки не являются обязательными, так как главный сервер автоматически пытается передать вторичным серверам все изменения в своих картах NIS. Однако, учитывая важность информации о паролях для клиентов, зависящих от вторичного сервера, рекомендуется выполнять частые обновления карт с паролями. Это особенно важно в загруженных сетях, в которых обновления карт могут не всегда завершаться успешно. - -А теперь точно также запустите команду `/etc/netstart` на вторичном сервере, по которой снова выполнится запуск сервера NIS. +Эти записи не являются обязательными, поскольку основной сервер автоматически пытается передать любые изменения карт своим подчинённым серверам. Однако, поскольку клиенты могут зависеть от подчинённого сервера для предоставления корректной информации о паролях, рекомендуется принудительно выполнять частые обновления карт паролей. Это особенно важно в загруженных сетях, где обновления карт могут не всегда завершаться. -==== Клиенты NIS +Для завершения настройки выполните `/etc/netstart` на подчинённом сервере, чтобы запустить службы NIS. -Клиент NIS выполняет так называемую привязку к конкретному серверу NIS при помощи даемона `ypbind`. `ypbind` определяет домен, используемый в системе по умолчанию (тот, который устанавливается по команде `domainname`), и начинает широковещательную рассылку запросов RPC в локальной сети. В этих запросах указано имя домена, к серверу которого `ypbind` пытается осуществить привязку. Если сервер, который был настроен для обслуживания запрашиваемого домена, получит широковещательный запрос, он ответит `ypbind`, который, в свою очередь запомнит адрес сервера. Если имеется несколько серверов (например, главный и несколько вторичных), то `ypbind` будет использовать адрес первого ответившего. С этого момента клиентская система будет направлять все свои запросы NIS на этот сервер. Время от времени `ypbind` будет "пинать" сервер для проверки его работоспособности. Если на один из тестовых пакетов не удастся получить ответа за разумное время, то `ypbind` пометит этот домен как домен, с которым связка разорвана, и снова начнет процесс посылки широковещательных запросов в надежде найти другой сервер. +=== Настройка клиента NIS -===== Настройка клиента NIS +Клиент NIS связывается с сервером NIS с помощью man:ypbind[8]. Этот демон рассылает RPC-запросы в локальной сети. Эти запросы указывают доменное имя, настроенное на клиенте. Если NIS-сервер в том же домене получает один из таких запросов, он отвечает, и ypbind записывает адрес сервера. Если доступно несколько серверов, клиент будет использовать адрес первого ответившего сервера и направлять все свои NIS-запросы к нему. Клиент автоматически отправляет ping-запросы серверу через регулярные промежутки времени, чтобы убедиться, что он всё ещё доступен. Если ответ не получен в разумные сроки, ypbind пометит домен как несвязанный и снова начнёт рассылку запросов в надежде найти другой сервер. -Настройка машины с FreeBSD в качестве клиента NIS достаточно проста. +Для настройки машины FreeBSD в качестве клиента NIS: [.procedure] ==== - -. Отредактируйте файл [.filename]#/etc/rc.conf#, добавив туда следующие строки для того, чтобы задать имя домена NIS и запустить `ypbind` во время запуска сетевых служб: +. Отредактируйте файл [.filename]#/etc/rc.conf# и добавьте следующие строки, чтобы установить имя домена NIS и запустить man:ypbind[8] при старте сети: + [.programlisting] .... nisdomainname="test-domain" nis_client_enable="YES" .... -+ -. Для импортирования всех возможных учётных записей от сервера NIS, удалите все записи пользователей из вашего файла [.filename]#/etc/master.passwd# и воспользуйтесь командой `vipw` для добавления следующей строки в конец файла: + +. Для импорта всех возможных записей паролей с сервера NIS, используйте `vipw`, чтобы удалить все учетные записи пользователей, кроме одной, из [.filename]#/etc/master.passwd#. При удалении учетных записей учитывайте, что хотя бы одна локальная учетная запись должна остаться, и эта учетная запись должна быть членом группы `wheel`. Если возникнут проблемы с NIS, эту локальную учетную запись можно использовать для удаленного входа, получения прав суперпользователя и устранения проблемы. Перед сохранением изменений добавьте следующую строку в конец файла: + [.programlisting] .... +::::::::: .... + -[NOTE] -====== -Эта строчка даст всем пользователям с корректной учетной записью в картах учетных баз пользователей доступ к этой системе. Есть множество способов настроить ваш клиент NIS, изменив эту строку. Посмотрите ниже текст, касающийся <<network-netgroups,сетевых групп>>, чтобы получить более подробную информацию. Дополнительная информация для изучения находится в книге издательства O'Reilly под названием `Managing NFS and NIS`. -====== -+ -[NOTE] -====== -Вы должны оставить хотя бы одну локальную запись (то есть не импортировать ее через NIS) в вашем [.filename]#/etc/master.passwd# и эта запись должна быть также членом группы `wheel`. Если с NIS что-то случится, эта запись может использоваться для удаленного входа в систему, перехода в режим администратора и исправления неисправностей. -====== -+ -. Для импортирования всех возможных записей о группах с сервера NIS, добавьте в ваш файл [.filename]#/etc/group# такую строчку: +Эта строка настраивает клиент для предоставления любому пользователю с действительной учётной записью в картах паролей NIS-сервера учётной записи на клиенте. Существует множество способов настройки NIS-клиента путём изменения этой строки. Один из методов описан в crossref:network-servers[network-netgroups, Использование групп сети]. Для более подробного ознакомления обратитесь к книге `Managing NFS and NIS`, опубликованной O'Reilly Media. +. Для импорта всех возможных записей групп с сервера NIS добавьте следующую строку в [.filename]#/etc/group#: + [.programlisting] .... @@ -884,24 +777,19 @@ nis_client_enable="YES" .... ==== -Для немедленного запуска клиента NIS выполните следующую команду с правами пользователя `root`: +Для немедленного запуска клиента NIS выполните следующие команды от имени суперпользователя: -[source,shell] +[source, shell] .... # /etc/netstart -# /etc/rc.d/ypbind start +# service ypbind start .... -После завершения выполнения этих шагов у вас должно получиться запустить команду `ypcat passwd` и увидеть карту учетных записей сервера NIS. +После выполнения этих шагов, выполнение команды `ypcat passwd` на клиенте должно отобразить карту [.filename]#passwd# сервера. === Безопасность NIS -В общем-то любой пользователь, зная имя вашего домена, может выполнить запрос RPC к man:ypserv[8] и получить содержимое ваших карт NIS. Для предотвращения такого неавторизованного обмена man:ypserv[8] поддерживает так называемую систему "securenets", которая может использоваться для ограничения доступа к некоторой группе хостов. При запуске man:ypserv[8] будет пытаться загрузить информацию, касающуюся securenets, из файла [.filename]#/var/yp/securenets#. - -[NOTE] -==== -Имя каталога зависит от параметра, указанного вместе с опцией `-p`. Этот файл содержит записи, состоящие из указания сети и сетевой маски, разделенных пробелом. Строчки, начинающиеся со знака "#", считаются комментариями. Примерный файл securenets может иметь примерно такой вид: -==== +Поскольку RPC — это широковещательный сервис, любая система, запускающая ypbind в том же домене, может получить содержимое NIS-карт. Чтобы предотвратить несанкционированные операции, man:ypserv[8] поддерживает функцию под названием "securenets", которая может использоваться для ограничения доступа к определённому набору хостов. По умолчанию эта информация хранится в [.filename]#/var/yp/securenets#, если только man:ypserv[8] не запущен с ключом `-p` и альтернативным путём. Этот файл содержит записи, состоящие из спецификации сети и сетевой маски, разделённых пробелами. Строки, начинающиеся с `+"#"+`, считаются комментариями. Пример файла [.filename]#securenets# может выглядеть так: [.programlisting] .... @@ -916,141 +804,118 @@ nis_client_enable="YES" 10.0.0.0 255.255.240.0 .... -Если man:ypserv[8] получает запрос от адреса, который соответствует одному из этих правил, он будет отрабатывать запрос обычным образом. Если же адрес не подпадает ни под одно правило, запрос будет проигнорирован и в журнал будет записано предупреждающее сообщение. Если файл [.filename]#/var/yp/securenets# не существует, `ypserv` будет обслуживать соединения от любого хоста. +Если man:ypserv[8] получает запрос от адреса, соответствующего одному из этих правил, он обработает запрос как обычно. Если адрес не соответствует ни одному правилу, запрос будет проигнорирован и в журнал будет записано предупреждение. Если файл [.filename]#securenets# не существует, `ypserv` разрешит соединения с любого хоста. -Программа `ypserv` также поддерживает пакет программ TCP Wrapper от Wietse Venema. Это позволяет администратору для ограничения доступа вместо [.filename]#/var/yp/securenets# использовать конфигурационные файлы TCP Wrapper. +crossref:security[tcpwrappers,"TCP Wrapper"] — это альтернативный механизм контроля доступа вместо [.filename]#securenets#. Хотя оба механизма контроля доступа добавляют некоторый уровень безопасности, они оба уязвимы к атакам "подмены IP". Весь трафик, связанный с NIS, должен блокироваться на межсетевом экране. -[NOTE] -==== -Хотя оба этих метода управления доступом обеспечивают некоторую безопасность, они, как основанные на проверке привилегированного порта, оба подвержены атакам типа "IP spoofing". Весь сетевой трафик, связанный с работой NIS, должен блокироваться вашим брандмауэром. - -Серверы, использующие файл [.filename]#/var/yp/securenets#, могут быть не в состоянии обслуживать старых клиентов NIS с древней реализацией протокола TCP/IP. Некоторые из этих реализаций при рассылке широковещательных запросов устанавливают все биты машинной части адреса в ноль и/или не в состоянии определить маску подсети при вычислении адреса широковещательной рассылки. Хотя некоторые из этих проблем могут быть решены изменением конфигурации клиента, другие могут привести к отказу от использования [.filename]#/var/yp/securenets#. +Серверы, использующие [.filename]#securenets#, могут не обслуживать легитимных клиентов NIS с устаревшими реализациями TCP/IP. Некоторые из этих реализаций устанавливают все биты хоста в ноль при выполнении широковещательных запросов или не учитывают маску подсети при вычислении широковещательного адреса. Хотя некоторые из этих проблем можно устранить, изменив конфигурацию клиента, другие проблемы могут потребовать вывода из эксплуатации этих клиентских систем или отказа от [.filename]#securenets#. -Использование [.filename]#/var/yp/securenets# на сервере с такой архаичной реализацией TCP/IP является весьма плохой идеей, и приведёт к потере работоспособности NIS в большой части вашей сети. - -Использование пакета TCP Wrapper увеличит время отклика вашего сервера NIS. Дополнительной задержки может оказаться достаточно для возникновения тайм-аутов в клиентских программах, особенно в загруженных сетях или с медленными серверами NIS. Если одна или более ваших клиентских систем страдают от таких проблем, вы должны преобразовать такие клиентские системы во вторичные серверы NIS и сделать принудительную их привязку к самим себе. -==== +Использование TCP Wrapper увеличивает задержку сервера NIS. Дополнительная задержка может быть достаточно длительной, чтобы вызвать таймауты в клиентских программах, особенно в загруженных сетях с медленными серверами NIS. Если один или несколько клиентов страдают от задержек, преобразуйте этих клиентов в подчинённые серверы NIS и заставьте их привязываться к самим себе. -=== Запрет входа некоторых пользователей +==== Запрет доступа некоторым пользователям -В нашей лаборатории есть машина `basie`, о которой предполагается, что она является исключительно факультетской рабочей станцией. Мы не хотим исключать эту машину из домена NIS, однако файл [.filename]#passwd# на главном сервере NIS содержит учетные записи как для работников факультета, так и студентов. Что мы можем сделать? +В этом примере система `basie` является рабочей станцией преподавателя в домене NIS. Файл [.filename]#passwd# на главном сервере NIS содержит учетные записи как преподавателей, так и студентов. В этом разделе показано, как разрешить вход преподавателей в эту систему, запретив вход студентам. -Есть способ ограничить вход некоторых пользователей на этой машине, даже если они присутствуют в базе данных NIS. Чтобы это сделать, вам достаточно добавить `-_username_` в конец файла [.filename]#/etc/master.passwd# на клиентской машине, где _username_ является именем пользователя, которому вы хотите запретить вход. Рекомендуется сделать это с помощью утилиты `vipw`, так как `vipw` проверит ваши изменения в [.filename]#/etc/master.passwd#, а также автоматически перестроит базу данных паролей по окончании редактирования. Например, если мы хотим запретить пользователю `bill` осуществлять вход на машине `basie`, то мы сделаем следующее: +Чтобы предотвратить вход определенных пользователей в систему, даже если они присутствуют в базе данных NIS, используйте `vipw` для добавления `-_имя_пользователя_` с правильным количеством двоеточий в конце файла [.filename]#/etc/master.passwd# на клиенте, где _имя_пользователя_ — это имя пользователя, которому запрещен вход. Строка с заблокированным пользователем должна находиться перед строкой `+`, которая разрешает вход пользователям NIS. В этом примере пользователю `bill` запрещен вход на `basie`: -[source,shell] +[source, shell] .... -basie# vipw -[add -bill to the end, exit] -vipw: rebuilding the database... -vipw: done - basie# cat /etc/master.passwd - root:[password]:0:0::0:0:The super-user:/root:/bin/csh toor:[password]:0:0::0:0:The other super-user:/root:/bin/sh -daemon:*:1:1::0:0:Owner of many system processes:/root:/sbin/nologin -operator:*:2:5::0:0:System &:/:/sbin/nologin -bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/sbin/nologin -tty:*:4:65533::0:0:Tty Sandbox:/:/sbin/nologin -kmem:*:5:65533::0:0:KMem Sandbox:/:/sbin/nologin -games:*:7:13::0:0:Games pseudo-user:/usr/games:/sbin/nologin -news:*:8:8::0:0:News Subsystem:/:/sbin/nologin -man:*:9:9::0:0:Mister Man Pages:/usr/shared/man:/sbin/nologin -bind:*:53:53::0:0:Bind Sandbox:/:/sbin/nologin +daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin +operator:*:2:5::0:0:System &:/:/usr/sbin/nologin +bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/usr/sbin/nologin +tty:*:4:65533::0:0:Tty Sandbox:/:/usr/sbin/nologin +kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin +games:*:7:13::0:0:Games pseudo-user:/usr/games:/usr/sbin/nologin +news:*:8:8::0:0:News Subsystem:/:/usr/sbin/nologin +man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/usr/sbin/nologin +bind:*:53:53::0:0:Bind Sandbox:/:/usr/sbin/nologin uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico -xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/sbin/nologin -pop:*:68:6::0:0:Post Office Owner:/nonexistent:/sbin/nologin -nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin +xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/usr/sbin/nologin +pop:*:68:6::0:0:Post Office Owner:/nonexistent:/usr/sbin/nologin +nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin +-bill::::::::: +::::::::: --bill basie# .... + [[network-netgroups]] === Использование сетевых групп -Способ, описанный в предыдущем разделе, работает достаточно хорошо, если вам нужны особые правила для очень малой группы пользователей или машин. В более крупных сетях вы _забудете_ о запрете входа определенных пользователей на важные машины или даже будете настраивать каждую машину по отдельности, теряя таким образом главное преимущество использования NIS: _централизованное_ администрирование. +Запрет указанным пользователям возможности входа в отдельные системы становится неэффективным и не масштабируемым в крупных сетях и быстро лишает NIS основного преимущества: _централизованного_ администрирования. -Ответом разработчиков NIS на эту проблему являются _сетевые группы_. Их назначение и смысл можно сравнить с обычными группами, используемыми в файловых системах UNIX(R). Главное отличие заключается в отсутствии числового идентификатора и возможности задать сетевую группу включением как пользователей, так и других сетевых групп. +Сетевые группы были разработаны для управления большими и сложными сетями с сотнями пользователей и машин. Их использование аналогично группам в UNIX(R), с той основной разницей, что отсутствует числовой идентификатор и есть возможность определять сетевую группу, включая как учётные записи пользователей, так и другие сетевые группы. -Сетевые группы были разработаны для работы с большими, сложными сетями с сотнями пользователей и машин. С одной стороны, хорошо, если вам приходится с такой ситуацией. С другой стороны, эта сложность делает невозможным описание сетевых групп с помощью простых примеров. Пример, используемый в дальнейшем, демонстрирует эту проблему. +Для дополнения примера, используемого в этой главе, домен NIS будет увеличен за счет пользователей и систем, показанным в таблицах 28.2 и 28.3: -Давайте предположим, что успешное внедрение системы NIS в вашей лаборатории заинтересовало ваше руководство. Вашим следующим заданием стало расширение домена NIS для включения в него некоторых других машин студенческого городка. В двух таблицах перечислены имена новых машин и пользователей, а также их краткое описание. - -[.informaltable] +.Дополнительные пользователи [cols="1,1", frame="none", options="header"] |=== | Имена пользователей | Описание |`alpha`, `beta` -|Обычные служащие IT-департамента +|Сотрудники IT-отдела |`charlie`, `delta` -|Практиканты IT-департамента +|Стажеры IT-отдела |`echo`, `foxtrott`, `golf`, ... -|Обычные сотрудники +|Сотрудники |`able`, `baker`, ... -|Проходящие интернатуру +|Интерны |=== -[.informaltable] +.Дополнительные Системы [cols="1,1", frame="none", options="header"] |=== | Имена машин | Описание |`war`, `death`, `famine`, `pollution` -|Ваши самые важные серверы. Только служащим IT позволяется входить на эти машины. +|Только сотрудники IT имеют право входить на эти серверы. |`pride`, `greed`, `envy`, `wrath`, `lust`, `sloth` -|Менее важные серверы. Все сотрудники департамента IT могут входить на эти машины. +|Все сотрудники IT-отдела имеют право входить на эти серверы. |`one`, `two`, `three`, `four`, ... -|Обычные рабочие станции. Только _реально нанятым_ служащим позволяется использовать эти машины. +|Обычные рабочие станции, используемые сотрудниками. |`trashcan` -|Очень старая машина без каких-либо критичных данных. Даже проходящим интернатуру разрешено ее использовать. +|Очень старая машина без каких-либо важных данных. Даже интернам разрешено использовать эту систему. |=== -Если вы попытаетесь реализовать эти требования, ограничивая каждого пользователя по отдельности, то вам придется добавить на каждой машине в файл [.filename]#passwd# по одной строчке `-_user_` для каждого пользователя, которому запрещено входить на эту систему. Если вы забудете даже одну строчку, у вас могут начаться проблемы. Гораздо проще делать это правильно во время начальной установки, однако вы постепенно _будете забывать_ добавлять строчки для новых пользователей во время повседневной работы. В конце концов, Мерфи был оптимистом. - -Использование в этой ситуации сетевых групп дает несколько преимуществ. Нет необходимости описывать по отдельности каждого пользователя; вы ставите в соответствие пользователю одну или несколько сетевых групп и разрешаете или запрещаете вход всем членам сетевой группы. Если вы добавляете новую машину, вам достаточно определить ограничения на вход для сетевых групп. Если добавляется новый пользователь, вам достаточно добавить его к одной или большему числу сетевых групп. Эти изменения независимы друг от друга: нет больше комбинаций "для каждого пользователя и машины". Если настройка вашей системы NIS тщательно спланирована, то для разрешения или запрещения доступа к машинам вам нужно будет модифицировать единственный конфигурационный файл. - -Первым шагом является инициализация карты NIS по имени netgroup. Программа man:ypinit[8] во FreeBSD по умолчанию этой карты не создаёт, хотя реализация NIS будет её поддерживает, как только она будет создана. Чтобы создать пустую карту, просто наберите +При использовании сетевых групп для настройки этого сценария каждый пользователь назначается в одну или несколько сетевых групп, а затем вход разрешается или запрещается для всех членов сетевой группы. При добавлении новой машины необходимо определить ограничения входа для всех сетевых групп. Когда добавляется новый пользователь, его учётная запись должна быть добавлена в одну или несколько сетевых групп. Если настройка NIS выполнена тщательно, для предоставления или запрета доступа к машинам потребуется изменить только один центральный файл конфигурации. -[source,shell] -.... -ellington# vi /var/yp/netgroup -.... +Первым шагом является инициализация NIS `netgroup` карты. В FreeBSD эта карта не создается по умолчанию. На главном сервере NIS используйте редактор для создания карты с именем [.filename]#/var/yp/netgroup#. -и начните добавлять содержимое. Например, нам нужно по крайней мере четыре сетевых группы: сотрудники IT, практиканты IT, обычные сотрудники и интернатура. +Этот пример создает четыре сетевые группы для представления сотрудников IT, стажеров IT, сотрудников и интернов: [.programlisting] .... -IT_EMP (,alpha,test-domain) (,beta,test-domain) -IT_APP (,charlie,test-domain) (,delta,test-domain) -USERS (,echo,test-domain) (,foxtrott,test-domain) \ - (,golf,test-domain) -INTERNS (,able,test-domain) (,baker,test-domain) +IT_EMP (,alpha,test-domain) (,beta,test-domain) +IT_APP (,charlie,test-domain) (,delta,test-domain) +USERS (,echo,test-domain) (,foxtrott,test-domain) \ + (,golf,test-domain) +INTERNS (,able,test-domain) (,baker,test-domain) .... -`IT_EMP`, `IT_APP` и так далее являются именами сетевых групп. Несколько слов в скобках служат для добавления пользователей в группу. Три поля внутри группы обозначают следующее: +Каждая запись настраивает сетевую группу. Первый столбец в записи — это название сетевой группы. Каждый набор скобок представляет либо группу из одного или нескольких пользователей, либо имя другой сетевой группы. При указании пользователя три поля, разделённые запятыми, внутри каждой группы означают: -. Имя хоста или хостов, к которым применимы последующие записи. Если имя хоста не указано, то запись применяется ко всем хостам. Если же указывается имя хоста, то вы получите мир темноты, ужаса и страшной путаницы. -. Имя учетной записи, которая принадлежит этой сетевой группе. -. Домен NIS для учетной записи. Вы можете импортировать в вашу сетевую группу учетные записи из других доменов NIS, если вы один из тех несчастных, имеющих более одного домена NIS. +. Имя хоста(ов), на котором другие поля, представляющие пользователя, действительны. Если имя хоста не указано, запись действительна на всех хостах. +. Имя учетной записи, принадлежащей этой сетевой группе. +. NIS-домен для учетной записи. Учетные записи могут быть импортированы из других NIS-доменов в сетевую группу. -Каждое из этих полей может содержать шаблоны, подробности даны в странице справочника по man:netgroup[5]. +Если группа содержит нескольких пользователей, разделяйте каждого пользователя пробелом. Кроме того, каждое поле может содержать символы подстановки. Подробности см. в man:netgroup[5]. -[NOTE] -==== -Не нужно использовать имена сетевых групп длиннее 8 символов, особенно если в вашем домене NIS имеются машины, работающие под управлением других операционных систем. Имена чувствительны к регистру; использование заглавных букв для имен сетевых групп облегчает распознавание пользователей, имен машин и сетевых групп. +Имена сетевых групп длиннее 8 символов не должны использоваться. Имена чувствительны к регистру, и использование заглавных букв для имён сетевых групп — это простой способ отличить имена пользователей, машин и сетевых групп. -Некоторые клиенты NIS (отличные от FreeBSD) не могут работать с сетевыми группами, включающими большое количество записей. Например, в некоторых старых версиях SunOS(TM) возникают проблемы, если сетевая группа содержит более 15 _записей_. Вы можете обойти это ограничение, создав несколько подгрупп с 15 или меньшим количеством пользователей и настоящую сетевую группу, состоящую из подгрупп: +Некоторые клиенты NIS, не относящиеся к FreeBSD, не могут обрабатывать сетевые группы, содержащие более 15 записей. Это ограничение можно обойти, создав несколько подгрупп с 15 или менее пользователями и настоящую сетевую группу, состоящую из этих подгрупп, как показано в этом примере: [.programlisting] .... @@ -1060,1225 +925,1122 @@ BIGGRP3 (,joe31,domain) (,joe32,domain) BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3 .... -Вы можете повторить этот процесс, если вам нужно иметь более 225 пользователей в одной сетевой группе. -==== +Повторите этот процесс, если в одной сетевой группе существует более 225 (15 умножить на 15) пользователей. -Активация и распространение вашей карты NIS проста: +Для активации и распространения новой NIS-карты: -[source,shell] +[source, shell] .... ellington# cd /var/yp ellington# make .... -Это приведет к созданию трех карт NIS [.filename]#netgroup#, [.filename]#netgroup.byhost# и [.filename]#netgroup.byuser#. Воспользуйтесь утилитой man:ypcat[1] для проверки доступности ваших новых карт NIS: +Это создаст три карты NIS [.filename]#netgroup#, [.filename]#netgroup.byhost# и [.filename]#netgroup.byuser#. Используйте опцию ключа карты в man:ypcat[1], чтобы проверить доступность новых карт NIS: -[source,shell] +[source, shell] .... ellington% ypcat -k netgroup ellington% ypcat -k netgroup.byhost ellington% ypcat -k netgroup.byuser .... -Вывод первой команды должен соответствовать содержимому файла [.filename]#/var/yp/netgroup#. Вторая команда не выведет ничего, если вы не зададите сетевые группы, специфичные для хоста. Третья команда может использоваться пользователем для получения списка сетевых групп. +Вывод первой команды должен напоминать содержимое файла [.filename]#/var/yp/netgroup#. Вторая команда выводит результат только в случае создания специфичных для хоста групп сетей. Третья команда используется для получения списка групп сетей для пользователя. -Настройка клиента достаточно проста. Чтобы настроить сервер `war`, вам достаточно запустить man:vipw[8] и заменить строку +Для настройки клиента используйте man:vipw[8], чтобы указать имя сетевой группы. Например, на сервере с именем `war` замените эту строку: [.programlisting] .... +::::::::: .... -на +строкой [.programlisting] .... +@IT_EMP::::::::: .... -Теперь только данные, касающиеся пользователей, определенных в сетевой группе `IT_EMP`, импортируются в базу паролей машины `war` и только этим пользователям будет разрешен вход. - -К сожалению, это ограничение также касается и функции `~` командного процессора и всех подпрограмм, выполняющих преобразование между именами пользователей и их числовыми ID. Другими словами, команда `cd ~_user_` работать не будет, команда `ls -l` будет выдавать числовые идентификаторы вместо имён пользователей, а `find . -user joe -print` работать откажется, выдавая сообщение `No such user`. Чтобы это исправить, вам нужно будет выполнить импорт всех записей о пользователях _без разрешения на вход на ваши серверы_. +Указывает, что только пользователи, определённые в сетевой группе `IT_EMP`, будут импортированы в базу данных паролей этой системы, и только этим пользователям разрешён вход в систему. -Это можно сделать, добавив еще одну строку в файл [.filename]#/etc/master.passwd#. Эта строка должна содержать: +Эта конфигурация также применяется к функции `~` оболочки и всем процедурам, которые преобразуют между именами пользователей и числовыми идентификаторами пользователей. Другими словами, `cd ~_user_` не будет работать, `ls -l` покажет числовой ID вместо имени пользователя, а `find . -user joe -print` завершится с сообщением `No such user`. Чтобы исправить это, импортируйте все записи пользователей, не разрешая им вход на серверы. Это можно достичь, добавив дополнительную строку: -`+:::::::::/sbin/nologin`, что означает "Произвести импортирование всех записей с заменой командного процессора на [.filename]#/sbin/nologin# в импортируемых записях". Вы можете заменить любое поле в строке с паролем, указав значение по умолчанию в вашем [.filename]#/etc/master.passwd#. +[.programlisting] +.... ++:::::::::/usr/sbin/nologin +.... -[WARNING] -==== +Эта строка настраивает клиент на импорт всех записей, но с заменой оболочки в этих записях на [.filename]#/usr/sbin/nologin#. -Проверьте, что строка `+:::::::::/sbin/nologin` помещена после `+@IT_EMP:::::::::`. В противном случае все пользовательские записи, импортированные из NIS, будут иметь [.filename]#/sbin/nologin# в качестве оболочки. -==== +Убедитесь, что дополнительная строка добавлена _после_ `+@IT_EMP:::::::::`. В противном случае у всех пользовательских учётных записей, импортированных из NIS, будет указана оболочка входа [.filename]#/usr/sbin/nologin#, и никто не сможет войти в систему. -После этого изменения при появлении нового сотрудника IT вам будет достаточно изменять только одну карту NIS. Вы можете применить подобный метод для менее важных серверов, заменяя старую строку `+:::::::::` в их файлах [.filename]#/etc/master.passwd# на нечто, подобное следующему: +Для настройки менее важных серверов замените старые `+:::::::::` на серверах следующими строками: [.programlisting] .... +@IT_EMP::::::::: +@IT_APP::::::::: -+:::::::::/sbin/nologin ++:::::::::/usr/sbin/nologin .... -Соответствующие строки для обычных рабочих станций могут иметь такой вид: +Соответствующие строки для рабочих станций будут: [.programlisting] .... +@IT_EMP::::::::: +@USERS::::::::: -+:::::::::/sbin/nologin ++:::::::::/usr/sbin/nologin .... -И все было прекрасно до того момента, когда через несколько недель изменилась политика: Департамент IT начал нанимать интернатуру. Интернатуре в IT позволили использовать обычные рабочие станции и менее важные серверы; практикантам позволили входить на главные серверы. Вы создали новую сетевую группу `IT_INTERN`, добавили в нее новую интернатуру и начали изменять настройки на всех и каждой машине... Как говорит старая мудрость: "Ошибки в централизованном планировании приводят к глобальному хаосу". - -Возможность в NIS создавать сетевые группы из других сетевых групп может использоваться для предотвращения подобных ситуаций. Одним из вариантов является создание сетевых групп на основе ролей. Например, вы можете создать сетевую группу с именем `BIGSRV` для задания ограничений на вход на важные серверы, другую сетевую группу с именем `SMALLSRV` для менее важных серверов и третью сетевую группу под названием `USERBOX` для обычных рабочих станций. Каждая из этих сетевых групп содержит сетевые группы, которым позволено входить на эти машины. Новые записи для вашей карты NIS сетевой группы должны выглядеть таким образом: +NIS поддерживает создание netgroups из других netgroups, что может быть полезно при изменении политики доступа пользователей. Одна из возможностей — создание ролевых netgroups. Например, можно создать netgroup с именем `BIGSRV` для определения ограничений входа на важные серверы, другую netgroup `SMALLSRV` для менее важных серверов и третью netgroup `USERBOX` для рабочих станций. Каждая из этих netgroups содержит netgroups, которым разрешено входить на эти машины. Новые записи для карты NIS `netgroup` будут выглядеть так: [.programlisting] .... -BIGSRV IT_EMP IT_APP +BIGSRV IT_EMP IT_APP SMALLSRV IT_EMP IT_APP ITINTERN USERBOX IT_EMP ITINTERN USERS .... -Этот метод задания ограничений на вход работает весьма хорошо, если вы можете выделить группы машин с одинаковыми ограничениями. К сожалению, такая ситуация может быть исключением, но не правилом. В большинстве случаев вам нужна возможность определять ограничения на вход индивидуально для каждой машины. +Этот метод определения ограничений входа работает достаточно хорошо, когда можно определить группы машин с одинаковыми ограничениями. К сожалению, это скорее исключение, чем правило. В большинстве случаев требуется возможность определять ограничения входа для каждой машины отдельно. -Задание сетевых групп в зависимости от машин является другой возможностью, которой можно воспользоваться при изменении политики, описанной выше. При таком развитии событий файл [.filename]#/etc/master.passwd# на каждой машине содержит две строки, начинающиеся с "+". Первая из них добавляет сетевую группу с учётными записями, которым разрешено входить на эту машину, а вторая добавляет все оставшиеся учетные записи с [.filename]#/sbin/nologin# в качестве командного процессора. Хорошей идеей является использование "ИМЕНИ МАШИНЫ" заглавными буквами для имени сетевой группы. Другими словами, строки должны иметь такой вид: +Определения машинно-зависимых сетевых групп — ещё один способ справиться с изменениями политики. В этом сценарии файл [.filename]#/etc/master.passwd# на каждой системе содержит две строки, начинающиеся с "+". Первая строка добавляет сетевую группу с учётными записями, которым разрешён вход на эту машину, а вторая строка добавляет все остальные учётные записи с оболочкой [.filename]#/usr/sbin/nologin#. Рекомендуется использовать имя сетевой группы в версии "ВСЕ-ЗАГЛАВНЫЕ", соответствующее имени хоста: [.programlisting] .... +@BOXNAME::::::::: -+:::::::::/sbin/nologin ++:::::::::/usr/sbin/nologin .... -Как только вы завершите эту работу для всех ваших машин, вам не нужно будет снова модифицировать локальные версии [.filename]#/etc/master.passwd#. Все будущие изменения могут быть выполнены изменением карты NIS. Вот пример возможной карты сетевой группы для этого случая с некоторыми полезными дополнениями: +После выполнения этой задачи на всех машинах больше не требуется изменять локальные версии файла [.filename]#/etc/master.passwd#. Все дальнейшие изменения можно выполнять, редактируя карту NIS. Вот пример возможной карты `netgroup` для данного сценария: [.programlisting] .... -# Сначала определяем группы пользователей -IT_EMP (,alpha,test-domain) (,beta,test-domain) -IT_APP (,charlie,test-domain) (,delta,test-domain) -DEPT1 (,echo,test-domain) (,foxtrott,test-domain) -DEPT2 (,golf,test-domain) (,hotel,test-domain) -DEPT3 (,india,test-domain) (,juliet,test-domain) -ITINTERN (,kilo,test-domain) (,lima,test-domain) -D_INTERNS (,able,test-domain) (,baker,test-domain) +# Define groups of users first +IT_EMP (,alpha,test-domain) (,beta,test-domain) +IT_APP (,charlie,test-domain) (,delta,test-domain) +DEPT1 (,echo,test-domain) (,foxtrott,test-domain) +DEPT2 (,golf,test-domain) (,hotel,test-domain) +DEPT3 (,india,test-domain) (,juliet,test-domain) +ITINTERN (,kilo,test-domain) (,lima,test-domain) +D_INTERNS (,able,test-domain) (,baker,test-domain) # -# Теперь задаем несколько групп на основе ролей -USERS DEPT1 DEPT2 DEPT3 -BIGSRV IT_EMP IT_APP +# Now, define some groups based on roles +USERS DEPT1 DEPT2 DEPT3 +BIGSRV IT_EMP IT_APP SMALLSRV IT_EMP IT_APP ITINTERN USERBOX IT_EMP ITINTERN USERS # -# И группы для специальных задач -# Открыть пользователям echo и golf доступ к антивирусной машине +# And a groups for a special tasks +# Allow echo and golf to access our anti-virus-machine SECURITY IT_EMP (,echo,test-domain) (,golf,test-domain) # -# Сетевые группы, специфичные для машин -# Наши главные серверы -WAR BIGSRV -FAMINE BIGSRV -# Пользователю india необходим доступ к этому серверу +# machine-based netgroups +# Our main servers +WAR BIGSRV +FAMINE BIGSRV +# User india needs access to this server POLLUTION BIGSRV (,india,test-domain) # -# Этот очень важен и ему требуются большие ограничения доступа -DEATH IT_EMP +# This one is really important and needs more access restrictions +DEATH IT_EMP # -# Антивирусная машина, упомянутая выше -ONE SECURITY +# The anti-virus-machine mentioned above +ONE SECURITY # -# Ограничить машину единственным пользователем -TWO (,hotel,test-domain) -# [...далее следуют другие группы] +# Restrict a machine to a single user +TWO (,hotel,test-domain) +# [...more groups to follow] .... -Если вы используете какие-либо базы данных для управления учетными записями ваших пользователей, вы должны смочь создать первую часть карты с помощью инструментов построения отчетов вашей базы данных. В таком случае новые пользователи автоматически получат доступ к машинам. +Не всегда целесообразно использовать сетевые группы, привязанные к машинам. При развертывании нескольких десятков или сотен систем можно использовать ролевые сетевые группы вместо машинных, чтобы размер карты NIS оставался в разумных пределах. -И последнее замечание: Не всегда бывает разумно использовать сетевые группы на основе машин. Если в студенческих лабораториях вы используете несколько десятков или даже сотен одинаковых машин, то вам нужно использовать сетевые группы на основе ролей, а не основе машин, для того, чтобы размеры карты NIS оставались в разумных пределах. +=== Форматы паролей -=== Важные замечания +NIS требует, чтобы все хосты в домене NIS использовали одинаковый формат шифрования паролей. Если у пользователей возникают проблемы с аутентификацией на клиенте NIS, это может быть связано с разным форматом паролей. В гетерогенной сети формат должен поддерживаться всеми операционными системами, где DES является минимальным общим стандартом. -Есть некоторые действия, которые нужно будет выполнять по-другому, если вы работаете с NIS. +Чтобы проверить, какой формат использует сервер или клиент, посмотрите на этот раздел в [.filename]#/etc/login.conf#: -* Каждый раз, когда вы собираетесь добавить пользователя в лаборатории, вы должны добавить его _только_ на главном сервере NIS и _обязательно перестроить карты NIS_. Если вы забудете сделать это, то новый пользователь не сможет нигде войти, кроме как на главном сервере NIS. Например, если в лаборатории нам нужно добавить нового пользователя `jsmith`, мы делаем вот что: -+ +[.programlisting] +.... +default:\ + :passwd_format=des:\ + :copyright=/etc/COPYRIGHT:\ + [Further entries elided] +.... -[source,shell] +В этом примере система использует формат DES для хеширования паролей. Другие возможные значения включают `blf` для Blowfish, `md5` для MD5, `sha256` и `sha512` для SHA-256 и SHA-512 соответственно. Для получения дополнительной информации и актуального списка доступных вариантов на вашей системе обратитесь к man:crypt[3]. + +Если формат на хосте необходимо изменить, чтобы он соответствовал формату, используемому в домене NIS, базу данных возможностей входа необходимо перестроить после сохранения изменений: + +[source, shell] .... -# pw useradd jsmith -# cd /var/yp -# make test-domain +# cap_mkdb /etc/login.conf .... -+ -Вместо `pw useradd jsmith` вы можете также запустить команду `adduser jsmith`. -* _Не помещайте административные учетные записи в карты NIS_. Вам не нужно распространять административных пользователей и их пароли на машины, которые не должны иметь доступ к таким учётным записям. -* _Сделайте главный и вторичные серверы NIS безопасными и минимизируйте их время простоя_. Если кто-то либо взломает, либо просто отключит эти машины, то люди без права входа в лабораторию с легкостью получат доступ. -+ -Это основное уязвимое место в любой централизованно администрируемой системе. Если вы не защищаете ваши серверы NIS, вы будете иметь дело с толпой разозлённых пользователей! +[NOTE] +==== +Формат паролей для существующих учётных записей не будет обновлён, пока каждый пользователь не изменит свой пароль _после_ перестроения базы данных возможностей входа. +==== -=== Совместимость с NIS v1 +[[network-ldap]] +== Протокол LDAP -ypserv из поставки FreeBSD имеет встроенную поддержку для обслуживания клиентов NIS v1. Реализация NIS во FreeBSD использует только протокол NIS v2, хотя другие реализации имеют поддержку протокола v1 для совместимости со старыми системами. Даемоны ypbind, поставляемые с такими системами, будут пытаться осуществить привязку к серверу NIS v1, даже если это им не нужно (и они будут постоянно рассылать широковещательные запросы в поиске такого сервера даже после получения ответа от сервера v2). Отметьте, что хотя имеется поддержка обычных клиентских вызовов, эта версия ypserv не отрабатывает запросы на передачу карт v1; следовательно, она не может использоваться в качестве главного или вторичного серверов вместе с другими серверами NIS, поддерживающими только протокол v1. К счастью, скорее всего, в настоящий момент такие серверы практически не используются. +Протокол LDAP (Lightweight Directory Access Protocol) — это протокол уровня приложений, используемый для доступа, изменения и аутентификации объектов с помощью распределённой службы каталогов. Его можно сравнить с телефонной книгой или архивом, который хранит несколько уровней иерархической однородной информации. Он применяется в сетях Active Directory и OpenLDAP, позволяя пользователям получать доступ к различным уровням внутренней информации с использованием одной учётной записи. Например, аутентификация электронной почты, получение контактных данных сотрудников и аутентификация на внутренних веб-сайтах могут осуществляться с помощью одной учётной записи в базе данных LDAP-сервера. -[[network-nis-server-is-client]] -=== Серверы NIS, которые также являются клиентами NIS +В этом разделе представлено краткое руководство по настройке сервера LDAP в системе FreeBSD. Предполагается, что администратор уже имеет продуманный план, включающий тип хранимой информации, её назначение, перечень пользователей с доступом к этой информации и способы защиты от несанкционированного доступа. -Особое внимание следует уделить использованию ypserv в домене со многими серверами, когда серверные машины являются также клиентами NIS. Неплохо бы заставить серверы осуществить привязку к самим себе, запретив рассылку запросов на привязку и возможно, перекрестную привязку друг к другу. Если один сервер выйдет из строя, а другие будут зависеть от него, то в результате могут возникнуть странные ситуации. Постепенно все клиенты попадут в тайм-аут и попытаются привязаться к другим серверам, но полученная задержка может быть значительной, а странности останутся, так как серверы снова могут привязаться друг к другу. +=== Терминология и структура LDAP -Вы можете заставить хост выполнить привязку к конкретному серверу, запустив команду `ypbind` с флагом `-S`. Если вы не хотите делать это вручную каждый раз при перезагрузке вашего сервера NIS, то можете добавить в файл [.filename]#/etc/rc.conf# такие строки: +LDAP использует несколько терминов, которые следует понять перед началом настройки. Все записи каталога состоят из группы _атрибутов_. Каждый из этих наборов атрибутов содержит уникальный идентификатор, известный как _Отличительное имя_ (DN — Distinguished Name), который обычно строится из нескольких других атрибутов, таких как общее имя или _Относительное отличительное имя_ (RDN — Relative Distinguished Name). Подобно тому, как каталоги имеют абсолютные и относительные пути, можно рассматривать DN как абсолютный путь, а RDN — как относительный путь. -[.programlisting] +Пример записи LDAP выглядит следующим образом. В этом примере выполняется поиск записи для указанной учетной записи пользователя (`uid`), организационного подразделения (`ou`) и организации (`o`): + +[source, shell] .... -nis_client_enable="YES" # run client stuff as well -nis_client_flags="-S NIS domain,server" +% ldapsearch -xb "uid=trhodes,ou=users,o=example.com" +# extended LDIF +# +# LDAPv3 +# base <uid=trhodes,ou=users,o=example.com> with scope subtree +# filter: (objectclass=*) +# requesting: ALL +# + +# trhodes, users, example.com +dn: uid=trhodes,ou=users,o=example.com +mail: trhodes@example.com +cn: Tom Rhodes +uid: trhodes +telephoneNumber: (123) 456-7890 + +# search result +search: 2 +result: 0 Success + +# numResponses: 2 +# numEntries: 1 .... -Дополнительную информацию можно найти на странице справки по man:ypbind[8]. +Этот пример записи показывает значения атрибутов `dn`, `mail`, `cn`, `uid` и `telephoneNumber`. Атрибут `cn` является RDN. -=== Форматы паролей +Дополнительная информация о LDAP и его терминологии доступна по адресу http://www.openldap.org/doc/admin24/intro.html[http://www.openldap.org/doc/admin24/intro.html]. -Одним из общих вопросов, которые возникают в начале работы с NIS, является вопрос совместимости форматов паролей. Если ваш сервер NIS использует пароли, зашифрованные алгоритмом DES, то он будет поддерживать только тех клиентов, что также используют DES. К примеру, если в вашей сети имеются клиенты NIS, использующие Solaris(TM), то вам, скорее всего, необходимо использовать пароли с шифрованием по алгоритму DES. +[[ldap-config]] +=== Настройка сервера LDAP -Чтобы понять, какой формат используют ваши серверы и клиенты, загляните в файл [.filename]#/etc/login.conf#. Если хост настроен на использование паролей, зашифрованных по алгоритму DES, то класс `default` будет содержать запись вроде следующей: +FreeBSD не предоставляет встроенный LDAP-сервер. Начните настройку с установки пакета package:net/openldap-server[] или порта: -[.programlisting] +[source, shell] .... -default:\ - :passwd_format=des:\ - :copyright=/etc/COPYRIGHT:\ - [Последующие строки опущены] +# pkg install openldap-server .... -Другими возможными значениями для `passwd_format` являются `blf` и `md5` (для паролей, шифруемых по стандартам Blowfish и MD5 соответственно). +В extref:{linux-users}[пакете, software] включен большой набор параметров по умолчанию. Их можно просмотреть, выполнив команду `pkg info openldap-server`. Если их недостаточно (например, требуется поддержка SQL), рекомендуется перекомпилировать порт с использованием соответствующего crossref:ports[ports-using,фреймворка]. -Если вы внесли изменения в файл [.filename]#/etc/login.conf#, то вам также нужно перестроить базу данных параметров входа в систему, что достигается запуском следующей команды пользователем `root`: +Установка создает каталог [.filename]#/var/db/openldap-data# для хранения данных. Необходимо создать каталог для хранения сертификатов: -[source,shell] +[source, shell] .... -# cap_mkdb /etc/login.conf +# mkdir /usr/local/etc/openldap/private .... -[NOTE] -==== -Формат паролей, которые уже находятся в файле [.filename]#/etc/master.passwd#, не будет изменён до тех пор, пока пользователь не сменит свой пароль _после_ перестроения базы данных параметров входа в систему. -==== +Следующий этап — настройка Центра Сертификации. Следующие команды должны быть выполнены из директории [.filename]#/usr/local/etc/openldap/private#. Это важно, так как права доступа к файлам должны быть строгими, и пользователи не должны иметь доступ к этим файлам. Более подробную информацию о сертификатах и их параметрах можно найти в crossref:security[openssl,"OpenSSL"]. Чтобы создать Центр Сертификации, начните с этой команды и следуйте инструкциям: -После этого, чтобы удостовериться в том, что пароли зашифрованы в том формате, который выбран вами, нужно проверить, что строка `crypt_default` в [.filename]#/etc/auth.conf# указывает предпочтение выбранного вами формата паролей. Для этого поместите выбранный формат первым в списке. Например, при использовании DES-шифрования паролей строка будет выглядеть так: +[source, shell] +.... +# openssl req -days 365 -nodes -new -x509 -keyout ca.key -out ../ca.crt +.... -[.programlisting] +Записи для запросов могут быть любыми, _за исключением_ `Common Name`. Эта запись должна _отличаться_ от имени хоста системы. Если это будет самоподписанный сертификат, добавьте к имени хоста префикс `CA` — как Центр Сертификации. + +Следующая задача — создать запрос на подпись сертификата и закрытый ключ. Введите эту команду и следуйте инструкциям: + +[source, shell] .... -crypt_default = des blf md5 +# openssl req -days 365 -nodes -new -keyout server.key -out server.csr .... -Выполнив вышеперечисленные шаги на каждом из серверов и клиентов NIS, работающих на FreeBSD, вы можете обеспечить их согласованность относительно используемого в вашей сети формата паролей. Если у вас возникли проблемы с аутентификацией клиента NIS, начать её решать определённо стоит отсюда. Запомните: если вы хотите использовать сервер NIS в гетерогенной сети, вам, наверное, нужно будет использовать DES на всех системах в силу того, что это минимальный общий стандарт. +В процессе генерации сертификата обязательно правильно укажите атрибут `Common Name`. Запрос на подпись сертификата (Certificate Signing Request) должен быть подписан Центром сертификации, чтобы использоваться в качестве действительного сертификата: -[[network-dhcp]] -== Автоматическая настройка сети (DHCP) +[source, shell] +.... +# openssl x509 -req -days 365 -in server.csr -out ../server.crt -CA ../ca.crt -CAkey ca.key -CAcreateserial +.... + +Заключительная часть процесса генерации сертификатов — создание и подписание клиентских сертификатов: -=== Что такое DHCP? +[source, shell] +.... +# openssl req -days 365 -nodes -new -keyout client.key -out client.csr +# openssl x509 -req -days 3650 -in client.csr -out ../client.crt -CA ../ca.crt -CAkey ca.key +.... -DHCP, или Dynamic Host Configuration Protocol (Протокол Динамической Конфигурации Хостов), описывает порядок, по которому система может подключиться к сети и получить необходимую информацию для работы в ней. Во FreeBSD используется `dhclient`, импортированный из OpenBSD 3.7. Вся информация здесь, относительно `dhclient` относится либо к ISC, либо к DHCP клиентам. DHCP сервер включён в ISC дистрибутив. +Помните, что нужно использовать тот же атрибут `Common Name` при запросе. По завершении убедитесь, что в результате выполнения команд было создано в общей сложности восемь (8) новых файлов. -=== Что описывается в этом разделе +Демон, запускающий сервер OpenLDAP, называется [.filename]#slapd#. Его настройка выполняется через файл [.filename]#slapd.ldif#: старый файл [.filename]#slapd.conf# больше не используется в OpenLDAP. -В этом разделе описываются, как компоненты клиентской части ISC или OpenBSD DHCP клиента, так и компоненты ISC DHCP системы со стороны сервера. Программа, работающая на клиентской стороне, `dhclient`, интегрирована в поставку FreeBSD, а серверная часть доступна в виде порта package:net/isc-dhcp42-server[]. Кроме ссылок ниже, много полезной информации находится на страницах справочной системы, описывающих man:dhclient[8], man:dhcp-options[5] и man:dhclient.conf[5]. +Есть http://www.openldap.org/doc/admin24/slapdconf2.html[примеры конфигурации] для [.filename]#slapd.ldif# доступны, и также их можно найти в [.filename]#/usr/local/etc/openldap/slapd.ldif.sample#. Документация параметров в slapd-config(5). Каждый раздел [.filename]#slapd.ldif#, как и все другие наборы атрибутов LDAP, однозначно идентифицируется через DN. Убедитесь, что между строкой `dn:` и желаемым концом раздела нет пустых строк. В следующем примере TLS будет использоваться для настройки безопасного канала. Первый раздел представляет глобальную конфигурацию: -=== Как это работает +[.programlisting] +.... +# +# See slapd-config(5) for details on configuration options. +# This file should NOT be world readable. +# +dn: cn=config +objectClass: olcGlobal +cn: config +# +# +# Define global ACLs to disable default read access. +# +olcArgsFile: /var/run/openldap/slapd.args +olcPidFile: /var/run/openldap/slapd.pid +olcTLSCertificateFile: /usr/local/etc/openldap/server.crt +olcTLSCertificateKeyFile: /usr/local/etc/openldap/private/server.key +olcTLSCACertificateFile: /usr/local/etc/openldap/ca.crt +#olcTLSCipherSuite: HIGH +olcTLSProtocolMin: 3.1 +olcTLSVerifyClient: never +.... -Когда на клиентской машине выполняется программа `dhclient`, являющаяся клиентом DHCP, она начинает широковещательную рассылку запросов на получение настроечной информации. По умолчанию эти запросы делаются на 68 порт UDP. Сервер отвечает на UDP 67, выдавая клиенту адрес IP и другую необходимую информацию, такую, как сетевую маску, маршрутизатор и серверы DNS. Вся эта информация даётся в форме "аренды" DHCP и верна только определенное время (что настраивается администратором сервера DHCP). При таком подходе устаревшие адреса IP тех клиентов, которые больше не подключены к сети, могут автоматически использоваться повторно. +Здесь необходимо указать файлы Центра сертификации, сертификата сервера и закрытого ключа сервера. Рекомендуется позволить клиентам выбирать алгоритм шифрования и опустить опцию `olcTLSCipherSuite` (несовместимо с TLS-клиентами, кроме [.filename]#openssl#). Опция `olcTLSProtocolMin` позволяет серверу требовать минимальный уровень безопасности: это рекомендуется. Хотя проверка обязательна для сервера, для клиента она не требуется: `olcTLSVerifyClient: never`. -Клиенты DHCP могут получить от сервера очень много информации. Подробный список находится в странице Справочника man:dhcp-options[5]. +Второй раздел посвящен серверным модулям и может быть настроен следующим образом: -=== Интеграция с FreeBSD +[.programlisting] +.... +# +# Load dynamic backend modules: +# +dn: cn=module,cn=config +objectClass: olcModuleList +cn: module +olcModulepath: /usr/local/libexec/openldap +olcModuleload: back_mdb.la +#olcModuleload: back_bdb.la +#olcModuleload: back_hdb.la +#olcModuleload: back_ldap.la +#olcModuleload: back_passwd.la +#olcModuleload: back_shell.la +.... -DHCP клиент от OpenBSD, `dhclient`, полностью интегрирован во FreeBSD. Поддержка клиента DHCP есть как в программе установки, так и в самой системе, что исключает необходимость в знании подробностей конфигурации сети в любой сети, имеющей сервер DHCP. +Третий раздел посвящён загрузке необходимых схем `ldif` для использования базами данных: они являются важными. -DHCP поддерживается утилитой sysinstall. При настройке сетевого интерфейса из программы sysinstall второй вопрос, который вам задается: "Do you want to try DHCP configuration of the interface?" ("Хотите ли вы попробовать настроить этот интерфейс через DHCP?"). Утвердительный ответ приведёт к запуску программы `dhclient`, и при удачном его выполнении к автоматическому заданию информации для настройки интерфейса. +[.programlisting] +.... +dn: cn=schema,cn=config +objectClass: olcSchemaConfig +cn: schema -Есть две вещи, которые вы должны сделать для того, чтобы ваша система использовала DHCP при загрузке: +include: file:///usr/local/etc/openldap/schema/core.ldif +include: file:///usr/local/etc/openldap/schema/cosine.ldif +include: file:///usr/local/etc/openldap/schema/inetorgperson.ldif +include: file:///usr/local/etc/openldap/schema/nis.ldif +.... -* Убедитесь, что устройство [.filename]#bpf# включено в компиляцию вашего ядра. Чтобы это сделать, добавьте строчку `device bpf` в конфигурационный файл ядра и перестройте ядро. Более подробная информация о построении ядер имеется в crossref:kernelconfig[kernelconfig, Настройка ядра FreeBSD]. -+ -Устройство [.filename]#bpf# уже является частью ядра [.filename]#GENERIC#, которое поставляется вместе с FreeBSD, так что, если вы не используете другое ядро, то вам и не нужно его делать для того, чтобы работал DHCP. -+ -[NOTE] -==== -Те, кто беспокоится о безопасности, должны иметь в виду, что устройство [.filename]#bpf# является также тем самым устройством, которое позволяет работать программам-снифферам пакетов (хотя для этого они должны быть запущены пользователем `root`). Наличие устройства [.filename]#bpf#_необходимо_ для использования DHCP, но если вы чересчур беспокоитесь о безопасности, то вам нельзя добавлять устройство [.filename]#bpf# в ядро только для того, чтобы в неопределённом будущем использовать DHCP. -==== +Далее, раздел конфигурации фронтенда (уровня взаимодействия с клиентами): -* По умолчанию, конфигурирование FreeBSD по протоколу DHCP выполняется фоновым процессом, или _асинхронно_. Остальные стартовые скрипты продолжают работу не ожидая завершения процесса конфигурирования, тем самым ускоряя загрузку системы. -+ -Фоновое конфигурирование не создает проблем в случае, если сервер DHCP быстро отвечает на запросы, и процесс конфигурирования происходит быстро. Однако, в некоторых случаях настройка по DHCP может длиться значительное время. При этом запуск сетевых сервисов может потерпеть неудачу, если будет произведен ранее завершения конфигурирования по DHCP. Запуск DHCP в _синхронном_ режиме предотвращает проблему, откладывая выполнение остальных стартовых скриптов до момента завершения конфигурирования по DHCP. -+ -Для осуществления фонового конфигурирования по DHCP (асинхронный режим), используйте значение "`DHCP`" в [.filename]#/etc/rc.conf#: -+ [.programlisting] .... -ifconfig_fxp0="DHCP" +# Frontend settings +# +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAccess: to * by * read +# +# Sample global access control policy: +# Root DSE: allow anyone to read it +# Subschema (sub)entry DSE: allow anyone to read it +# Other DSEs: +# Allow self write access +# Allow authenticated users read access +# Allow anonymous users to authenticate +# +#olcAccess: to dn.base="" by * read +#olcAccess: to dn.base="cn=Subschema" by * read +#olcAccess: to * +# by self write +# by users read +# by anonymous auth +# +# if no access controls are present, the default policy +# allows anyone and everyone to read anything but restricts +# updates to rootdn. (e.g., "access to * by * read") +# +# rootdn can always read and write EVERYTHING! +# +olcPasswordHash: {SSHA} +# {SSHA} is already the default for olcPasswordHash .... -+ -Для откладывания запуска стартовых скриптов до завершения конфигурирования по DHCP (синхронный режим), укажите значение "`SYNCDHCP`": -+ +Еще один раздел посвящен _бэкенду конфигурации_ — единственному способу последующего доступа к конфигурации сервера OpenLDAP, который доступен только глобальному суперпользователю. + [.programlisting] .... -ifconfig_fxp0="SYNCDHCP" +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcAccess: to * by * none +olcRootPW: {SSHA}iae+lrQZILpiUdf16Z9KmDmSwT77Dj4U .... -+ -[NOTE] -==== -Замените используемое в этих примерах имя _fxp0_ на имя интерфейса, который необходимо сконфигурировать динамически, как это описано в crossref:config[config-network-setup,Настройка карт сетевых интерфейсов]. -==== +Имя администратора по умолчанию — `cn=config`. Введите [.filename]#slappasswd# в оболочке, выберите пароль и используйте его хеш в `olcRootPW`. Если этот параметр не указан сейчас, до импорта [.filename]#slapd.ldif#, никто не сможет впоследствии изменить раздел _глобальной конфигурации_. + +Последний раздел посвящен бэкенду базы данных (уровню хранения данных): -+ -Если `dhclient` в вашей системе находится в другом месте или если вы хотите задать дополнительные параметры для `dhclient`, то также укажите следующее (изменив так, как вам нужно): -+ [.programlisting] .... -dhclient_program="/sbin/dhclient" -dhclient_flags="" +####################################################################### +# LMDB database definitions +####################################################################### +# +dn: olcDatabase=mdb,cn=config +objectClass: olcDatabaseConfig +objectClass: olcMdbConfig +olcDatabase: mdb +olcDbMaxSize: 1073741824 +olcSuffix: dc=domain,dc=example +olcRootDN: cn=mdbadmin,dc=domain,dc=example +# Cleartext passwords, especially for the rootdn, should +# be avoided. See slappasswd(8) and slapd-config(5) for details. +# Use of strong authentication encouraged. +olcRootPW: {SSHA}X2wHvIWDk6G76CQyCMS1vDCvtICWgn0+ +# The database directory MUST exist prior to running slapd AND +# should only be accessible by the slapd and slap tools. +# Mode 700 recommended. +olcDbDirectory: /var/db/openldap-data +# Indices to maintain +olcDbIndex: objectClass eq .... -Сервер DHCP, dhcpd, включён как часть порта package:net/isc-dhcp42-server[] в коллекцию портов. Этот порт содержит DHCP-сервер от ISC и документацию. +Эта база данных содержит _фактическое содержимое_ каталога LDAP. Доступны типы, отличные от `mdb`. Суперпользователь (не путать с глобальным) настраивается здесь: (возможно, пользовательское) имя пользователя в `olcRootDN` и хэш пароля в `olcRootPW`; [.filename]#slappasswd# можно использовать, как и раньше. -=== Файлы +Этот http://www.openldap.org/devel/gitweb.cgi?p=openldap.git;a=tree;f=tests/data/regressions/its8444;h=8a5e808e63b0de3d2bdaf2cf34fecca8577ca7fd;hb=HEAD[репозиторий] содержит четыре примера файла [.filename]#slapd.ldif#. Для преобразования существующего [.filename]#slapd.conf# в [.filename]#slapd.ldif# обратитесь к http://www.openldap.org/doc/admin24/slapdconf2.html[этой странице] (обратите внимание, что это может добавить некоторые бесполезные опции). -* [.filename]#/etc/dhclient.conf# -+ -`dhclient` требует наличия конфигурационного файла, [.filename]#/etc/dhclient.conf#. Как правило, файл содержит только комментарии, а настройки по умолчанию достаточно хороши. Этот настроечный файл описан на страницах справочной системы по man:dhclient.conf[5]. -* [.filename]#/sbin/dhclient# -+ -`dhclient` скомпонован статически и находится в каталоге [.filename]#/sbin#. На страница Справочника man:dhclient[8] дается более подробная информация о `dhclient`. -* [.filename]#/sbin/dhclient-script# -+ -`dhclient-script` является специфичным для FreeBSD скриптом настройки клиента DHCP. Он описан в man:dhclient-script[8], но для нормального функционирования никаких модификаций со стороны пользователя не требуется. -* [.filename]#/var/db/dhclient.leases# -+ -В этом файле клиент DHCP хранит базу данных выданных к использованию адресов в виде журнала. На странице man:dhclient.leases[5] дается гораздо более подробное описание. +После завершения настройки файл [.filename]#slapd.ldif# должен быть скопирован в пустую директорию. Рекомендуется создать её следующим образом: -=== Дополнительная литература +[source, shell] +.... +# mkdir /usr/local/etc/openldap/slapd.d/ +.... -Полное описание протокола DHCP дается в http://www.freesoft.org/CIE/RFC/2131/[RFC 2131]. Кроме того, дополнительная информация есть на сервере http://www.dhcp.org/[http://www.dhcp.org/]. +Импорт базы данных конфигурации: -[[network-dhcp-server]] -=== Установка и настройка сервера DHCP +[source, shell] +.... +# /usr/local/sbin/slapadd -n0 -F /usr/local/etc/openldap/slapd.d/ -l /usr/local/etc/openldap/slapd.ldif +.... -==== Чему посвящён этот раздел +Запустите демон [.filename]#slapd#: -Этот раздел даёт информацию о том, как настроить систему FreeBSD для работы в качестве сервера DHCP на основе реализации пакета DHCP от ISC (Internet Systems Consortium). +[source, shell] +.... +# /usr/local/libexec/slapd -F /usr/local/etc/openldap/slapd.d/ +.... -Серверная часть пакета не поставляется как часть FreeBSD, так что вам потребуется установить порт package:net/isc-dhcp42-server[] для получения этого сервиса. Обратитесь к crossref:ports[ports, Установка приложений. порты и пакеты] для получения более полной информации об использовании коллекции портов. +Опция `-d` может использоваться для отладки, как указано в slapd(8). Чтобы проверить, что сервер запущен и работает: -==== Установка сервера DHCP +[source, shell] +.... +# ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts +# extended LDIF +# +# LDAPv3 +# base <> with scope baseObject +# filter: (objectclass=*) +# requesting: namingContexts +# -Для того, чтобы настроить систему FreeBSD на работу в качестве сервера DHCP, вам необходимо обеспечить присутствие устройства man:bpf[4], вкомпилированного в ядро. Для этого добавьте строку `device bpf` в файл конфигурации вашего ядра. Для получения более полной информации о построении ядер, обратитесь к crossref:kernelconfig[kernelconfig, Настройка ядра FreeBSD]. +# +dn: +namingContexts: dc=domain,dc=example -Устройство [.filename]#bpf# уже входит в состав ядра [.filename]#GENERIC#, поставляемого с FreeBSD, так что вам не нужно создавать собственное ядро для обеспечения работы DHCP. +# search result +search: 2 +result: 0 Success -[NOTE] -==== -Те, кто обращает особое внимание на вопросы безопасности, должны заметить, что [.filename]#bpf# является тем устройством, что позволяет нормально работать снифферам пакетов (хотя таким программам требуются привилегированный доступ). Наличие устройства [.filename]#bpf#_обязательно_ для использования DHCP, но если вы очень обеспокоены безопасностью, наверное, вам не нужно включать [.filename]#bpf# в ваше ядро только потому, что в отдалённом будущем вы собираетесь использовать DHCP. -==== +# numResponses: 2 +# numEntries: 1 +.... -Следующим действием, которое вам нужно выполнить, является редактирование примерного [.filename]#dhcpd.conf#, который устанавливается в составе порта package:net/isc-dhcp42-server[]. По умолчанию это файл [.filename]#/usr/local/etc/dhcpd.conf.sample#, и вы должны скопировать его в файл [.filename]#/usr/local/etc/dhcpd.conf# перед тем, как его редактировать. +Сервер по-прежнему должен быть доверенным. Если это никогда не делалось ранее, следуйте этим инструкциям. Установите пакет или порт OpenSSL: -==== Настройка сервера DHCP +[source, shell] +.... +# pkg install openssl +.... -[.filename]#dhcpd.conf# состоит из деклараций относительно подсетей и хостов, и проще всего описывается на примере: +Из каталога, где находится [.filename]#ca.crt# (в данном примере, [.filename]#/usr/local/etc/openldap#), выполните: -[.programlisting] +[source, shell] +.... +# c_rehash . .... -option domain-name "example.com";<.> -option domain-name-servers 192.168.4.100;<.> -option subnet-mask 255.255.255.0;<.> -default-lease-time 3600;<.> -max-lease-time 86400;<.> -ddns-update-style none;<.> +И сертификат центра сертификации, и сертификат сервера теперь правильно распознаются в своих соответствующих ролях. Чтобы проверить это, выполните следующую команду из директории, где находится [.filename]#server.crt#: -subnet 192.168.4.0 netmask 255.255.255.0 { - range 192.168.4.129 192.168.4.254;<.> - option routers 192.168.4.1;<.> -} +[source, shell] +.... +# openssl verify -verbose -CApath . server.crt +.... -host mailhost { - hardware ethernet 02:03:04:05:06:07;<.> - fixed-address mailhost.example.com;<.> -} +Если [.filename]#slapd# был запущен, перезапустите его. Как указано в [.filename]#/usr/local/etc/rc.d/slapd#, для корректного запуска [.filename]#slapd# при загрузке следующие строки должны быть добавлены в [.filename]#/etc/rc.conf#: + +[.programlisting] +.... +slapd_enable="YES" +slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ +ldap://0.0.0.0/"' +slapd_sockets="/var/run/openldap/ldapi" +slapd_cn_config="YES" .... -<.> Этот параметр задаёт домен, который будет выдаваться клиентам в качестве домена, используемого по умолчанию при поиске. Обратитесь к страницам справочной системы по man:resolv.conf[5] для получения дополнительной информации о том, что это значит. +[.filename]#slapd# не предоставляет отладку при загрузке. Для этой цели проверьте [.filename]#/var/log/debug.log#, [.filename]#dmesg -a# и [.filename]#/var/log/messages#. -<.> Этот параметр задаёт список разделённых запятыми серверов DNS, которые должен использовать клиент. +Следующий пример добавляет группу `team` и пользователя `john` в базу данных LDAP `domain.example`, которая пока пуста. Сначала создайте файл [.filename]#domain.ldif#: -<.> Маска сети, которая будет выдаваться клиентам. +[source, shell] +.... +# cat domain.ldif +dn: dc=domain,dc=example +objectClass: dcObject +objectClass: organization +o: domain.example +dc: domain -<.> Клиент может запросить определённое время, которое будет действовать выданная информация. В противном случае сервер выдаст настройки с этим сроком (в секундах). +dn: ou=groups,dc=domain,dc=example +objectClass: top +objectClass: organizationalunit +ou: groups -<.> Это максимальное время, на которое сервер будет выдавать конфигурацию. Если клиент запросит больший срок, он будет подтверждён, но будет действовать только `max-lease-time` секунд. +dn: ou=users,dc=domain,dc=example +objectClass: top +objectClass: organizationalunit +ou: users -<.> Этот параметр задаёт, будет ли сервер DHCP пытаться обновить DNS при выдаче или освобождении конфигурационной информации. В реализации ISC этот параметр является _обязательным_. +dn: cn=team,ou=groups,dc=domain,dc=example +objectClass: top +objectClass: posixGroup +cn: team +gidNumber: 10001 -<.> Это определение того, какие IP-адреса должны использоваться в качестве резерва для выдачи клиентам. IP-адреса между и включая границы, будут выдаваться клиентам. +dn: uid=john,ou=users,dc=domain,dc=example +objectClass: top +objectClass: account +objectClass: posixAccount +objectClass: shadowAccount +cn: John McUser +uid: john +uidNumber: 10001 +gidNumber: 10001 +homeDirectory: /home/john/ +loginShell: /usr/bin/bash +userPassword: secret +.... -<.> Объявление маршрутизатора, используемого по умолчанию, который будет выдаваться клиентам. +См. документацию OpenLDAP для получения более подробной информации. Используйте [.filename]#slappasswd# для замены пароля в открытом тексте `secret` на хеш в `userPassword`. Путь, указанный как `loginShell`, должен существовать во всех системах, где `john` имеет право входить. Наконец, используйте администратора `mdb` для изменения базы данных: -<.> Аппаратный MAC-адрес хоста (чтобы сервер DHCP мог распознать хост, когда тот делает запрос). +[source, shell] +.... +# ldapadd -W -D "cn=mdbadmin,dc=domain,dc=example" -f domain.ldif +.... -<.> Определение того, что хосту всегда будет выдаваться один и тот же IP-адрес. Заметьте, что указание здесь имени хоста корректно, так как сервер DHCP будет разрешать имя хоста самостоятельно до того, как выдать конфигурационную информацию. +Изменения в разделе _глобальной конфигурации_ могут выполняться только глобальным суперпользователем. Например, предположим, что изначально была указана опция `olcTLSCipherSuite: HIGH:MEDIUM:SSLv3`, которую теперь необходимо удалить. Сначала создайте файл, содержащий следующее: -Когда вы закончите составлять свой [.filename]#dhcpd.conf#, нужно разрешить запуск сервера DHCP в файле [.filename]#/etc/rc.conf#, добавив в него строки +[source, shell] +.... +# cat global_mod +dn: cn=config +changetype: modify +delete: olcTLSCipherSuite +.... -[.programlisting] +Затем примените изменения: + +[source, shell] .... -dhcpd_enable="YES" -dhcpd_ifaces="dc0" +# ldapmodify -f global_mod -x -D "cn=config" -W .... -Замените `dc0` именем интерфейса (или именами интерфейсов, разделяя их пробелами), на котором(ых) сервер DHCP должен принимать запросы от клиентов. +При запросе введите пароль, выбранный в разделе _бекенда конфигурации_. Имя пользователя не требуется: здесь `cn=config` представляет DN раздела базы данных, который нужно изменить. Альтернативно, используйте `ldapmodify` для удаления отдельной строки базы данных или `ldapdelete` для удаления всей записи. -Затем вы можете стартовать сервер DHCP при помощи команды +Если что-то пойдет не так или если глобальный суперпользователь не сможет получить доступ к бэкенду конфигурации, можно удалить и перезаписать всю конфигурацию: -[source,shell] +[source, shell] .... -# /usr/local/etc/rc.d/isc-dhcpd start +# rm -rf /usr/local/etc/openldap/slapd.d/ .... -Если в будущем вам понадобится сделать изменения в настройке вашего сервера, то важно заметить, что посылка сигнала `SIGHUP` приложению dhcpd_не приведёт_ к перезагрузке настроек, как это бывает для большинства даемонов. Вам нужно послать сигнал `SIGTERM` для остановки процесса, а затем перезапустить его при помощи вышеприведённой команды. +[.filename]#slapd.ldif# затем можно отредактировать и снова импортировать. Пожалуйста, следуйте этой процедуре только в том случае, если нет другого доступного решения. -==== Файлы +Это конфигурация только сервера. На той же машине также может быть размещен LDAP-клиент с собственной отдельной конфигурацией. -* [.filename]#/usr/local/sbin/dhcpd# -+ -dhcpd скомпонован статически и расположен в каталоге [.filename]#/usr/local/sbin#. Страницы справочной системы man:dhcpd[8], устанавливаемые портом, содержат более полную информацию о dhcpd. -* [.filename]#/usr/local/etc/dhcpd.conf# -+ -dhcpd требует наличия конфигурационного файла, [.filename]#/usr/local/etc/dhcpd.conf#, до того, как он будет запущен и начнёт предоставлять сервис клиентам. Необходимо, чтобы этот файл содержал все данные, которая будет выдаваться обслуживаемым клиентам, а также информацию о работе сервера. Этот конфигурационный файл описывается на страницах справочной системы man:dhcpd.conf[5], которые устанавливаются портом. -* [.filename]#/var/db/dhcpd.leases# -+ -Сервер DHCP ведёт базу данных выданной информации в этом файле, который записывается в виде протокола. Страницы справочной системы man:dhcpd.leases[5], устанавливаемые портом, дают гораздо более подробное описание. -* [.filename]#/usr/local/sbin/dhcrelay# -+ -dhcrelay используется в сложных ситуациях, когда сервер DHCP пересылает запросы от клиента другому серверу DHCP в отдельной сети. Если вам нужна такая функциональность, то установите порт package:net/isc-dhcp42-relay[]. На страницах справочной системы man:dhcrelay[8], которые устанавливаются портом, даётся более полное описание. +[[network-dhcp]] +== Протокол динамической конфигурации узла (DHCP) -[[network-dns]] -== Domain Name System (DNS) +Протокол динамической конфигурации узла (DHCP —Dynamic Host Configuration Protocol) позволяет системе подключаться к сети для получения необходимой адресной информации для общения в этой сети. FreeBSD включает версию `dhclient` от OpenBSD, которая используется клиентом для получения адресной информации. FreeBSD не устанавливает сервер DHCP, но несколько серверов доступны в коллекции портов FreeBSD. Протокол DHCP полностью описан в http://www.freesoft.org/CIE/RFC/2131/[RFC 2131]. Информационные ресурсы также доступны на http://www.isc.org/downloads/dhcp/[isc.org/downloads/dhcp/]. -=== Обзор +Этот раздел описывает, как использовать встроенный DHCP-клиент. Затем он описывает, как установить и настроить DHCP-сервер. -По умолчанию во FreeBSD используется одна из версий программы BIND (Berkeley Internet Name Domain), являющейся самой распространенной реализацией протокола DNS. DNS - это протокол, при помощи которого имена преобразуются в IP-адреса и наоборот. Например, в ответ на запрос о `www.FreeBSD.org` будет получен IP-адрес веб-сервера Проекта FreeBSD, а запрос о `ftp.FreeBSD.org` возвратит IP-адрес соответствующей машины с FTP-сервером. Точно также происходит и обратный процесс. Запрос, содержащий IP-адрес машины, возвратит имя хоста. Для выполнения запросов к DNS вовсе не обязательно иметь в системе работающий сервер имён. +[NOTE] +==== +В FreeBSD устройство man:bpf[4] необходимо как для сервера DHCP, так и для клиента DHCP. Это устройство включено в ядро [.filename]#GENERIC#, которое устанавливается с FreeBSD. Пользователям, предпочитающим создавать собственное ядро, необходимо оставить это устройство, если используется DHCP. -FreeBSD в настоящее время поставляется с сервером DNSBIND9, предоставляющим расширенные настройки безопасности, новую схему расположения файлов конфигурации и автоматические настройки для man:chroot[8]. +Следует отметить, что [.filename]#bpf# также позволяет привилегированным пользователям запускать анализаторы сетевых пакетов в этой системе. +==== -В сети Интернет DNS управляется через достаточно сложную систему авторизированных корневых серверов имён, серверов доменов первого уровня (Top Level Domain, TLD) и других менее крупных серверов имён, которые содержат и кэшируют информацию о конкретных доменах. -На данный момент пакет BIND поддерживается Internet Systems Consortium https://www.isc.org/[https://www.isc.org/]. +=== Настройка клиента DHCP -=== Используемая терминология +Поддержка DHCP-клиента включена в установщик FreeBSD, что позволяет легко настроить новую систему для автоматического получения сетевой адресации от существующего DHCP-сервера. Примеры настройки сети можно найти в разделе crossref:bsdinstall[bsdinstall-post,"Учетные записи, Часовая зона, Службы и Защита"]. -Для понимания этого документа нужно понимать значения некоторых терминов, связанных с работой DNS. +Когда `dhclient` выполняется на клиентской машине, он начинает транслировать запросы на получение конфигурационной информации. По умолчанию эти запросы используют UDP-порт 68. Сервер отвечает на UDP-порту 67, предоставляя клиенту IP-адрес и другую соответствующую сетевую информацию, такую как маска подсети, шлюз по умолчанию и адреса DNS-серверов. Эта информация предоставляется в форме "аренды" DHCP и действительна в течение настраиваемого времени. Это позволяет автоматически повторно использовать устаревшие IP-адреса для клиентов, которые больше не подключены к сети. Клиенты DHCP могут получить от сервера большое количество информации. Полный список можно найти в man:dhcp-options[5]. -[.informaltable] -[cols="1,1", frame="none", options="header"] -|=== -| Термин -| Определение +По умолчанию, при загрузке системы FreeBSD её DHCP-клиент работает в фоновом режиме или _асинхронно_. Другие скрипты запуска продолжают выполняться, пока завершается процесс DHCP, что ускоряет загрузку системы. -|Прямой запрос к DNS (forward DNS) -|Преобразование имён хостов в адреса IP +DHCP в фоновом режиме работает хорошо, когда сервер DHCP быстро отвечает на запросы клиента. Однако на некоторых системах выполнение DHCP может занять много времени. Если сетевые службы пытаются запуститься до того, как DHCP назначит информацию о сетевой адресации, они завершатся с ошибкой. Использование DHCP в _синхронном_ режиме предотвращает эту проблему, приостанавливая запуск до завершения настройки DHCP. -|Ориджин (origin) -|Обозначает домен, покрываемый конкретным файлом зоны +Эта строка в [.filename]#/etc/rc.conf# используется для настройки фонового или асинхронного режима: -|named, bind -|Общеупотребительные названия для обозначения пакета BIND, обеспечивающего работу сервера имён во FreeBSD. +[.programlisting] +.... +ifconfig_fxp0="DHCP" +.... -|Резолвер -|Системный процесс, посредством которого машина обращается к серверу имён для получения информации о зоне +Эта строка может уже существовать, если система была настроена на использование DHCP во время установки. Замените `_fxp0_`, указанный в этих примерах, на имя интерфейса, который нужно настроить динамически, как описано в crossref:config[config-network-setup,"Настройка сетевых интерфейсов"]. -|Обратный DNS (reverse DNS) -|Преобразование адресов IP в имена хостов +Для настройки системы на использование синхронного режима с приостановкой во время запуска до завершения DHCP используйте "`SYNCDHCP`": -|Корневая зона -|Начало иерархии зон Интернет. Все зоны находятся под корневой зоной, подобно тому, как все файлы располагаются ниже корневого каталога. +[.programlisting] +.... +ifconfig_fxp0="SYNCDHCP" +.... -|Зона -|Отдельный домен, поддомен или часть DNS, управляемая одним сервером. -|=== +Есть еще несколько опций клиента. Подробности смотрите в man:rc.conf[5], выполнив поиск по `dhclient`. -Примеры зон: +Клиент DHCP использует следующие файлы: + +* [.filename]#/etc/dhclient.conf# ++ +Файл конфигурации, используемый `dhclient`. Обычно этот файл содержит только комментарии, так как значения по умолчанию подходят для большинства клиентов. Этот конфигурационный файл описан в man:dhclient.conf[5]. +* [.filename]#/sbin/dhclient# ++ +Дополнительную информацию о самой команде можно найти в man:dhclient[8]. +* [.filename]#/sbin/dhclient-script# ++ +Специфичный для FreeBSD скрипт конфигурации DHCP-клиента. Он описан в man:dhclient-script[8], но для правильной работы не требует изменений со стороны пользователя. +* [.filename]#/var/db/dhclient.leases.interface# ++ +Клиент DHCP сохраняет базу данных действительных аренд в этом файле, который записывается как журнал и описывается в man:dhclient.leases[5]. -* `.` - так обычно обозначается в документации корневая зона. -* `org.` - домен верхнего уровня (TLD) в корневой зоне. -* `example.org.` является зоной в домене верхнего уровня (TLD) `org.`. -* `1.168.192.in-addr.arpa` является зоной, в которую включены все IP-адреса, формирующие пространство адресов `192.168.1.*`. -Как можно видеть, уточняющая часть имени хоста появляется слева. Например, `example.org.` более точен, чем `org.`, также, как `org.` более точен, чем корневая зона. Расположение каждой части имени хоста сильно похоже на файловую систему: каталог [.filename]#/dev# расположен в корневой файловой системе, и так далее. +[[network-dhcp-server]] +=== Установка и настройка сервера DHCP -=== Причины, по которым вам может понадобиться сервер имён +В этом разделе показано, как настроить систему FreeBSD в качестве DHCP-сервера с использованием реализации DHCP-сервера от Консорциума Интернет-систем (ISC —Internet Systems Consortium). Эту реализацию и её документацию можно установить с помощью пакета package:net/isc-dhcp44-server[] или порта. -Сервера имён обычно используются в двух видах: авторитетный сервер имён и кэширующий сервер имён, также называемый распознавателем (resolver). +Установка пакета package:net/isc-dhcp44-server[] включает образец файла конфигурации. Скопируйте [.filename]#/usr/local/etc/dhcpd.conf.example# в [.filename]#/usr/local/etc/dhcpd.conf# и внесите необходимые изменения в этот новый файл. -Авторитетный сервер имён нужен, когда: +Файл конфигурации состоит из объявлений для подсетей и хостов, которые определяют информацию, предоставляемую клиентам DHCP. Например, следующие строки настраивают следующее: -* нужно предоставлять информацию о DNS остальному миру, отвечая на запросы авторизированно. -* зарегистрирован домен, такой, как `example.org` и в этом домене требуется поставить имена машин в соответствие с их адресами IP. -* блоку адресов IP требуется обратные записи DNS (IP в имена хостов). -* резервный (slave) сервер имён должен отвечать на запросы. +[.programlisting] +.... +option domain-name "example.org";<.> +option domain-name-servers ns1.example.org;<.> +option subnet-mask 255.255.255.0;<.> -Кэширующий сервер имён нужен, когда: +default-lease-time 600;<.> +max-lease-time 72400;<.> +ddns-update-style none;<.> -* локальный сервер DNS может кэшировать информацию и отвечать на запросы быстрее, чем это происходит при прямом опросе внешнего сервера имён. +subnet 10.254.239.0 netmask 255.255.255.224 { + range 10.254.239.10 10.254.239.20;<.> + option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;<.> +} -Например, когда кто-нибудь запрашивает информацию о `www.FreeBSD.org`, то обычно резолвер обращается к серверу имён вашего провайдера, посылает запрос и ожидает ответа. С локальным кэширующим сервером DNS запрос во внешний мир будет делаться всего один раз. Последующие запросы не будут посылаться за пределы локальной сети, потому что информация уже имеется в кэше. +host fantasia { + hardware ethernet 08:00:07:26:c0:a5;<.> + fixed-address fantasia.fugue.com;<.> +} +.... -=== Как это работает +<.> Этот параметр задаёт домен поиска по умолчанию, который будет предоставляться клиентам. Дополнительную информацию можно найти в man:resolv.conf[5]. +<.> Эта опция определяет разделённый запятыми список DNS-серверов, которые должен использовать клиент. Они могут быть указаны по их Полным Доменным Именам (FQDN), как показано в примере, или по их IP-адресам. +<.> Маска подсети, которая будет предоставлена клиентам. +<.> Время истечения аренды по умолчанию в секундах. Клиент может быть настроен для переопределения этого значения. +<.> Максимально допустимая продолжительность аренды в секундах. Если клиент запросит аренду на более длительный срок, аренда всё равно будет выдана, но будет действительна только в течение `max-lease-time`. +<.> Значение по умолчанию `none` отключает динамические обновления DNS. Изменение этого параметра на `interim` настраивает DHCP-сервер на обновление DNS-сервера при каждой выдаче аренды, чтобы DNS-сервер знал, какие IP-адреса связаны с какими компьютерами в сети. Не изменяйте значение по умолчанию, если DNS-сервер не настроен для поддержки динамического DNS. +<.> Эта строка создает пул доступных IP-адресов, зарезервированных для выделения клиентам DHCP. Диапазон адресов должен быть действительным для сети или подсети, указанной в предыдущей строке. +<.> Объявляет шлюз по умолчанию, действительный для сети или подсети, указанной перед открывающей скобкой `{`. +<.> Указывает аппаратный MAC-адрес клиента, чтобы DHCP-сервер мог распознать клиента при его запросе. +<.> Указывает, что данный узел всегда должен получать один и тот же IP-адрес. Использование имени узла корректно, так как DHCP-сервер разрешит имя узла перед возвратом информации об аренде. -Во FreeBSD даемон BIND называется named. +Этот файл конфигурации поддерживает гораздо больше опций. Подробности и примеры смотрите в dhcpd.conf(5), который устанавливается вместе с сервером. -[.informaltable] -[cols="1,1", frame="none", options="header"] -|=== -| Файл -| Описание +После завершения настройки [.filename]#dhcpd.conf# включите DHCP-сервер в [.filename]#/etc/rc.conf#: -|man:named[8] -|Даемон BIND +[.programlisting] +.... +dhcpd_enable="YES" +dhcpd_ifaces="dc0" +.... -|man:rndc[8] -|Программа управления даемоном сервера имён +Замените `dc0` на интерфейс (или интерфейсы, разделенные пробелами), на котором DHCP-сервер должен ожидать запросы от DHCP-клиентов. -|[.filename]#/etc/namedb# -|Каталог, в котором располагается вся информация о зонах BIND +Запустите сервер, выполнив следующую команду: -|[.filename]#/etc/namedb/named.conf# -|Конфигурационный файл для даемона -|=== +[source, shell] +.... +# service isc-dhcpd start +.... -Файлы зон обычно располагаются в каталоге [.filename]#/etc/namedb# и содержат информацию о зоне DNS, за которую отвечает сервер имён. +Любые последующие изменения конфигурации сервера потребуют остановки и последующего запуска службы dhcpd с помощью man:service[8]. -В зависимости от способа конфигурации зоны на сервере файлы зон могут располагаться в подкаталогах [.filename]#master#, [.filename]#slave# или [.filename]#dynamic# иерархии [.filename]#/etc/namedb#. Эти файлы содержат DNS информацию, которую и будет сообщать в ответ на запросы сервер имен. +Сервер DHCP использует следующие файлы. Обратите внимание, что страницы руководства устанавливаются вместе с серверным программным обеспечением. -=== Запуск BIND +* [.filename]#/usr/local/sbin/dhcpd# ++ +Дополнительную информацию о сервере dhcpd можно найти в dhcpd(8). +* [.filename]#/usr/local/etc/dhcpd.conf# ++ +Файл конфигурации сервера должен содержать всю информацию, которую необходимо предоставить клиентам, а также сведения о работе сервера. Этот конфигурационный файл описан в dhcpd.conf(5). +* [.filename]#/var/db/dhcpd.leases# ++ +Сервер DHCP ведет базу данных выданных аренд в этом файле, который записывается в виде журнала. Обратитесь к dhcpd.leases(5), где приводится несколько более подробное описание. +* [.filename]#/usr/local/sbin/dhcrelay# ++ +Этот демон используется в сложных средах, где один DHCP-сервер перенаправляет запрос от клиента другому DHCP-серверу в отдельной сети. Если требуется такая функциональность, установите пакет package:net/isc-dhcp44-relay[] или соответствующий порт. Установка включает dhcrelay(8), где приведены более подробные сведения. -Так как сервер имён BIND устанавливается по умолчанию, его настройка сравнительно проста. -Стандартная конфигурация named запускает простой кэширующий сервер в ограниченной среде man:chroot[8], который прослушивает запросы на интерфейсе обратной связи (loopback) с адресом (127.0.0.1). Для одноразового запуска даемона в этой конфигурации используйте команду +[[network-dns]] +== Система доменных имен (DNS) -[source,shell] -.... -# /etc/rc.d/named onestart -.... +Система доменных имен (DNS) — это протокол, который сопоставляет доменные имена с IP-адресами и наоборот. DNS координируется в масштабах Интернета через довольно сложную систему авторитетных корневых серверов, серверов доменов верхнего уровня (TLD — Top Level Domain) и других менее масштабных серверов имен, которые хранят и кэшируют информацию об отдельных доменах. Для выполнения DNS-запросов в системе не обязательно запускать сервер имен. -Чтобы даемон named запускался во время загрузки, поместите в [.filename]#/etc/rc.conf# следующую строку: +Следующая таблица описывает некоторые термины, связанные с DNS: -[.programlisting] -.... -named_enable="YES" -.... +.Терминология DNS +[cols="1,1", frame="none", options="header"] +|=== +| Термин +| Определение -Разумеется, существует множество различных конфигураций [.filename]#/etc/namedb/named.conf#, лежащих за рамками данного документа. Разнообразные опции запуска named во FreeBSD описаны в переменных `named__*_` файла [.filename]#/etc/defaults/rc.conf# и странице справочника man:rc.conf[5]. Кроме того, полезной может оказаться crossref:config[configtuning-rcd,Использование rc во FreeBSD 5.X и последующих версиях]. +|Прямая запись DNS (Forward DNS) +|Сопоставление имен хостов с IP-адресами. -=== Конфигурационные файлы +|Зона ответственности (Origin) +|Относится к домену, охватываемому определенным файлом зоны. -Файлы конфигурации даемона named расположены в каталоге [.filename]#/etc/namedb# и, за исключением случая, когда вам требуется просто резолвер, требуют модификации. +|Резолвер (Resolver) +|Системный процесс, с помощью которого машина запрашивает у сервера имен информацию о зоне. -==== [.filename]#/etc/namedb/named.conf# +|Обратная запись DNS (Reverse DNS) +|Сопоставление IP-адресов с именами хостов. -[.programlisting] -.... -// $FreeBSD$ -// -// If you are going to set up an authoritative server, make sure you -// understand the hairy details of how DNS works. Even with -// simple mistakes, you can break connectivity for affected parties, -// or cause huge amounts of useless Internet traffic. +|Корневая зона (Root zone) +|Начало иерархии зон Интернета. Все зоны находятся под корневой зоной, аналогично тому, как все файлы в файловой системе находятся под корневым каталогом. -options { - // All file and path names are relative to the chroot directory, - // if any, and should be fully qualified. - directory "/etc/namedb/working"; - pid-file "/var/run/named/pid"; - dump-file "/var/dump/named_dump.db"; - statistics-file "/var/stats/named.stats"; +|Зона (Zone) +|Отдельный домен, поддомен или часть DNS, управляемые одной организацией. +|=== -// If named is being used only as a local resolver, this is a safe default. -// For named to be accessible to the network, comment this option, specify -// the proper IP address, or delete this option. - listen-on { 127.0.0.1; }; +Примеры зон: -// If you have IPv6 enabled on this system, uncomment this option for -// use as a local resolver. To give access to the network, specify -// an IPv6 address, or the keyword "any". -// listen-on-v6 { ::1; }; +* `.` — так обычно обозначается корневая зона в документации. +* `org.` — это домен верхнего уровня (TLD) в корневой зоне. +* `example.org.` — это зона под доменом `org.`. +* `1.168.192.in-addr.arpa` — это зона, содержащая ссылки на все IP-адреса, входящие в адресное пространство `192.168.1.*`. -// These zones are already covered by the empty zones listed below. -// If you remove the related empty zones below, comment these lines out. - disable-empty-zone "255.255.255.255.IN-ADDR.ARPA"; - disable-empty-zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA"; - disable-empty-zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA"; +Как видно, более специфичная часть имени хоста расположена слева. Например, `example.org.` более специфично, чем `org.`, а `org.` более специфично, чем корневая зона. Структура каждой части имени хоста во многом напоминает файловую систему: каталог [.filename]#/dev# находится в корне и так далее. -// If you've got a DNS server around at your upstream provider, enter -// its IP address here, and enable the line below. This will make you -// benefit from its cache, thus reduce overall DNS traffic in the Internet. -/* - forwarders { - 127.0.0.1; - }; -*/ +=== Причины для запуска сервера имен -// If the 'forwarders' clause is not empty the default is to 'forward first' -// which will fall back to sending a query from your local server if the name -// servers in 'forwarders' do not have the answer. Alternatively you can -// force your name server to never initiate queries of its own by enabling the -// following line: -// forward only; +Серверы имен обычно бывают двух видов: авторитетные DNS-серверы и кэширующие DNS-серверы (также известные как резолвинг-серверы). -// If you wish to have forwarding configured automatically based on -// the entries in /etc/resolv.conf, uncomment the following line and -// set named_auto_forward=yes in /etc/rc.conf. You can also enable -// named_auto_forward_only (the effect of which is described above). -// include "/etc/namedb/auto_forward.conf"; -.... +Авторитетный сервер имен необходим, когда: -Как и говорится в комментариях, если вы хотите получить эффект от использования кэша провайдера, то можно включить раздел `forwarders`. В обычном случае сервер имён будет рекурсивно опрашивать определённые серверы имён Интернет до тех пор, пока не получит ответ на свой запрос. При включении этого раздела он будет автоматически опрашивать сервер имён вашего провайдера (или тот, который здесь указан), используя преимущества его кэша. наличия нужной информации. Если соответствующий сервер имён провайдера работает быстро и имеет хороший канал связи, то в результате такой настройки вы можете получить хороший результат. +* Хочется предоставлять DNS-информацию для всего мира, отвечая на запросы авторитетно. +* Домен, например `example.org`, зарегистрирован, и IP-адреса должны быть назначены именам хостов в нём. +* Блок IP-адресов требует обратных DNS-записей (IP к имени хоста). +* Резервный или вторичный сервер имен, называемый подчиненным (slave), будет отвечать на запросы. -[WARNING] -==== +Кэширующий сервер имен необходим, когда: -`127.0.0.1` здесь работать _не будет_. Измените его на IP-адрес сервера имён провайдера. -==== +* Локальный DNS-сервер может кэшировать и отвечать быстрее, чем запрос к внешнему серверу имен. -[.programlisting] -.... -/* - Modern versions of BIND use a random UDP port for each outgoing - query by default in order to dramatically reduce the possibility - of cache poisoning. All users are strongly encouraged to utilize - this feature, and to configure their firewalls to accommodate it. - - AS A LAST RESORT in order to get around a restrictive firewall - policy you can try enabling the option below. Use of this option - will significantly reduce your ability to withstand cache poisoning - attacks, and should be avoided if at all possible. - - Replace NNNNN in the example with a number between 49160 and 65530. - */ - // query-source address * port NNNNN; -}; - -// If you enable a local name server, don't forget to enter 127.0.0.1 -// first in your /etc/resolv.conf so this server will be queried. -// Also, make sure to enable it in /etc/rc.conf. - -// The traditional root hints mechanism. Use this, OR the slave zones below. -zone "." { type hint; file "/etc/namedb/named.root"; }; - -/* Slaving the following zones from the root name servers has some - significant advantages: - 1. Faster local resolution for your users - 2. No spurious traffic will be sent from your network to the roots - 3. Greater resilience to any potential root server failure/DDoS - - On the other hand, this method requires more monitoring than the - hints file to be sure that an unexpected failure mode has not - incapacitated your server. Name servers that are serving a lot - of clients will benefit more from this approach than individual - hosts. Use with caution. - - To use this mechanism, uncomment the entries below, and comment - the hint zone above. - - As documented at http://dns.icann.org/services/axfr/ these zones: - "." (the root), ARPA, IN-ADDR.ARPA, IP6.ARPA, and ROOT-SERVERS.NET - are available for AXFR from these servers on IPv4 and IPv6: - xfr.lax.dns.icann.org, xfr.cjr.dns.icann.org -*/ -/* -zone "." { - type slave; - file "/etc/namedb/slave/root.slave"; - masters { - 192.5.5.241; // F.ROOT-SERVERS.NET. - }; - notify no; -}; - -zone "arpa" { - type slave; - file "/etc/namedb/slave/arpa.slave"; - masters { - 192.5.5.241; // F.ROOT-SERVERS.NET. - }; - notify no; -}; -*/ - -/* Serving the following zones locally will prevent any queries - for these zones leaving your network and going to the root - name servers. This has two significant advantages: - 1. Faster local resolution for your users - 2. No spurious traffic will be sent from your network to the roots -*/ -// RFCs 1912 and 5735 (and BCP 32 for localhost) -zone "localhost" { type master; file "/etc/namedb/master/localhost-forward.db"; }; -zone "127.in-addr.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; }; -zone "255.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; - -// RFC 1912-style zone for IPv6 localhost address -zone "0.ip6.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; }; - -// "This" Network (RFCs 1912 and 5735) -zone "0.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; - -// Private Use Networks (RFCs 1918 and 5735) -zone "10.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "16.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "17.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "18.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "19.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "20.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "21.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "22.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "23.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "24.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "25.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "26.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "27.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "28.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "29.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "30.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "31.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "168.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; - -// Link-local/APIPA (RFCs 3927 and 5735) -zone "254.169.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; - -// IETF protocol assignments (RFCs 5735 and 5736) -zone "0.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; - -// TEST-NET-[1-3] for Documentation (RFCs 5735 and 5737) -zone "2.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "100.51.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "113.0.203.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; - -// IPv6 Range for Documentation (RFC 3849) -zone "8.b.d.0.1.0.0.2.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; - -// Domain Names for Documentation and Testing (BCP 32) -zone "test" { type master; file "/etc/namedb/master/empty.db"; }; -zone "example" { type master; file "/etc/namedb/master/empty.db"; }; -zone "invalid" { type master; file "/etc/namedb/master/empty.db"; }; -zone "example.com" { type master; file "/etc/namedb/master/empty.db"; }; -zone "example.net" { type master; file "/etc/namedb/master/empty.db"; }; -zone "example.org" { type master; file "/etc/namedb/master/empty.db"; }; - -// Router Benchmark Testing (RFCs 2544 and 5735) -zone "18.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "19.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; - -// IANA Reserved - Old Class E Space (RFC 5735) -zone "240.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "241.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "242.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "243.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "244.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "245.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "246.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "247.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "248.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "249.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "250.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "251.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "252.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "253.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "254.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; - -// IPv6 Unassigned Addresses (RFC 4291) -zone "1.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "3.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "4.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "5.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "6.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "7.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "8.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "9.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "a.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "b.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "c.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "d.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "e.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "0.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "1.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "2.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "3.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "4.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "5.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "6.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "7.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "8.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "9.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "a.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "b.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "0.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "1.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "2.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "3.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "4.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "5.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "6.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "7.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; - -// IPv6 ULA (RFC 4193) -zone "c.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "d.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; - -// IPv6 Link Local (RFC 4291) -zone "8.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "9.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "a.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "b.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; - -// IPv6 Deprecated Site-Local Addresses (RFC 3879) -zone "c.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "d.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "e.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -zone "f.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; - -// IP6.INT is Deprecated (RFC 4159) -zone "ip6.int" { type master; file "/etc/namedb/master/empty.db"; }; - -// NB: Do not use the IP addresses below, they are faked, and only -// serve demonstration/documentation purposes! -// -// Example slave zone config entries. It can be convenient to become -// a slave at least for the zone your own domain is in. Ask -// your network administrator for the IP address of the responsible -// master name server. -// -// Do not forget to include the reverse lookup zone! -// This is named after the first bytes of the IP address, in reverse -// order, with ".IN-ADDR.ARPA" appended, or ".IP6.ARPA" for IPv6. -// -// Before starting to set up a master zone, make sure you fully -// understand how DNS and BIND work. There are sometimes -// non-obvious pitfalls. Setting up a slave zone is usually simpler. -// -// NB: Don't blindly enable the examples below. :-) Use actual names -// and addresses instead. - -/* An example dynamic zone -key "exampleorgkey" { - algorithm hmac-md5; - secret "sf87HJqjkqh8ac87a02lla=="; -}; -zone "example.org" { - type master; - allow-update { - key "exampleorgkey"; - }; - file "dynamic/example.org"; -}; -*/ - -/* Example of a slave reverse zone -zone "1.168.192.in-addr.arpa" { - type slave; - file "/etc/namedb/slave/1.168.192.in-addr.arpa"; - masters { - 192.168.1.1; - }; -}; -*/ -.... +Когда кто-нибудь запрашивает информацию о `www.FreeBSD.org`, резолвер обычно обращается к серверу имен провайдера и получает ответ. При использовании локального кэширующего DNS-сервера запрос во внешний мир выполняется только один раз этим сервером. Дополнительные запросы не будут выходить за пределы локальной сети, так как информация сохраняется в локальном кэше. -Это примеры описаний прямой и обратной зон из файла [.filename]#named.conf# для вторичных серверов. +=== Конфигурация DNS-сервера -Для каждого новой зоны, которую будет обслуживать сервер имён, в файл [.filename]#named.conf# должна быть добавлена запись. +Unbound включён в базовую систему FreeBSD. По умолчанию он предоставляет разрешение DNS только для локальной машины. Хотя пакет базовой системы можно настроить для предоставления служб разрешения за пределами локальной машины, рекомендуется удовлетворять такие требования путём установки Unbound из коллекции портов FreeBSD. -К примеру, самая простая запись для домена `example.org` может выглядеть вот так: +Чтобы включить Unbound, добавьте следующую строку в [.filename]#/etc/rc.conf#: [.programlisting] .... -zone "example.org" { - type master; - file "master/example.org"; -}; +local_unbound_enable="YES" .... -Зона является первичной, что отражается в поле `type`, и информация о зоне хранится в файле [.filename]#/etc/namedb/master/example.org#, что указывается в поле `file`. +Любые существующие серверы имен в [.filename]#/etc/resolv.conf# будут настроены как серверы пересылки в новой конфигурации Unbound. -[.programlisting] +[NOTE] +==== +Если какой-либо из перечисленных серверов имен не поддерживает DNSSEC, локальное разрешение DNS завершится неудачей. Обязательно протестируйте каждый сервер имен и удалите те, которые не прошли проверку. Следующая команда покажет дерево доверия или ошибку для сервера имен, работающего на `192.168.1.1`: + +[source, shell] .... -zone "example.org" { - type slave; - file "slave/example.org"; -}; +% drill -S FreeBSD.org @192.168.1.1 .... +==== -В случае вторичной зоны информация о ней передается с основного сервера имён для заданной зоны и сохраняется в указанном файле. Если и когда основной сервер имён выходит и строя или недосягаем, то скачанная информация о зоне будет находиться на вторичных серверах, и они смогут обслуживать эту зону. +После подтверждения поддержки DNSSEC каждым сервером имен, запустите Unbound: -==== Файлы зон +[source, shell] +.... +# service local_unbound onestart +.... -Пример файла зоны `example.org` для основного сервера (располагающийся в файле [.filename]#/etc/namedb/master/example.org#) имеет такой вид: +Это обеспечит обновление [.filename]#/etc/resolv.conf#, чтобы запросы к доменам, защищённым DNSSEC, теперь работали. Например, выполните следующую команду для проверки дерева доверия DNSSEC FreeBSD.org: -[.programlisting] +[source, shell] .... -$TTL 3600 ; 1 hour default TTL -example.org. IN SOA ns1.example.org. admin.example.org. ( - 2006051501 ; Serial - 10800 ; Refresh - 3600 ; Retry - 604800 ; Expire - 300 ; Negative Response TTL - ) +% drill -S FreeBSD.org +;; Number of trusted keys: 1 +;; Chasing: freebsd.org. A -; DNS Servers - IN NS ns1.example.org. - IN NS ns2.example.org. +DNSSEC Trust tree: +freebsd.org. (A) +|---freebsd.org. (DNSKEY keytag: 36786 alg: 8 flags: 256) + |---freebsd.org. (DNSKEY keytag: 32659 alg: 8 flags: 257) + |---freebsd.org. (DS keytag: 32659 digest type: 2) + |---org. (DNSKEY keytag: 49587 alg: 7 flags: 256) + |---org. (DNSKEY keytag: 9795 alg: 7 flags: 257) + |---org. (DNSKEY keytag: 21366 alg: 7 flags: 257) + |---org. (DS keytag: 21366 digest type: 1) + | |---. (DNSKEY keytag: 40926 alg: 8 flags: 256) + | |---. (DNSKEY keytag: 19036 alg: 8 flags: 257) + |---org. (DS keytag: 21366 digest type: 2) + |---. (DNSKEY keytag: 40926 alg: 8 flags: 256) + |---. (DNSKEY keytag: 19036 alg: 8 flags: 257) +;; Chase successful +.... -; MX Records - IN MX 10 mx.example.org. - IN MX 20 mail.example.org. +=== Конфигурация Авторитетного Сервера Имен +FreeBSD не предоставляет программное обеспечение авторитетного сервера имен в базовой системе. Пользователям рекомендуется устанавливать сторонние приложения, такие как package:dns/nsd[] или package:dns/bind918[] из пакетов или портов. - IN A 192.168.1.1 +[[network-zeroconf]] +== Сетевое взаимодействие без настройки (mDNS/DNS-SD) -; Machine Names -localhost IN A 127.0.0.1 -ns1 IN A 192.168.1.2 -ns2 IN A 192.168.1.3 -mx IN A 192.168.1.4 -mail IN A 192.168.1.5 +https://en.wikipedia.org/wiki/Zero-configuration_networking[Сетевое взаимодействие без настройки] (иногда называемое _Zeroconf_) — это набор технологий, упрощающих настройку сети. Главные составные части Zeroconf: -; Aliases -www IN CNAME example.org. -.... +- Линк-локальная адресация, предоставляющая автоматическое назначение числовых сетевых адресов. +- Мультикаст DNS (_mDNS_), обеспечивающий автоматическое распространение и разрешение имён хостов. +- DNS-Based Service Discovery (_DNS-SD_), обеспечивающий автоматическое обнаружение экземпляров сервисов. -Заметьте, что все имена хостов, оканчивающиеся на ".", задают полное имя, тогда как все имена без символа "." на конце считаются заданными относительно origin. Например, `ns1` преобразуется в `ns1._example.org._` +=== Настройка и запуск Avahi -Файл зоны имеет следующий формат: +Одной из популярных реализаций zeroconf является https://avahi.org/[Avahi]. Avahi можно установить и настроить с помощью следующих команд: -[.programlisting] +[source, shell] .... -recordname IN recordtype value +# pkg install avahi-app nss_mdns +# grep -q '^hosts:.*\<mdns\>' /etc/nsswitch.conf || sed -i "" 's/^hosts: .*/& mdns/' /etc/nsswitch.conf +# service dbus enable +# service avahi-daemon enable +# service dbus start +# service avahi-daemon start .... -Наиболее часто используемые записи DNS: +[[network-apache]] +== HTTP сервер Apache -SOA:: -начало зоны ответственности +Веб-сервер с открытым исходным кодом Apache является наиболее широко используемым веб-сервером. FreeBSD не устанавливает этот веб-сервер по умолчанию, но его можно установить из пакета package:www/apache24[] или порта. -NS:: -авторитативный сервер имен +В этом разделе приведена сводка по настройке и запуску версии 2._x_ HTTP-сервера Apache на FreeBSD. Более подробная информация о Apache 2.X и его директивах конфигурации доступна по ссылке http://httpd.apache.org/[httpd.apache.org]. -A:: -адрес хоста +=== Настройка и запуск Apache -CNAME:: -каноническое имя для алиаса +В FreeBSD основной файл конфигурации сервера Apache HTTP Server устанавливается как [.filename]#/usr/local/etc/apache2x/httpd.conf#, где _x_ обозначает номер версии. Этот текстовый файл в формате ASCII начинается со строк комментариев, обозначенных символом `+#+`. Наиболее часто изменяемые директивы: -MX:: -обмен почтой +`ServerRoot "/usr/local"`:: +Указывает иерархию каталогов по умолчанию для установки Apache. Исполняемые файлы хранятся в подкаталогах [.filename]#bin# и [.filename]#sbin# корня сервера, а конфигурационные файлы — в подкаталоге [.filename]#etc/apache2x#. -PTR:: -указатель на доменное имя (используется в обратных зонах DNS) +`ServerAdmin \you@example.com`:: +Замените это на адрес электронной почты для получения сообщений о проблемах с сервером. Этот адрес также появляется на некоторых страницах, сгенерированных сервером, таких как документы об ошибках. -[.programlisting] -.... -example.org. IN SOA ns1.example.org. admin.example.org. ( - 2006051501 ; Serial - 10800 ; Refresh after 3 hours - 3600 ; Retry after 1 hour - 604800 ; Expire after 1 week - 300 ) ; Negative Response TTL -.... +`ServerName www.example.com:80`:: +Позволяет администратору установить имя хоста, которое отправляется клиентам сервера. Например, можно использовать `www` вместо фактического имени хоста. Если у системы нет зарегистрированного DNS-имени, введите её IP-адрес. Если сервер будет прослушивать альтернативный порт, замените `80` на номер альтернативного порта. -`example.org.`:: -имя домена, а также ориджин для этого файла зоны. +`DocumentRoot "/usr/local/www/apache2_x_/data"`:: +Каталог, из которого будут обслуживаться документы. По умолчанию все запросы обрабатываются из этого каталога, но символические ссылки и псевдонимы могут использоваться для указания на другие расположения. -`ns1.example.org.`:: -основной/авторитативный сервер имён для этой зоны. +Всегда рекомендуется создать резервную копию конфигурационного файла Apache по умолчанию перед внесением изменений. После завершения настройки Apache сохраните файл и проверьте конфигурацию с помощью `apachectl`. Запуск команды `apachectl configtest` должен вернуть `Syntax OK`. -`admin.example.org.`:: -человек, отвечающий за эту зону, адрес электронной почты с символом "@" замененным на точку. (mailto:admin@example.org[admin@example.org] становится `admin.example.org`) - -`2006051501`:: -последовательный номер файла. При каждом изменении файла зоны это число должно увеличиваться. В настоящее время для нумерации многие администраторы предпочитают формат `ггггммддвв`. `2006051501` будет означать, что файл последний раз изменялся 15.05.2006, а последнее число `01` означает, что это была первая модификация файла за день. Последовательный номер важен, так как он служит для того, чтобы вторичные серверы узнавали об обновлении зоны. +Чтобы запускать Apache при загрузке системы, добавьте следующую строку в [.filename]#/etc/rc.conf#: [.programlisting] .... - IN NS ns1.example.org. +apache24_enable="YES" .... -Это NS-запись. Такие записи должны иметься для всех серверов имён, которые будут отвечать за зону. +Если Apache должен запускаться с нестандартными параметрами, следующую строку можно добавить в [.filename]#/etc/rc.conf# для указания необходимых флагов: [.programlisting] .... -localhost IN A 127.0.0.1 -ns1 IN A 192.168.1.2 -ns2 IN A 192.168.1.3 -mx IN A 192.168.1.4 -mail IN A 192.168.1.5 +apache24_flags="" .... -Записи типа A служат для обозначения имён машин. Как это видно выше, имя `ns1.example.org` будет преобразовано в `192.168.1.2`. +Если apachectl не сообщает об ошибках конфигурации, то запустите `httpd`: -[.programlisting] +[source, shell] .... - IN A 192.168.1.1 +# service apache24 start .... -Эта строка присваивает IP адрес `192.168.1.1` текущему ориджину, в данном случае домену `example.org`. +Службу `httpd` можно проверить, введя `http://_localhost_` в веб-браузере, заменив _localhost_ на полное доменное имя машины, на которой работает `httpd`. Отображаемая веб-страница по умолчанию находится в [.filename]#/usr/local/www/apache24/data/index.html#. -[.programlisting] -.... -www IN CNAME @ -.... +Проверить конфигурацию Apache на наличие ошибок после внесения последующих изменений в конфигурацию во время работы `httpd` можно с помощью следующей команды: -Записи с каноническими именами обычно используются для присвоения машинам псевдонимов. В этом примере `www` является псевдонимом для "главной" машины, имя которой по воле случая совпало с именем домена `example.org` (`192.168.1.1`). Записи типа CNAME нельзя использовать совместно с другими типами записей для одного и того же имени хоста (recordname). - -[.programlisting] +[source, shell] .... - IN MX 10 mail.example.org. +# service apache24 configtest .... -MX-запись указывает, какие почтовые серверы отвечают за обработку входящей электронной почты для зоны. `mail.example.org` является именем почтового сервера, а 10 обозначает приоритет этого почтового сервера. +[NOTE] +==== +Важно отметить, что `configtest` не является стандартом man:rc[8], и не следует ожидать, что он будет работать для всех стартовых скриптов. +==== + +=== Виртуальный хостинг -Можно иметь несколько почтовых серверов с приоритетами, например, 10, 20 и так далее. Почтовый сервер, пытающийся доставить почту для `example.org`, сначала попробует связаться с машиной, имеющий MX-запись с самым большим приоритетом (наименьшим числовым значением в поле MX), затем с приоритетом поменьше и так далее, до тех пор, пока почта не будет отправлена. +Виртуальный хостинг позволяет запускать несколько веб-сайтов на одном сервере Apache. Виртуальные хосты могут быть _IP-ориентированными_ или _имя-ориентированными_. IP-ориентированный виртуальный хостинг использует разные IP-адреса для каждого сайта. Имя-ориентированный виртуальный хостинг использует заголовки HTTP/1.1 клиента для определения имени хоста, что позволяет сайтам использовать один и тот же IP-адрес. -Для файлов зон in-addr.arpa (обратные записи DNS) используется тот же самый формат, отличающийся только использованием записей PTR вместо A или CNAME. +Для настройки Apache с использованием виртуального хоста на основе имен добавьте блок `VirtualHost` для каждого веб-сайта. Например, для веб-сервера с именем `www.domain.tld` и виртуальным доменом `www.someotherdomain.tld` добавьте следующие записи в [.filename]#httpd.conf#: [.programlisting] .... -$TTL 3600 - -1.168.192.in-addr.arpa. IN SOA ns1.example.org. admin.example.org. ( - 2006051501 ; Serial - 10800 ; Refresh - 3600 ; Retry - 604800 ; Expire - 300 ) ; Negative Response TTL - - IN NS ns1.example.org. - IN NS ns2.example.org. +<VirtualHost *> + ServerName www.domain.tld + DocumentRoot /www/domain.tld +</VirtualHost> -1 IN PTR example.org. -2 IN PTR ns1.example.org. -3 IN PTR ns2.example.org. -4 IN PTR mx.example.org. -5 IN PTR mail.example.org. +<VirtualHost *> + ServerName www.someotherdomain.tld + DocumentRoot /www/someotherdomain.tld +</VirtualHost> .... -В этом файле дается полное соответствие имён хостов IP-адресам в нашем описанном ранее вымышленном домене. +Для каждого виртуального хоста замените значения `ServerName` и `DocumentRoot` на те, которые должны использоваться. -Следует отметить, что все имена в правой части PTR-записи должны быть полными доменными именами (то есть, заканчиваться точкой "."). +Для получения дополнительной информации о настройке виртуальных хостов обратитесь к официальной документации Apache по адресу: http://httpd.apache.org/docs/vhosts/[http://httpd.apache.org/docs/vhosts/]. -=== Кэширующий сервер имён - -Кэширующий сервер имён - это сервер имен, чья главная задача - разрешение рекурсивных запросов. Он просто выполняет запросы от своего имени и сохраняет результаты для последующего использования. +=== Модули Apache -=== * DNSSEC +Apache использует модули для расширения функциональности, предоставляемой базовым сервером. Обратитесь к http://httpd.apache.org/docs/current/mod/[http://httpd.apache.org/docs/current/mod/] для получения полного списка и деталей настройки доступных модулей. -Этот раздел не переведен. +В FreeBSD некоторые модули могут быть скомпилированы с портом package:www/apache24[]. Введите `make config` в [.filename]#/usr/ports/www/apache24#, чтобы увидеть, какие модули доступны и какие включены по умолчанию. Если модуль не скомпилирован с портом, коллекция портов FreeBSD предоставляет простой способ установки многих модулей. В этом разделе описаны три наиболее часто используемых модуля. -=== Безопасность +==== Поддержка SSL -Хотя BIND является самой распространенной реализацией DNS, всегда стоит вопрос об обеспечении безопасности. Время от времени обнаруживаются возможные и реальные бреши в безопасности. +В прошлом поддержка SSL в Apache требовала дополнительного модуля под названием [.filename]#mod_ssl#. Сейчас это не так, и стандартная установка Apache включает SSL в веб-сервер. Пример настройки поддержки SSL-сайтов доступен в установленном файле [.filename]#httpd-ssl.conf# внутри директории [.filename]#/usr/local/etc/apache24/extra#. В этой же директории также находится пример файла с именем [.filename]#ssl.conf-sample#. Рекомендуется изучить оба файла для правильной настройки защищённых сайтов в веб-сервере Apache. -FreeBSD автоматически запускает named в ограниченном окружении (man:chroot[8]); помимо этого, есть еще несколько механизмов, помогающих защититься от возможных атак на сервис DNS. +После настройки SSL необходимо раскомментировать следующую строку в основном файле [.filename]#http.conf#, чтобы активировать изменения при следующей перезагрузке или обновлении Apache: -Весьма полезно прочесть сообщения безопасности http://www.cert.org/[CERT] и подписаться на {freebsd-security-notifications} для того, чтобы быть в курсе текущих проблем с обеспечением безопасности Internet и FreeBSD. +[.programlisting] +.... +#Include etc/apache24/extra/httpd-ssl.conf +.... -[TIP] +[WARNING] ==== - -Если возникает проблема, то наличие последних исходных текстов и свежесобранного named может способствовать её решению. +Версии SSL два и три имеют известные уязвимости. Настоятельно рекомендуется использовать версии TLS 1.2 и 1.3 вместо старых вариантов SSL. Это можно сделать, установив следующие параметры в [.filename]#ssl.conf#: ==== -[[dns-read]] -=== Дополнительная литература -Справочная информация по BIND/named: man:rndc[8], man:named[8], man:named.conf[8], man:nsupdate[8], man:dnssec-signzone[8], man:dnssec-keygen[8] - -* https://www.isc.org/software/bind[ Официальная страница ISC BIND] -* https://www.isc.org/software/guild[ Официальный форум ISC BIND] -* http://www.oreilly.com/catalog/dns5/[ Книга издательства O'Reilly DNS and BIND 5th Edition] -* http://www.root-dnssec.org/documentation/[Root DNSSEC] -* http://data.iana.org/root-anchors/draft-icann-dnssec-trust-anchor.html[DNSSEC Trust Anchor Publication for the Root Zone] -* http://tools.ietf.org/html/rfc1034[RFC1034 - Domain Names - Concepts and Facilities] -* http://tools.ietf.org/html/rfc1035[RFC1035 - Domain Names - Implementation and Specification] -* http://tools.ietf.org/html/rfc4033[RFC4033 - DNS Security Introduction and Requirements] -* http://tools.ietf.org/html/rfc4034[RFC4034 - Resource Records for the DNS Security Extensions] -* http://tools.ietf.org/html/rfc4035[RFC4035 - Protocol Modifications for the DNS Security Extensions] -* http://tools.ietf.org/html/rfc4641[RFC4641 - DNSSEC Operational Practices] -* http://tools.ietf.org/html/rfc5011[RFC5011 - Automated Updates of DNS Security (DNSSEC Trust Anchors] - -[[network-apache]] -== Apache HTTP сервер - -=== Обзор +[.programlisting] +.... +SSLProtocol all -SSLv3 -SSLv2 +TLSv1.2 +TLSv1.3 +SSLProxyProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +.... -FreeBSD используется в качестве платформы для многих из самых нагруженных серверов в мире. Большинство серверов в интернет используют Apache HTTP сервер. Пакеты Apache должны быть включены в поставку FreeBSD. Если вы не установили их во вместе с системой, воспользуйтесь портами package:www/apache13[] или package:www/apache22[]. +Для завершения настройки SSL в веб-сервере раскомментируйте следующую строку, чтобы убедиться, что конфигурация будет загружена в Apache при перезапуске или обновлении: -Как только Apache был успешно установлен, его необходимо настроить. +[.programlisting] +.... +# Secure (SSL/TLS) connections +Include etc/apache24/extra/httpd-ssl.conf +.... -[NOTE] -==== -В этом разделе рассказывается о версии 1.3.X Apache HTTP сервера, поскольку эта версия наиболее широко используется в FreeBSD. Apache 2.X содержит много новых технологий, но здесь они не обсуждаются. За дополнительной информацией о Apache 2.X, обращайтесь к http://httpd.apache.org/[http://httpd.apache.org/]. -==== +Следующие строки также должны быть раскомментированы в файле [.filename]#httpd.conf# для полной поддержки SSL в Apache: -=== Настройка +[.programlisting] +.... +LoadModule authn_socache_module libexec/apache24/mod_authn_socache.so +LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so +LoadModule ssl_module libexec/apache24/mod_ssl.so +.... -В FreeBSD основной файл настройки Apache HTTP сервера устанавливается в [.filename]#/usr/local/etc/apache/httpd.conf#. Это обычный текстовый UNIX(R) файл настройки с строками комментариев, начинающимися с символа `#`. Исчерпывающее описание всех возможных параметров настройки находится за пределом рассмотрения этой книги, поэтому здесь будут описаны только наиболее часто модифицируемые директивы. +Следующий шаг — работа с центром сертификации для установки соответствующих сертификатов в системе. Это создаст цепочку доверия для сайта и предотвратит появление предупреждений о самоподписанных сертификатах. -`ServerRoot "/usr/local"`:: -Указывает верхний каталог установки Apache по умолчанию. Бинарные файлы находятся в [.filename]#bin# и [.filename]#sbin#, подкаталоги расположены относительно корневого каталога сервера, файлы настройки находятся в [.filename]#etc/apache#. +==== [.filename]#mod_perl# -`ServerAdmin you@your.address`:: -Адрес, на который должны будут отправляться сообщения о проблемах с сервером. Этот адрес выводится на некоторые генерируемые сервером страницы, например с сообщениями об ошибках. +Модуль [.filename]#mod_perl# позволяет писать модули Apache на Perl. Кроме того, встроенный в сервер постоянный интерпретатор избегает накладных расходов на запуск внешнего интерпретатора и задержек при старте Perl. -`ServerName www.example.com`:: -`ServerName` позволяет вам устанавливать имя хоста, которое отправляется обратно клиентам, если оно отличается от того, с которым настроен хост (например, использование `www` вместо реального имени хоста). +[.filename]#mod_perl# можно установить с помощью пакета package:www/mod_perl2[] или порта. Документация по использованию этого модуля доступна по адресу http://perl.apache.org/docs/2.0/index.html[http://perl.apache.org/docs/2.0/index.html]. -`DocumentRoot "/usr/local/www/data"`:: -`DocumentRoot`: Каталог, внутри которого будут храниться документы. По умолчанию, все запросы обрабатываются внутри этого каталога, но символические ссылки и синонимы могут использоваться для указания на другие каталоги. +==== [.filename]#mod_php# -Хорошей идеей будет сделать резервные копии настроек Apache перед внесением изменений. Как только вы будете удовлетворены первоначальной настройкой, можно запускать Apache. +_PHP: Препроцессор Гипертекста_ (PHP) — это язык программирования общего назначения, который особенно хорошо подходит для веб-разработки. Способный встраиваться в HTML, его синтаксис основан на C, Java(TM) и Perl, что позволяет веб-разработчикам быстро создавать динамически генерируемые веб-страницы. -=== Запуск Apache +Поддержка PHP для Apache и любых других функций, написанных на этом языке, может быть добавлена путем установки соответствующего порта. -Apache не запускается из inetd, как это делают многие другие сетевые серверы. Он настроен для автономного запуска, чтобы обеспечивать большую производительность при обработке HTTP запросов от браузеров клиентов. Для упрощения запуска, остановки и перезапуска сервера существует shell скрипт. Для запуска Apache в первый раз просто выполните: +Для всех поддерживаемых версий выполните поиск в базе данных пакетов с помощью `pkg`: -[source,shell] +[source, shell] .... -# /usr/local/sbin/apachectl start +# pkg search php .... -Вы можете остановить сервер в любой момент, выполнив: +Будет отображен список, включающий версии и дополнительные возможности, которые они предоставляют. Компоненты полностью модульные, что означает, что функции включаются путем установки соответствующего порта. Чтобы установить PHP версии 7.4 для Apache, выполните следующую команду: -[source,shell] +[source, shell] .... -# /usr/local/sbin/apachectl stop +# pkg install mod_php74 .... -После внесения любых изменений в файл настроек, вам потребуется перезапустить сервер: +Если необходимо установить какие-либо зависимости, они также будут установлены. + +По умолчанию PHP не будет включен. Следующие строки необходимо добавить в конфигурационный файл Apache, расположенный в [.filename]#/usr/local/etc/apache24#, чтобы активировать его: -[source,shell] +[.programlisting] .... -# /usr/local/sbin/apachectl restart +<FilesMatch "\.php$"> + SetHandler application/x-httpd-php +</FilesMatch> +<FilesMatch "\.phps$"> + SetHandler application/x-httpd-php-source +</FilesMatch> .... -Для перезапуска Apache без прерывания имеющихся соединений, выполните: +В дополнение, параметр `DirectoryIndex` в конфигурационном файле также потребуется обновить, и Apache нужно будет перезапустить или перезагрузить, чтобы изменения вступили в силу. -[source,shell] +Поддержка многих функций PHP также может быть установлена с помощью `pkg`. Например, для установки поддержки XML или SSL установите соответствующие порты: + +[source, shell] .... -# /usr/local/sbin/apachectl graceful +# pkg install php74-xml php74-openssl .... -Дополнительная информация находится на странице справочного руководства man:apachectl[8]. +Как и ранее, для вступления изменений в силу необходимо перезагрузить конфигурацию Apache, даже в случаях, когда была просто установка модуля. -Для запуска Apache при старте системы, добавьте в [.filename]#/etc/rc.conf# следующую строку: +Для выполнения плавного перезапуска с целью перезагрузки конфигурации выполните следующую команду: -[.programlisting] +[source, shell] .... -apache_enable="YES" +# apachectl graceful .... -или для Apache 2.2: +После завершения установки есть два способа получить установленные модули поддержки PHP и информацию о среде сборки. Первый — установить полный бинарный файл PHP и выполнить команду для получения информации: -[.programlisting] +[source, shell] .... -apache22_enable="YES" +# pkg install php74 .... -Если вы хотите передать программе Apache`httpd` дополнительные параметры командной при загрузке системы, они могут быть помещены в дополнительную строку [.filename]#rc.conf#: -[.programlisting] +[source, shell] .... -apache_flags="" +# php -i | less .... -Теперь, когда веб сервер запущен, вы можете просмотреть свой веб сайт, задав в строке браузера адрес `http://localhost/`. По умолчанию отображается веб страница [.filename]#/usr/local/www/data/index.html#. +Необходимо передать вывод в постраничный просмотрщик, например, `more` или `less`, чтобы упростить восприятие большого объема вывода. -=== Виртуальный хостинг +Наконец, для внесения изменений в глобальную конфигурацию PHP существует хорошо документированный файл, установленный в [.filename]#/usr/local/etc/php.ini#. На момент установки этот файл не будет существовать, так как есть две версии на выбор: [.filename]#php.ini-development# и [.filename]#php.ini-production#. Они представляют собой отправные точки, помогающие администраторам в развертывании. + +==== Поддержка HTTP2 -Apache поддерживает два различных типа виртуального хостинга (Virtual Hosting). Первый метод основан на именах (Name-based Virtual Hosting). Он использует полученные от клиента заголовки HTTP/1.1 для определения имени хоста. Это позволяет многим различным доменам использовать один и тот же IP адрес. +Поддержка протокола HTTP2 в Apache включена по умолчанию при установке порта с помощью `pkg`. Новая версия HTTP содержит множество улучшений по сравнению с предыдущей версией, включая использование одного соединения с веб-сайтом, что сокращает общее количество циклов TCP-соединений. Кроме того, данные заголовков пакетов сжимаются, а HTTP2 по умолчанию требует шифрования. + +Когда Apache настроен на использование только HTTP2, веб-браузеры будут требовать безопасное, зашифрованное HTTPS-соединение. Если Apache настроен на использование обеих версий, HTTP1.1 будет считаться резервным вариантом при возникновении проблем с соединением. + +Хотя это изменение требует от администраторов внесения изменений, они положительные и способствуют более безопасному Интернету для всех. Изменения требуются только для сайтов, которые в настоящее время не используют SSL и TLS. + +[NOTE] +==== +Эта конфигурация зависит от предыдущих разделов, включая поддержку TLS. Рекомендуется выполнить эти инструкции перед продолжением с данной конфигурацией. +==== -Для настройки Apache на использование этого типа хостинга добавьте в [.filename]#httpd.conf# запись подобную следующей: +Начните процесс, включив модуль http2, раскомментировав строку в [.filename]#/usr/local/etc/apache24/httpd.conf#, и замените модуль mpm_prefork на mpm_event, так как первый не поддерживает HTTP2. [.programlisting] .... -NameVirtualHost * +LoadModule http2_module libexec/apache24/mod_http2.so +LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so .... -Если веб сервер назывался `www.domain.tld` и вы хотите настроить виртуальный домен для `www.someotherdomain.tld`, необходимо добавить в [.filename]#httpd.conf# следующие записи: +[NOTE] +==== +Существует отдельный порт [.filename]#mod_http2#, который доступен. Он предназначен для более быстрого получения исправлений безопасности и ошибок по сравнению с модулем, установленным через встроенный порт [.filename]#apache24#. Он не обязателен для поддержки HTTP2, но доступен. При установке следует использовать [.filename]#mod_h2.so# вместо [.filename]#mod_http2.so# в конфигурации Apache. +==== -[source,shell] -.... -<VirtualHost *> -ServerName www.domain.tld -DocumentRoot /www/domain.tld -</VirtualHost> +Существует два метода реализации HTTP2 в Apache; один способ — глобально для всех сайтов и каждого VirtualHost, работающего в системе. Чтобы включить HTTP2 глобально, добавьте следующую строку под директивой ServerName: -<VirtualHost *> -ServerName www.someotherdomain.tld -DocumentRoot /www/someotherdomain.tld -</VirtualHost> +[.programlisting] +.... +Protocols h2 http/1.1 .... -Замените адреса и пути к документам на те, что вы будете использовать. +[NOTE] +==== +Для включения HTTP2 в незашифрованном виде используйте h2h2chttp/1.1 в файле [.filename]#httpd.conf#. +==== -За дополнительной информацией по настройке виртуальных хостов обращайтесь к официальной документации Apache: http://httpd.apache.org/docs/vhosts/[http://httpd.apache.org/docs/vhosts/]. +Наличие здесь h2c позволит передавать незашифрованные данные HTTP2 в системе, но это не рекомендуется. Кроме того, использование здесь http/1.1 позволит системе вернуться к версии протокола HTTP1.1, если это потребуется. -=== Модули Apache +Для включения HTTP2 для отдельных VirtualHosts добавьте ту же строку в директиву VirtualHost в файле [.filename]#httpd.conf# или [.filename]#httpd-ssl.conf#. -Существуют множество различных модулей Apache, которые добавляют функциональность к основному серверу. Коллекция портов FreeBSD предоставляет простой способ установки Apache с некоторыми наиболее популярными дополнительными модулями. +Перезагрузите конфигурацию с помощью команды `apachectl`[parameter]#reload# и проверьте конфигурацию каким-либо из следующих способов после посещения одной из страниц на сервере: -==== mod_ssl +[source, shell] +.... +# grep "HTTP/2.0" /var/log/httpd-access.log +.... -Модуль mod_ssl использует библиотеку OpenSSL для сильной криптографии через протоколы Secure Sockets Layer (SSL v2/v3) и Transport Layer Security (TLS v1). Этот модуль содержит все необходимое для запроса подписанного сертификата из центра сертификации для защищенного веб сервера на FreeBSD. +Это должно вернуть что-то похожее на следующее: -Если вы еще не установили Apache, версия Apache 1.3.X с mod_ssl может быть установлена через порт package:www/apache13-modssl[]. Поддержка SSL также доступна для Apache 2.X через порт package:www/apache22[], где она включена по умолчанию. +[.programlisting] +.... +192.168.1.205 - - [18/Oct/2020:18:34:36 -0400] "GET / HTTP/2.0" 304 - +192.0.2.205 - - [18/Oct/2020:19:19:57 -0400] "GET / HTTP/2.0" 304 - +192.0.0.205 - - [18/Oct/2020:19:20:52 -0400] "GET / HTTP/2.0" 304 - +192.0.2.205 - - [18/Oct/2020:19:23:10 -0400] "GET / HTTP/2.0" 304 - +.... -==== Apache и скриптовые языки +Другой способ — использование встроенного в веб-браузер отладчика сайтов или `tcpdump`; однако использование любого из этих методов выходит за рамки данного документа. -Для большинства скриптовых языков созданы модули Apache. На базе таких модулей возможно создание других модулей Apache, написанных полностью на скриптовом языке. Они также часто используются как встроенные в сервер интерпретаторы, что исключает накладные расходы на запуск внешнего интерпретатора и сокращает время построения динамических страниц. +Поддержка обратных прокси-соединений HTTP2 с использованием модуля [.filename]#mod_proxy_http2.so#. При настройке директив ProxyPass или RewriteRules с флагом [P] следует использовать h2:// для соединения. -=== Построение динамических сайтов +=== Динамические веб-сайты -В последнее десятилетие все большее число компаний обращает внимание на Интернет как площадку для ведения и расширения бизнеса. Среди прочего, этот процесс подчеркивает потребность в интерактивном содержимом сайтов. Некоторые компании, такие как Microsoft(R), представляют свои закрытые решения; сообщество разработчиков открытых программ отвечает на вызов. Среди современных решений для предоставления динамического контента следует отметить Django, Ruby on Rails, mod_perl и mod_php. +В дополнение к mod_perl и mod_php, доступны другие языки для создания динамического веб-содержимого. Среди них Django и Ruby on Rails. ==== Django -Django - это распространяемая под лицензией BSD инфраструктура, позволяющая разработчикам быстро создавать элегантные, высокопроизводительные веб-приложения. Она предоставляет в распоряжение разработчика объектно-реляционное отображение (object-relational mapper), таким образом типы данных разрабатываются как объекты Python. Для этих объектов предоставляется богатый интерфейс доступа к базам данных, при этом у разработчика не возникает необходимости написания SQL-запросов. Django также предоставляет расширяемую систему шаблонов, так что логика приложения отделена от его HTML-представления. +Django — это фреймворк под лицензией BSD, разработанный для того, чтобы позволить разработчикам быстро создавать высокопроизводительные и элегантные веб-приложения. Он предоставляет объектно-реляционный преобразователь (ORM), позволяющий разрабатывать типы данных как объекты Python. Для этих объектов предоставляется богатый динамический API доступа к базе данных, без необходимости написания разработчиком кода на SQL. Также имеется расширяемая система шаблонов, чтобы логика приложения была отделена от HTML-представления. -Для Django требуются следующие компоненты: mod_python, Apache и одна из нескольких возможных SQL СУБД. Укажите соответствующие опции сборки, и порт установит всё необходимое. +Django зависит от [.filename]#mod_python# и движка SQL-базы данных. В FreeBSD порт package:www/py-django[] автоматически устанавливает [.filename]#mod_python# и поддерживает базы данных PostgreSQL, MySQL или SQLite, по умолчанию используется SQLite. Чтобы изменить движок базы данных, введите `make config` в [.filename]#/usr/ports/www/py-django#, затем установите порт. -[[network-www-django-install]] -.Установка Django совместно с Apache2, mod_python3 и PostgreSQL -[example] -==== - -[source,shell] -.... -# cd /usr/ports/www/py-django; make all install clean -DWITH_MOD_PYTHON3 -DWITH_POSTGRESQL -.... - -==== +После установки Django приложению понадобится каталог проекта вместе с конфигурацией Apache для использования встроенного интерпретатора Python. Этот интерпретатор используется для вызова приложения при обращении к определённым URL на сайте. -После установки Django и всех необходимых ему компонентов вам потребуется создать каталог для проекта Django. Далее потребуется настроить Apache для определенных URL адресов на вашем сайте выполнять ваше приложение встроенным интерпретатором Python. +Для настройки Apache для передачи запросов определенных URL веб-приложению добавьте следующее в [.filename]#httpd.conf#, указав полный путь к каталогу проекта: -[[network-www-django-apache-config]] -.Конфигурация Apache для Django/mod_python -[example] -==== -Чтобы настроить Apache отправлять запросы для определенных URL адресов вашему веб-приложению, вам потребуется внести несколько строк в конфигурационный файл [.filename]#httpd.conf#: - -[source,shell] +[.programlisting] .... <Location "/"> SetHandler python-program - PythonPath "['/dir/to/your/django/packages/'] + sys.path" + PythonPath "['/dir/to/the/django/packages/'] + sys.path" PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE mysite.settings PythonAutoReload On @@ -2286,376 +2048,545 @@ Django - это распространяемая под лицензией BSD </Location> .... -==== +Обратитесь к https://docs.djangoproject.com[https://docs.djangoproject.com] для получения дополнительной информации о том, как использовать Django. ==== Ruby on Rails -Ruby on Rails это еще одна веб инфраструктура с открытым исходным кодом, которая предоставляет полный стек разработки и которая оптимизированa для продуктивного и быстрого создания мощных веб-приложений. Ruby on Rails может быть легко установлена из коллекции портов. +Ruby on Rails — это еще один фреймворк с открытым исходным кодом для веб-разработки, предоставляющий полный стек разработки. Он оптимизирован для повышения продуктивности веб-разработчиков и позволяет быстро создавать мощные приложения. В FreeBSD его можно установить с помощью пакета package:www/rubygem-rails[] или порта. -[source,shell] -.... -# cd /usr/ports/www/rubygem-rails; make all install clean -.... - -==== mod_perl +Обратитесь к http://guides.rubyonrails.org[http://guides.rubyonrails.org] для получения дополнительной информации о том, как использовать Ruby on Rails. -Проект интеграции Apache/Perl объединяет мощь языка программирования Perl и HTTP сервера Apache. С модулем mod_perl возможно написание модулей Apache полностью на Perl. Кроме того, постоянно запущенный встроенный в сервер интерпретатор позволяет не тратить ресурсы на запуск внешнего интерпретатора и время на запуск Perl. - -mod_perl можно использовать различными способами. Помните, что mod_perl 1.0 работает только с Apache 1.3, тогда как mod_perl 2.0 совместим только с Apache 2.X. mod_perl 1.0 доступен как порт package:www/mod_perl[], а также в виде статически скомпилированной версии в package:www/apache13-modperl[]. mod_perl 2.0 доступен как package:www/mod_perl2[]. +[[network-ftp]] +== Протокол передачи файлов (FTP) -==== mod_php +Протокол передачи файлов (FTP — File Transfer Protocol) предоставляет пользователям простой способ передачи файлов на FTP-сервер и с него. В базовую систему FreeBSD включено программное обеспечение FTP-сервера — ftpd. -PHP, также известный как "Препроцессор гипертекста" ("Hypertext Preprocessor"), - это скриптовый язык общего назначения, в основном предназначенный для веб разработки. Этот язык может быть встроен в HTML, его синтаксис заимствован из C, Java(TM) и Perl, и он позволяет веб разработчикам быстро писать динамически генерируемые страницы. +В FreeBSD предусмотрено несколько файлов конфигурации для управления доступом к FTP-серверу. В этом разделе приводится их краткое описание. Подробнее о встроенном FTP-сервере можно узнать в man:ftpd[8]. -Добавление поддержки PHP5 к веб серверу Apache производится путем установки порта package:lang/mod_php5[]. +=== Конфигурация -Если порт package:lang/php5[] устанавливается впервые, то автоматически отобразятся все доступные опции (`OPTIONS`). Если меню не отображается, так как порт package:lang/php5[] устанавливался ранее, всегда можно повторно вызвать диалог меню выполнив следующую команду в каталоге порта: +Самый важный этап настройки — определение учётных записей, которым будет разрешён доступ к FTP-серверу. В системе FreeBSD существует ряд системных учётных записей, которым не следует разрешать доступ по FTP. Список пользователей, которым запрещён любой доступ по FTP, можно найти в [.filename]#/etc/ftpusers#. По умолчанию в него включены системные учётные записи. Можно добавить дополнительных пользователей, которым не следует разрешать доступ к FTP. -[source,shell] -.... -# make config -.... +В некоторых случаях может быть желательно ограничить доступ некоторых пользователей, не запрещая им полностью использовать FTP. Это можно сделать, создав файл [.filename]#/etc/ftpchroot#, как описано в man:ftpchroot[5]. В этом файле перечислены пользователи и группы, подлежащие ограничениям доступа к FTP. -Выберите в меню опцию `APACHE`, тем самым вы построите загружаемый модуль mod_php5 для веб сервера Apache. +Для обеспечения анонимного доступа по FTP к серверу создайте пользователя с именем `ftp` в системе FreeBSD. Пользователи смогут входить на FTP-сервер под именем `ftp` или `anonymous`. При запросе пароля будет принят любой ввод, но по соглашению в качестве пароля следует использовать адрес электронной почты. FTP-сервер вызовет man:chroot[2] при входе анонимного пользователя, чтобы ограничить доступ только домашним каталогом пользователя `ftp`. -[NOTE] -==== -Множество сайтов по разным причинам (например, из-за проблем совместимости или из-за наличия уже развёрнутых веб приложений) всё еще используют PHP4. Если требуется mod_php4 вместо mod_php5, то воспользуйтесь портом package:lang/php4[]. Порт package:lang/php4[] поддерживает многие из конфигурационных и установочных опций порта package:lang/php5[]. -==== +Существуют два текстовых файла, которые можно создать для отображения приветственных сообщений клиентам FTP. Содержимое файла [.filename]#/etc/ftpwelcome# будет показано пользователям до появления запроса на вход. После успешного входа будет отображено содержимое файла [.filename]#/etc/ftpmotd#. Обратите внимание, что путь к этому файлу указывается относительно окружения входа, поэтому для анонимных пользователей будет отображаться содержимое файла [.filename]#~ftp/etc/ftpmotd#. -Этот порт устанавливает и настраивает модули, необходимые для поддержки динамических PHP веб страниц. Убедитесь, что в файл [.filename]#/usr/local/etc/apache/httpd.conf# были добавлены следующие секции: +После настройки FTP-сервера установите соответствующую переменную в [.filename]#/etc/rc.conf#, чтобы служба запускалась при загрузке: [.programlisting] .... -LoadModule php5_module libexec/apache/libphp5.so +ftpd_enable="YES" .... -[.programlisting] +Чтобы запустить службу сейчас: + +[source, shell] .... -AddModule mod_php5.c - <IfModule mod_php5.c> - DirectoryIndex index.php index.html - </IfModule> - <IfModule mod_php5.c> - AddType application/x-httpd-php .php - AddType application/x-httpd-php-source .phps - </IfModule> +# service ftpd start .... -Для загрузки модуля PHP после этого просто вызовите команду `apachectl` с параметром graceful: +Протестируйте подключение к FTP-серверу, набрав: -[source,shell] +[source, shell] .... -# apachectl graceful +% ftp localhost .... -При дальнейших обновлениях PHP команда `make config` больше не потребуется; выбранные опции сохраняются автоматически инфраструктурой портов FreeBSD +Демон ftpd использует man:syslog[3] для записи сообщений. По умолчанию, демон системного журнала записывает сообщения, связанные с FTP, в [.filename]#/var/log/xferlog#. Местоположение журнала FTP может быть изменено путём редактирования следующей строки в [.filename]#/etc/syslog.conf#: -Поддержка PHP в FreeBSD построена по модульному принципу, поэтому базовая установка обладает очень ограниченной функциональностью. Дополнительная функциональность может быть легко добавлена при помощи порта package:lang/php5-extensions[], управляющего набором расширений PHP через меню, либо просто путем установки дополнительных портов. - -Например, для добавления поддержки MySQL к PHP5, просто установите порт [.filename]#databases/php5-mysql#. - -После установки новых расширений сервер Apache должен быть рестартован, чтобы изменения в конфигурации вступили в силу: - -[source,shell] +[.programlisting] .... -# apachectl graceful +ftp.info /var/log/xferlog .... -[[network-samba]] -== Файл сервер и печать для Microsoft(R) Windows(R) клиентов (Samba) -=== Обзор +[NOTE] +==== +Имейте в виду потенциальные проблемы, связанные с запуском анонимного FTP-сервера. В частности, хорошо подумайте, прежде чем разрешать анонимным пользователям загружать файлы. Может оказаться, что FTP-сайт станет площадкой для обмена нелицензионным коммерческим программным обеспечением или даже чем-то хуже. Если загрузка файлов анонимными пользователями необходима, убедитесь в правильности настроек прав доступа, чтобы эти файлы не могли быть прочитаны другими анонимными пользователями до тех пор, пока их не проверит администратор. +==== -Samba это популярный пакет программ с открытыми исходными текстами, которая предоставляет файловые и принт-сервисы Microsoft(R) Windows(R) клиентам. Эти клиенты могут подключаться и использовать файловое пространство FreeBSD, как если бы это был локальный диск, или принтеры FreeBSD, как если бы это были локальные принтеры. +[[network-samba]] +== Услуги файлов и печати для клиентов Microsoft(R) Windows(R) (Samba) -Пакет Samba должен быть включен в поставку FreeBSD. Если вы не установили Samba при первой установке системы, ее можно установить из порта или пакета package:net/samba34[]. +Samba — это популярный пакет открытого программного обеспечения, предоставляющий файловые и печатные услуги с использованием протокола SMB/CIFS. Этот протокол встроен в системы Microsoft(R) Windows(R). Он может быть добавлен в системы, отличные от Microsoft(R) Windows(R), путем установки клиентских библиотек Samba. Протокол позволяет клиентам получать доступ к общим данным и принтерам. Эти ресурсы могут быть отображены как локальный диск, а общие принтеры могут использоваться так, как если бы они были локальными. -=== Настройка +На FreeBSD клиентские библиотеки Samba могут быть установлены с помощью порта или пакета package:net/samba416[]. Клиент предоставляет возможность системе FreeBSD получать доступ к общим ресурсам SMB/CIFS в сети Microsoft(R) Windows(R). -Файл настройки Samba по умолчанию устанавливается в [.filename]#/usr/local/shared/examples/samba34/smb.conf.default#. Этот файл необходимо скопировать в [.filename]#/usr/local/etc/smb.conf# и отредактировать перед использованием Samba. +Система FreeBSD также может быть настроена в качестве сервера Samba путем установки порта или пакета package:net/samba416[]. Это позволяет администратору создавать общие ресурсы SMB/CIFS на системе FreeBSD, к которым могут обращаться клиенты под управлением Microsoft(R) Windows(R) или использующие клиентские библиотеки Samba. -В файле [.filename]#smb.conf# находится информация, необходимая для работы Samba, например определение принтеров и "общих каталогов", которые будут использоваться совместно с Windows(R) клиентами. В пакет Samba входит программа с веб интерфейсом, называемая swat, которая дает простой способ редактирования файла [.filename]#smb.conf#. +=== Конфигурация сервера -==== Использование Samba Web Administration Tool (SWAT) +Samba настраивается в файле [.filename]#/usr/local/etc/smb4.conf#. Этот файл должен быть создан до начала использования Samba. -Программа веб администрирования Samba (Samba Web Administration Tool, SWAT) запускается как даемон из inetd. Следовательно, в [.filename]#/etc/inetd.conf# необходимо снять комментарий перед тем, как использовать swat для настройки Samba: +Простой пример [.filename]#smb4.conf# для общего доступа к каталогам и принтерам с клиентами Windows(R) в рабочей группе показан ниже. Для более сложных настроек, включающих LDAP или Active Directory, проще использовать man:samba-tool[8] для создания начального [.filename]#smb4.conf#. [.programlisting] .... -swat stream tcp nowait/400 root /usr/local/sbin/swat swat -.... - -Как описано в <<network-inetd-reread>>, после изменения настроек inetd необходимо перечитать конфигурацию. +[global] +workgroup = WORKGROUP +server string = Samba Server Version %v +netbios name = ExampleMachine +wins support = Yes +security = user +passdb backend = tdbsam -Как только swat был включен [.filename]#inetd.conf#, вы можете использовать браузер для подключения к http://localhost:901[http://localhost:901]. Сначала необходимо зарегистрироваться с системной учетной записью `root`. +# Example: share /usr/src accessible only to 'developer' user +[src] +path = /usr/src +valid users = developer +writable = yes +browsable = yes +read only = no +guest ok = no +public = no +create mask = 0666 +directory mask = 0755 +.... -После успешного входа на основную страницу настройки Samba, вы можете просмотреть документацию или начать настройку, нажав на кнопку menu:Globals[]. Раздел menu:Globals[] соответствует переменным, установленным в разделе `[global]` файла [.filename]#/usr/local/etc/smb.conf#. -==== Глобальные настройки +==== Глобальные Настройки -Независимо от того, используете ли вы swat, или редактируете [.filename]#/usr/local/etc/smb.conf# непосредственно, первые директивы, которые вы скорее всего встретите при настройке Samba, будут следующими: +Настройки, описывающие сеть, добавляются в [.filename]#/usr/local/etc/smb4.conf#: `workgroup`:: -Имя домена или рабочей группы NT для компьютеров, которые будут получать доступ к этому серверу. +Имя рабочей группы, которая будет обслуживаться. `netbios name`:: -Устанавливает имя NetBIOS, под которым будет работать Samba сервер. По умолчанию оно устанавливается равным первому компоненту DNS имени хоста. +Имя NetBIOS, под которым известен сервер Samba. По умолчанию оно совпадает с первой частью DNS-имени хоста. `server string`:: -Устанавливает строку, которая будет показана командой `net view` и некоторыми другими сетевыми инструментами, которые отображают строку описания сервера. +Строка, которая будет отображаться в выводе команды `net view` и некоторых других сетевых инструментов, предназначенных для отображения описательного текста о сервере. + +`wins support`:: +Будет ли Samba выступать в качестве сервера WINS. Не следует включать поддержку WINS более чем на одном сервере в сети. -==== Настройки безопасности -Две из наиболее важных настроек в [.filename]#/usr/local/etc/smb.conf# отвечают за выбор модели безопасности и за формат паролей для клиентов. Эти параметры контролируются следующими директивами: +==== Настройки Безопасности + +Важнейшие настройки в [.filename]#/usr/local/etc/smb4.conf# — это модель безопасности и формат хранения паролей. Эти параметры управляются следующими директивами: `security`:: -Два наиболее часто используемых параметра это `security = share` и `security = user`. Если имена пользователей для клиентов совпадают с их именами на компьютере FreeBSD, вы возможно захотите включить безопасность уровня пользователя (user). Это политика безопасности по умолчанию, она требует, чтобы клиент авторизовался перед доступом к совместно используемым ресурсам. +Если клиенты используют имена пользователей, совпадающие с их именами на машине FreeBSD, следует использовать уровень безопасности пользователя. `security = user` — это политика безопасности по умолчанию, которая требует от клиентов сначала войти в систему, прежде чем они смогут получить доступ к общим ресурсам. + -На уровне безопасности share клиенту не требуется входить на сервер перед подключением к ресурсу. Эта модель безопасности использовалась по умолчанию в старых версиях Samba. +Обратитесь к man:smb.conf[5], чтобы узнать о других поддерживаемых настройках для опции `security`. `passdb backend`:: -Samba поддерживает несколько различных подсистем аутентификации. Вы можете аутентифицировать клиентов с помощью LDAP, NIS+, базы данных SQL, или через модифицированный файл паролей. Метод аутентификации по умолчанию `smbpasswd`, и здесь рассматривается только он. +Samba поддерживает несколько различных моделей аутентификации на стороне сервера. Клиенты могут быть аутентифицированы с помощью LDAP, NIS+, SQL-базы данных или модифицированного файла паролей. Рекомендуемый метод аутентификации `tdbsam` идеально подходит для простых сетей, и мы его рассмотрим здесь. Для более крупных или сложных сетей рекомендуется `ldapsam`. `smbpasswd` был прежним методом по умолчанию и теперь устарел. + +==== Пользователи Samba -Предполагая, что используется подсистема по умолчанию `smbpasswd`, необходимо создать файл [.filename]#/usr/local/etc/samba/smbpasswd#, чтобы Samba могла аутентифицировать клиентов. Если вы хотите разрешить к учетным записям UNIX(R) доступ с Windows(R) клиентов, используйте следующую команду: +Пользовательские учетные записи FreeBSD должны быть сопоставлены с базой данных `SambaSAMAccount` для доступа клиентов Windows(R) к общему ресурсу. Сопоставьте существующие учетные записи FreeBSD с помощью man:pdbedit[8]: -[source,shell] +[source, shell] .... -# smbpasswd -a username +# pdbedit -a -u username .... -[NOTE] -==== -Ныне рекомендуемой подсистемой аутентификации является `tdbsam`, поэтому для добавления пользователей используйте следующую команду: +В этом разделе упомянуты только наиболее часто используемые настройки. Дополнительную информацию о доступных параметрах конфигурации можно найти на https://wiki.samba.org[Официальном вики Samba]. + +=== Начало работы с Samba -[source,shell] +Чтобы включить Samba при загрузке, добавьте следующую строку в [.filename]#/etc/rc.conf#: + +[.programlisting] .... -# pdbedit -a -u username +samba_server_enable="YES" .... -==== - -Пожалуйста, обратитесь к http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/[Official Samba HOWTO] за дополнительной информацией о параметрах настройки. Основные настройки, рассмотренные здесь, достаточны для первого запуска Samba. +Чтобы сейчас запустить Samba: -=== Запуск Samba +[source, shell] +.... +# service samba_server start +Performing sanity check on Samba configuration: OK +Starting nmbd. +Starting smbd. +.... -Порт package:net/samba34[] добавляет новый стартовый сценарий, который может быть использован для контроля Samba. Для того, чтобы им можно было запускать, останавливать или перезапускать сервер Samba, добавьте следующую запись в файл [.filename]#/etc/rc.conf#: +Samba состоит из трёх отдельных демонов. Оба демона nmbd и smbd запускаются параметром `samba_enable`. Если также требуется разрешение имён через winbind, укажите: [.programlisting] .... -samba_enable="YES" +winbindd_enable="YES" .... -Или, для более тонкого контроля: +Samba можно остановить в любой момент, набрав: -[.programlisting] +[source, shell] .... -nmbd_enable="YES" +# service samba_server stop .... +Samba — это комплексный программный комплект, функциональность которого обеспечивает широкую интеграцию с сетями Microsoft(R) Windows(R). Для получения дополнительной информации о возможностях, выходящих за рамки базовой конфигурации, описанной здесь, обратитесь к https://www.samba.org[https://www.samba.org]. + +[[network-ntp]] +== Синхронизация времени с помощью NTP + +Со временем часы компьютера могут отставать или спешить. Это создаёт проблемы, так как многие сетевые службы требуют, чтобы компьютеры в сети использовали одинаковое точное время. Точное время также необходимо для обеспечения согласованности временных меток файлов. Протокол сетевого времени (NTP — Network Time Protocol) — это один из способов обеспечить точность часов в сети. + +FreeBSD включает man:ntpd[8], который можно настроить для запроса к другим серверам NTP с целью синхронизации часов на этом компьютере или для предоставления сервиса времени другим компьютерам в сети. + +В этом разделе описывается, как настроить ntpd в FreeBSD. Дополнительная документация доступна в [.filename]#/usr/share/doc/ntp/# в формате HTML. + +=== Конфигурация NTP + +На FreeBSD встроенный ntpd может использоваться для синхронизации системных часов. Настройка ntpd осуществляется с помощью переменных man:rc.conf[5] и файла [.filename]#/etc/ntp.conf#, как подробно описано в следующих разделах. + +ntpd взаимодействует с сетевыми узлами с помощью UDP-пакетов. Любые межсетевые экраны между вашей машиной и её NTP-узлами должны быть настроены так, чтобы разрешать входящие и исходящие UDP-пакеты через порт 123. + +==== Файл [.filename]#/etc/ntp.conf# + +ntpd читает файл [.filename]#/etc/ntp.conf#, чтобы определить, к каким серверам NTP обращаться. Рекомендуется выбирать несколько серверов NTP на случай, если один из серверов станет недоступен или его часы окажутся ненадёжными. По мере получения ответов ntpd отдаёт предпочтение более надёжным серверам перед менее надёжными. Запрашиваемые серверы могут быть локальными в сети, предоставляться ISP или выбираться из http://support.ntp.org/bin/view/Servers/WebHome[онлайн-списка общедоступных серверов NTP]. При выборе общедоступного сервера NTP следует выбирать сервер, географически близкий к вам, и ознакомиться с его политикой использования. Ключевое слово `pool` в конфигурации выбирает один или несколько серверов из пула серверов. Доступен http://support.ntp.org/bin/view/Servers/NTPPoolServers[онлайн-список общедоступных пулов NTP], организованный по географическим регионам. Кроме того, FreeBSD предоставляет спонсируемый проектом пул `0.freebsd.pool.ntp.org`. + +.Пример [.filename]#/etc/ntp.conf# +[example] +==== +Вот простой пример файла [.filename]#ntp.conf#. Его можно безопасно использовать в таком виде; он содержит рекомендуемые параметры `restrict` для работы в общедоступном сетевом подключении. + [.programlisting] .... -smbd_enable="YES" + +# Disallow ntpq control/query access. Allow peers to be added only +# based on pool and server statements in this file. +restrict default limited kod nomodify notrap noquery nopeer +restrict source limited kod nomodify notrap noquery + +# Allow unrestricted access from localhost for queries and control. +restrict 127.0.0.1 +restrict ::1 + +# Add a specific server. +server ntplocal.example.com iburst + +# Add FreeBSD pool servers until 3-6 good servers are available. +tos minclock 3 maxclock 6 +pool 0.freebsd.pool.ntp.org iburst + +# Use a local leap-seconds file. +leapfile "/var/db/ntpd.leap-seconds.list" .... -[NOTE] -==== -Внесение этих записей в [.filename]#/etc/rc.conf# также обеспечит автоматический запуск сервера Samba во время старта системы. ==== -Теперь становится возможным запустить сервер Samba, для чего наберите следующую команду: +Формат этого файла описан в man:ntp.conf[5]. Приведённые ниже описания дают краткий обзор только ключевых слов, использованных в примере файла выше. + +По умолчанию сервер NTP доступен для любого узла сети. Ключевое слово `restrict` управляет тем, какие системы могут обращаться к серверу. Поддерживается несколько записей `restrict`, каждая из которых уточняет ограничения, заданные в предыдущих утверждениях. Значения, указанные в примере, предоставляют локальной системе полный доступ для запросов и управления, в то время как удалённые системы могут только запрашивать время. Для получения дополнительной информации обратитесь к подразделу `Access Control Support` в man:ntp.conf[5]. + +Ключевое слово `server` указывает отдельный сервер для запросов. Файл может содержать несколько ключевых слов `server`, по одному серверу на каждой строке. Ключевое слово `pool` определяет пул серверов. ntpd добавит один или несколько серверов из этого пула по мере необходимости, чтобы достичь количества узлов, указанного с помощью значения `tos minclock`. Ключевое слово `iburst` предписывает ntpd выполнить серию из восьми быстрых обменов пакетами с сервером при первом установлении соединения, чтобы быстро синхронизировать системное время. + +Ключевое слово `leapfile` указывает расположение файла, содержащего информацию о високосных секундах. Этот файл автоматически обновляется с помощью man:periodic[8]. Указанное расположение файла должно соответствовать значению переменной `ntp_db_leapfile` в файле [.filename]#/etc/rc.conf#. + +==== Записи NTP в [.filename]#/etc/rc.conf# + +Установите `ntpd_enable=YES` для запуска ntpd при загрузке. После добавления `ntpd_enable=YES` в [.filename]#/etc/rc.conf#, ntpd можно немедленно запустить без перезагрузки системы, введя: -[source,shell] +[source, shell] .... -# /usr/local/etc/rc.d/samba start -Starting SAMBA: removing stale tdbs : -Starting nmbd. -Starting smbd. +# service ntpd start .... -За дальнейшей информацией об использовании rc скриптов обратитесь к crossref:config[configtuning-rcd,Использование rc во FreeBSD 5.X и последующих версиях]. +Для использования ntpd необходимо установить только `ntpd_enable`. При необходимости также могут быть заданы перечисленные ниже переменные [.filename]#rc.conf#. + +Установите `ntpd_sync_on_start=YES`, чтобы разрешить ntpd однократно корректировать время при запуске на любую величину. Обычно ntpd записывает сообщение об ошибке и завершает работу, если расхождение времени превышает 1000 секунд. Эта опция особенно полезна для систем без аккумуляторного резервного питания часов реального времени. + +Установите `ntpd_oomprotect=YES`, чтобы защитить демон ntpd от завершения системой при попытке восстановиться после состояния нехватки памяти (OOM). + +Установите в значении`ntpd_config=` расположение альтернативного файла [.filename]#ntp.conf#. + +Установите `ntpd_flags=` с любыми другими флагами ntpd по необходимости, но избегайте использования тех флагов, которые устанавливаются внутри файла [.filename]#/etc/rc.d/ntpd#: + +* `-p` (расположение pid-файла) +* `-c` (вместо этого установите `ntpd_config=` ) + + +==== ntpd и непривилегированный пользователь `ntpd` + +ntpd в FreeBSD может запускаться и работать как непривилегированный пользователь. Для этого требуется модуль политики man:mac_ntpd[4]. Скрипт запуска [.filename]#/etc/rc.d/ntpd# сначала проверяет конфигурацию NTP. Если возможно, он загружает модуль `mac_ntpd`, а затем запускает ntpd как непривилегированный пользователь `ntpd` (идентификатор пользователя 123). Чтобы избежать проблем с доступом к файлам и каталогам, скрипт запуска не будет автоматически запускать ntpd как `ntpd`, если конфигурация содержит любые файлозависимые параметры. + +Присутствие любого из следующих параметров в `ntpd_flags` требует ручной настройки, как описано ниже, для запуска от пользователя `ntpd`: -Samba состоит из трех отдельных даемонов. Вы можете видеть, что nmbd и smbd запускаются скриптом [.filename]#samba#. Если вы включили сервис разрешения имен winbind в [.filename]#smb.conf#, то увидите также запуск даемона winbindd. +* -f or --driftfile +* -i or --jaildir +* -k or --keyfile +* -l or --logfile +* -s or --statsdir -Вы можете остановить Samba в любой момент, набрав: +Наличие любого из следующих ключевых слов в [.filename]#ntp.conf# требует ручной настройки, как описано ниже, для запуска от пользователя `ntpd`: -[source,shell] +* crypto +* driftfile +* key +* logdir +* statsdir + +Для ручной настройки ntpd для запуска от пользователя `ntpd` необходимо: + +* Убедитесь, что пользователь `ntpd` имеет доступ ко всем файлам и каталогам, указанным в конфигурации. +* Обеспечьте загрузку или компиляцию модуля `mac_ntpd` в ядро. Подробности см. в man:mac_ntpd[4]. +* Установите `ntpd_user="ntpd"` в [.filename]#/etc/rc.conf# + +=== Использование NTP с PPP-подключением + +ntpd не требует постоянного подключения к Интернету для корректной работы. Однако, если PPP-соединение настроено на дозвон по требованию, следует предотвратить инициацию дозвона или поддержание соединения из-за трафика NTP. Это можно настроить с помощью директив `filter` в [.filename]#/etc/ppp/ppp.conf#. Например: + +[.programlisting] .... -# /usr/local/etc/rc.d/samba stop +set filter dial 0 deny udp src eq 123 +# Prevent NTP traffic from initiating dial out +set filter dial 1 permit 0 0 +set filter alive 0 deny udp src eq 123 +# Prevent incoming NTP traffic from keeping the connection open +set filter alive 1 deny udp dst eq 123 +# Prevent outgoing NTP traffic from keeping the connection open +set filter alive 2 permit 0/0 0/0 .... -Samba это сложный программный набор с функциональностью, позволяющей полную интеграцию в сети Microsoft(R) Windows(R). За дальнейшей информацией о функциях, выходящих за рамки описанной здесь базовой установки, обращайтесь к http://www.samba.org[http://www.samba.org]. +Для получения более подробной информации обратитесь к разделу `ФИЛЬТРАЦИЯ ПАКЕТОВ` в man:ppp[8] и примерам в [.filename]#/usr/share/examples/ppp/#. -[[network-ftp]] -== Протокол передачи файлов (FTP) +[NOTE] +==== +Некоторые интернет-провайдеры блокируют порты с низкими номерами, что мешает работе NTP, так как ответы никогда не достигают машины. +==== -=== Обзор +[[network-iscsi]] +== Настройка инициатора и цели iSCSI -Протокол передачи файлов (File Transfer Protocol, FTP) дает пользователям простой путь передачи файлов на и с FTP сервера. В FreeBSD серверная программа FTP, ftpd, включена в базовую систему. Это упрощает настройку и администрирование FTP сервера в FreeBSD. +iSCSI — это способ совместного использования хранилища по сети. В отличие от NFS, который работает на уровне файловой системы, iSCSI работает на уровне блочного устройства. -=== Настройка +В терминологии iSCSI система, предоставляющая хранилище, называется _целью_. Хранилище может быть физическим диском, областью, представляющей несколько дисков, или частью физического диска. Например, если диск(и) отформатированы с использованием ZFS, можно создать zvol для использования в качестве хранилища iSCSI. -Наиболее важный шаг заключается в определении того, каким учетным записям будет позволено получать доступ к FTP серверу. В обычной системе FreeBSD есть множество системных учетных записей, используемых различными даемонами, но пользователям должно быть запрещен вход с использованием этих учетных записей. В файле [.filename]#/etc/ftpusers# находится список пользователей, которым запрещен доступ по FTP. По умолчанию он включает упомянутые системные учетные записи, но в него можно добавить и определенных пользователей, которым будет запрещен доступ по FTP. +Клиенты, которые обращаются к хранилищу iSCSI, называются _инициаторами_. Для инициаторов хранилище, доступное через iSCSI, отображается как неформатированный диск, известный как LUN (логический номер устройства). Узлы устройств для диска появляются в [.filename]#/dev/#, и устройство должно быть отдельно отформатировано и смонтировано. -Вам может понадобиться ограничить доступ определенных пользователей без полного запрета использования FTP. Это можно сделать через файл [.filename]#/etc/ftpchroot#. В нем находится список пользователей и групп, к которым применяется ограничение доступа. На странице справочника man:ftpchroot[5] дана подробная информация, и она не будет дублироваться здесь. +FreeBSD предоставляет встроенную поддержку iSCSI целевой системы и инициатора на уровне ядра. В этом разделе описывается, как настроить систему FreeBSD в качестве целевой системы или инициатора. -Если вы захотите разрешить анонимный FTP доступ на сервер, в системе FreeBSD необходимо создать пользователя `ftp`. Этот пользователь сможет входить на FTP сервер с именем пользователя `ftp` или `anonymous`, с любым паролем (существует соглашение об использовании почтового адреса пользователя в качестве пароля). FTP сервер выполнит man:chroot[2] при входе пользователя anonymous для ограничения доступа только домашним каталогом пользователя `ftp`. +[[network-iscsi-target]] +=== Настройка цели iSCSI -Существуют два текстовых файла, определяющих сообщение, отправляемое FTP клиентам. Содержимое файла [.filename]#/etc/ftpwelcome# будет выведено пользователям перед приглашением на вход. После успешного входа будет выведено содержимое файла [.filename]#/etc/ftpmotd#. Обратите внимание, что путь к этому файлу задается относительно домашнего каталога пользователя, так что анонимным пользователям будет отправляться [.filename]#~ftp/etc/ftpmotd#. +Для настройки цели iSCSI создайте конфигурационный файл [.filename]#/etc/ctl.conf#, добавьте строку в [.filename]#/etc/rc.conf#, чтобы убедиться, что демон man:ctld[8] автоматически запускается при загрузке, а затем запустите демон. -Как только FTP сервер был правильно настроен, он должен быть включен в [.filename]#/etc/inetd.conf#. Все, что необходимо, это удалить символ комментария "#" из начала существующей строки ftpd: +Вот пример простого файла конфигурации [.filename]#/etc/ctl.conf#. Полное описание доступных опций этого файла можно найти в man:ctl.conf[5]. [.programlisting] .... -ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l +portal-group pg0 { + discovery-auth-group no-authentication + listen 0.0.0.0 + listen [::] +} + +target iqn.2012-06.com.example:target0 { + auth-group no-authentication + portal-group pg0 + + lun 0 { + path /data/target0-0 + size 4G + } +} .... -Как описано в <<network-inetd-reread>>, inetd должен перечитать конфигурацию после того, как этот файл настройки был изменен. Пожалуйста обратитесь к <<network-inetd-settings>> за деталями по запуску inetd на вашей системе. +Первая запись определяет группу порталов `pg0`. Группы порталов определяют, на каких сетевых адресах будет слушать демон man:ctld[8]. Запись `discovery-auth-group no-authentication` указывает, что любой инициатор может выполнять обнаружение целей iSCSI без аутентификации. Третья и четвёртая строки настраивают man:ctld[8] для прослушивания всех IPv4-адресов (`listen 0.0.0.0`) и IPv6-адресов (`listen [::]`) на стандартном порту 3260. + +Нет необходимости определять группу порталов, так как существует встроенная группа порталов с именем `default`. В этом случае разница между `default` и `pg0` заключается в том, что для `default` обнаружение целей всегда запрещено, а для `pg0` — всегда разрешено. -В качестве альтернативы, демон ftpd может быть запущен как самостоятельный сервер. В этом случае достаточно установить соответствующую переменную в файле [.filename]#/etc/rc.conf#: +Вторая запись определяет одну цель. У цели есть два возможных значения: машина, обслуживающая iSCSI, или именованная группа LUN. В этом примере используется второе значение, где `iqn.2012-06.com.example:target0` — это имя цели. Это имя цели подходит для тестирования. Для реального использования замените `com.example` на настоящий домен, записанный в обратном порядке. `2012-06` представляет год и месяц получения контроля над этим доменом, а `target0` может быть любым значением. В этом файле конфигурации можно определить любое количество целей. + +Строка `auth-group no-authentication` разрешает всем инициаторам подключаться к указанной цели, а `portal-group pg0` делает цель доступной через группу порталов `pg0`. + +Следующий раздел определяет LUN. Для инициатора каждый LUN будет виден как отдельное дисковое устройство. Для каждой цели можно определить несколько LUN. Каждый LUN идентифицируется числом, где LUN 0 является обязательным. Строка `path /data/target0-0` определяет полный путь к файлу или zvol, который используется для LUN. Этот путь должен существовать до запуска man:ctld[8]. Вторая строка необязательна и указывает размер LUN. + +Далее, чтобы убедиться, что демон man:ctld[8] запускается при загрузке, добавьте эту строку в [.filename]#/etc/rc.conf#: [.programlisting] .... -ftpd_enable="YES" +ctld_enable="YES" .... -Демон будет запущен автоматически при следующей загрузке системы. Также демон можно запустить вручную, для чего выполните следующую команду как пользователь `root`: +Чтобы запустить man:ctld[8] сейчас, выполните следующую команду: -[source,shell] +[source, shell] .... -# /etc/rc.d/ftpd start +# service ctld start .... -Теперь вы можете войти на FTP сервер, введя: +Поскольку демон man:ctld[8] запускается, он читает файл [.filename]#/etc/ctl.conf#. Если этот файл был изменён после запуска демона, используйте следующую команду, чтобы изменения вступили в силу немедленно: -[source,shell] +[source, shell] .... -% ftp localhost +# service ctld reload .... -=== Поддержка -Для протоколирования даемон ftpd использует сообщения man:syslog[3]. По умолчанию, man:syslog[3] поместит сообщения, относящиеся к FTP, в файл [.filename]#/var/log/xferlog#. Местоположение лог файла FTP может быть изменено путем изменения следующей строки в файле [.filename]#/etc/syslog.conf#: +==== Аутентификация + +Предыдущий пример изначально небезопасен, так как не использует аутентификацию, предоставляя любому полный доступ ко всем целям. Чтобы потребовать имя пользователя и пароль для доступа к целям, измените конфигурацию следующим образом: [.programlisting] .... -ftp.info /var/log/xferlog -.... +auth-group ag0 { + chap username1 secretsecret + chap username2 anothersecret +} -Учитывайте потенциальные проблемы, возникающие с анонимным FTP сервером. В частности, вы должны дважды подумать, прежде чем позволить анонимным пользователям загружать файлы на сервер. Вы можете обнаружить, что FTP сайт стал форумом, на котором происходит обмен нелицензионным коммерческим программным обеспечением или чем-то еще хуже. Если вам необходимо разрешить анонимную выгрузку файлов на FTP, права должны быть настроены таким образом, чтобы эти файлы не могли прочитать другие анонимные пользователи до их рассмотрения администратором. +portal-group pg0 { + discovery-auth-group no-authentication + listen 0.0.0.0 + listen [::] +} -[[network-ntp]] -== Синхронизация часов через NTP +target iqn.2012-06.com.example:target0 { + auth-group ag0 + portal-group pg0 + lun 0 { + path /data/target0-0 + size 4G + } +} +.... -=== Обзор +Раздел `auth-group` определяет пары имени пользователя и пароля. Инициатор, пытающийся подключиться к `iqn.2012-06.com.example:target0`, должен сначала указать определённое имя пользователя и секрет. Однако обнаружение цели по-прежнему разрешено без аутентификации. Чтобы потребовать аутентификацию при обнаружении цели, установите `discovery-auth-group` в определённое имя `auth-group` вместо `no-authentication`. -С течением времени часы компьютера имеют тенденцию отставать. Network Time Protocol - Сетевой Протокол Времени (NTP) является одним из способов вести точное время. +Обычно определяют один экспортируемый объект для каждого инициатора. В качестве сокращения для синтаксиса выше, имя пользователя и пароль могут быть указаны непосредственно в записи объекта: -Многие сервисы Интернет опираются или сильно зависят от точности часов компьютеров. К примеру, веб-сервер может получать запрос на посылку файла, который был недавно модифицирован. В локальной сети необходимо, чтобы часы компьютеров, совместно использующих файлы, были синхронизированы, чтобы время модификации файлов устанавливалось правильно. Такие службы, как man:cron[8], также зависят от правильности установки системных часов, поскольку запускают команды в определенное время. +[.programlisting] +.... +target iqn.2012-06.com.example:target0 { + portal-group pg0 + chap username1 secretsecret -FreeBSD поставляется с сервером NTP man:ntpd[8], который можно использовать для опроса других серверов NTP для установки часов на вашей машине или предоставления услуг точного времени. + lun 0 { + path /data/target0-0 + size 4G + } +} +.... -=== Выбор подходящих серверов NTP -Для синхронизации ваших часов вам нужно найти для использования один или большее количество серверов NTP. Ваш сетевой администратор или провайдер могут иметь сервер NTP для этой цели-обратитесь к ним, так ли это в вашем случае. Существует http://support.ntp.org/bin/view/Servers/WebHome[онлайн список общедоступных серверов NTP], которым можно воспользоваться для поиска ближайшего к вам сервера NTP. Не забудьте выяснить политику выбранного вами сервера и спросить разрешения, если это требуется. +[[network-iscsi-initiator]] +=== Настройка инициатора iSCSI -Выбор нескольких несвязанных серверов NTP является хорошей идеей в том случае, если один из используемых вами серверов станет недоступным или его часы неточны. man:ntpd[8] использует ответы, которые он получает от других серверов с умом-он делает предпочтение надежным серверам. +[NOTE] +==== +Описаный в этом разделе инициатор iSCSI поддерживается начиная с FreeBSD 10.0-RELEASE. Для использования инициатора iSCSI, доступного в более старых версиях, обратитесь к man:iscontrol[8]. +==== -=== Настройка вашей машины +Инициатору iSCSI требуется, чтобы демон man:iscsid[8] был запущен. Этот демон не использует файл конфигурации. Для его автоматического запуска при загрузке добавьте следующую строку в [.filename]#/etc/rc.conf#: -==== Базовая конфигурация +[.programlisting] +.... +iscsid_enable="YES" +.... -Если вам нужно только синхронизировать ваши часы при загрузке машины, вы можете воспользоваться утилитой man:ntpdate[8]. Это может подойти для некоторых настольных машин, которые часто перезагружаются и только требуют изредка синхронизироваться, но на большинстве машин должен работать man:ntpd[8]. +Чтобы сейчас запустить man:iscsid[8], выполните следующую команду: -Использование man:ntpdate[8] при загрузке также хорошо для машин, на которых запущен даемон man:ntpd[8]. Программа man:ntpd[8] изменяет время постепенно, тогда как man:ntpdate[8] устанавливает время вне зависимости от того, насколько велика разница между текущим временем машины и точным временем. +[source, shell] +.... +# service iscsid start +.... -Для включения man:ntpdate[8] во время загрузки, добавьте строчку `ntpdate_enable="YES"` в файл [.filename]#/etc/rc.conf#. Вам также потребуется указать все серверы, с которыми вы хотите синхронизироваться, и все параметры, которые передаются в man:ntpdate[8], в `ntpdate_flags`. +Подключение к цели может быть выполнено с файлом конфигурации [.filename]#/etc/iscsi.conf# или без него. В этом разделе показаны оба типа подключений. -==== Общие настройки +==== Подключение к цели без файла конфигурации -NTP настраивается в файле [.filename]#/etc/ntp.conf#, формат которого описан в man:ntp.conf[5]. Вот простой пример: +Для подключения инициатора к одному целевому устройству укажите IP-адрес портала и имя целевого устройства: -[.programlisting] +[source, shell] .... -server ntplocal.example.com prefer -server timeserver.example.org -server ntp2a.example.net - -driftfile /var/db/ntp.drift +# iscsictl -A -p 10.10.10.10 -t iqn.2012-06.com.example:target0 .... -Параметр `server` задает, какие серверы будут использоваться, по одному в каждой строке. Если сервер задан с аргументом `prefer`, как `ntplocal.example.com`, то этому серверу отдается предпочтение перед остальными. Ответ от предпочтительного сервера будет отброшен, если он значительно отличается от ответов других серверов, в противном случае он будет использоваться безотносительно к другим ответам. Аргумент `prefer` обычно используется для серверов NTP, о которых известно, что они очень точны, такими, на которых используется специальное оборудование точного времени. - -Параметр `driftfile` задает файл, который используется для хранения смещения частоты системных часов. Программа man:ntpd[8] использует его для автоматической компенсации естественного смещения часов, позволяя ему поддерживать достаточно правильную настройку, даже если он на некоторый период отключается от внешнего источника информации о времени. +Для проверки успешности соединения выполните команду `iscsictl` без аргументов. Вывод должен выглядеть примерно так: -Параметр `driftfile` задает, какой файл используется для сохранения информации о предыдущих ответах от серверов NTP, которые вы используете. Этот файл содержит внутреннюю информацию для NTP. Он не должен изменяться никакими другими процессами. +[.programlisting] +.... +Target name Target portal State +iqn.2012-06.com.example:target0 10.10.10.10 Connected: da0 +.... -==== Управление доступом к вашему серверу +В этом примере сеанс iSCSI был успешно установлен, где [.filename]#/dev/da0# представляет подключённый LUN. Если цель `iqn.2012-06.com.example:target0` экспортирует более одного LUN, в соответствующем разделе вывода будет показано несколько устройств: -По умолчанию ваш сервер NTP будет доступен всем хостам в Интернет. Параметр `restrict` в файле [.filename]#/etc/ntp.conf# позволяет вам контролировать, какие машины могут обращаться к вашему серверу. +[source, shell] +.... +Connected: da0 da1 da2. +.... -Если вы хотите запретить всем машинам обращаться к вашему серверу NTP, добавьте следующую строку в файл [.filename]#/etc/ntp.conf#: +Любые ошибки будут отображены в выводе, а также в системных журналах. Например, это сообщение обычно означает, что демон man:iscsid[8] не запущен: [.programlisting] .... -restrict default ignore +Target name Target portal State +iqn.2012-06.com.example:target0 10.10.10.10 Waiting for iscsid(8) .... -[NOTE] -==== -Эта строка конфигурации также предотвратит доступ вашего сервера к другим серверам, перечисленным в вашей локальной конфигурации. Если вам необходимо синхронизировать ваш сервер с внешним сервером NTP, вам необходимо будет изменить настройки относительно этого конкретного сервера. За более детальной информацией обратитесь к странице руководства man:ntp.conf[5]. -==== - -Если вы хотите разрешить синхронизировать свои часы с вашим сервером только машинам в вашей сети, но запретить им настраивать сервер или быть равноправными участниками синхронизации времени, то вместо указанной добавьте строчку +Следующее сообщение указывает на проблему с сетью, например, неверный IP-адрес или порт: [.programlisting] .... -restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap +Target name Target portal State +iqn.2012-06.com.example:target0 10.10.10.11 Connection refused .... -где `192.168.1.0` является адресом IP вашей сети, а `255.255.255.0` её сетевой маской. +Это сообщение означает, что указано неправильное имя цели: -[.filename]#/etc/ntp.conf# может содержать несколько директив `restrict`. Для получения подробной информации обратитесь к подразделу `Access Control Support` (Поддержка Управления Доступом) в man:ntp.conf[5]. +[.programlisting] +.... +Target name Target portal State +iqn.2012-06.com.example:target0 10.10.10.10 Not found +.... -=== Запуск сервера NTP +Это сообщение означает, что цель требует аутентификации: -Для того, чтобы сервер NTP запускался при загрузке, добавьте строку `ntpd_enable="YES"` в файл [.filename]#/etc/rc.conf#. Если вы хотите передать дополнительные опции в man:ntpd[8], то отредактируйте параметр `ntpd_flags` в файле [.filename]#/etc/rc.conf#. +[.programlisting] +.... +Target name Target portal State +iqn.2012-06.com.example:target0 10.10.10.10 Authentication failed +.... -Для запуска сервера без перезагрузки вашей машины, выполните команду `ntpd`, не забыв задать дополнительные параметры из переменной `ntpd_flags` в файле [.filename]#/etc/rc.conf#. К примеру: +Чтобы указать имя пользователя CHAP и секрет, используйте следующий синтаксис: -[source,shell] +[source, shell] .... -# ntpd -p /var/run/ntpd.pid +# iscsictl -A -p 10.10.10.10 -t iqn.2012-06.com.example:target0 -u user -s secretsecret .... -=== Использование ntpd с временным подключением к Интернет -Для нормальной работы программе man:ntpd[8] не требуется постоянное подключение к Интернет. Однако если ваше временное подключение к Интернет настроено для дозвона по требованию, хорошо бы запретить трафику NTP вызывать дозвон или поддерживать соединение постоянно. Если вы используете пользовательский PPP, то можете воспользоваться директивами `filter` в файле [.filename]#/etc/ppp/ppp.conf#. К примеру: +==== Подключение к цели с использованием файла конфигурации + +Для подключения с использованием файла конфигурации создайте файл [.filename]#/etc/iscsi.conf# с содержимым, подобным этому: [.programlisting] .... - set filter dial 0 deny udp src eq 123 - # Prevent NTP traffic from initiating dial out - set filter dial 1 permit 0 0 - set filter alive 0 deny udp src eq 123 - # Prevent incoming NTP traffic from keeping the connection open - set filter alive 1 deny udp dst eq 123 - # Prevent outgoing NTP traffic from keeping the connection open - set filter alive 2 permit 0/0 0/0 +t0 { + TargetAddress = 10.10.10.10 + TargetName = iqn.2012-06.com.example:target0 + AuthMethod = CHAP + chapIName = user + chapSecret = secretsecret +} .... -Более подробную информацию можно найти в разделе `PACKET FILTERING` (ФИЛЬТРАЦИЯ ПАКЕТОВ) в man:ppp[8], а примеры в [.filename]#/usr/shared/examples/ppp/#. +`t0` задаёт псевдоним для раздела конфигурационного файла. Он будет использоваться инициатором для указания, какую конфигурацию применять. Остальные строки определяют параметры, используемые при подключении. `TargetAddress` и `TargetName` являются обязательными, тогда как остальные параметры — опциональными. В этом примере показаны имя пользователя CHAP и секретный ключ. -[NOTE] -==== -Некоторые провайдеры Интернет блокируют трафик по портам с маленькими номерами, что приводит к неработоспособности NTP, так как ответы никогда не достигают вашей машины. -==== +Для подключения к указанной цели укажите псевдоним: + +[source, shell] +.... +# iscsictl -An t0 +.... -=== Дополнительная литература +Или для подключения ко всем целям, определенным в файле конфигурации, используйте: -Документация по серверу NTP может быть найдена в каталоге [.filename]#/usr/shared/doc/ntp/# в формате HTML. +[source, shell] +.... +# iscsictl -Aa +.... -[[network-syslogd]] -== * Remote Host Logging with `syslogd` +Чтобы инициатор автоматически подключался ко всем целям в [.filename]#/etc/iscsi.conf#, добавьте следующее в [.filename]#/etc/rc.conf#: -Этот раздел не переведен. +[.programlisting] +.... +iscsictl_enable="YES" +iscsictl_flags="-Aa" +.... |
