Ubuntu Server. Руководство (2012 год) - часть 3

 

  Главная      Книги - Разные     Ubuntu Server. Руководство (2012 год)

 

поиск по сайту            правообладателям  

 

   

 

   

 

содержание      ..     1      2      3      4      ..

 

 

 

Ubuntu Server. Руководство (2012 год) - часть 3

 

 

Защита
• Также, каждая цепочка в таблице фильтров (таблица по умолчанию,
в которой происходит большая часть фильтрации) имеет политику по
умолчанию для правила ACCEPT, но если вы создаёте брандмауэр в
дополнение к устройству шлюза, вы можете установить политики в DROP
или REJECT. В этом случае ваш замаскированный трафик должен быть
разрешён в цепочке FORWARD, для того, чтобы правило вверху работало:
sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.0/16 -m state \
--state ESTABLISHED,RELATED -i ppp0 -j ACCEPT
Верхняя команда разрешит все соединения из вашей локальной сети
с Интернетом, и весь трафик, относящийся к этим соединениям, будет
возвращаться машинам, их установившим.
• Если вы хотите включить маскарадинг после перезагрузки, что вы уже,
вероятно сделали, отредактируйте /etc/rc.local и добавьте любую из
перечисленных выше команд. Например, добавьте первую команду без
фильтрации:
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE
3.4. Журналирование
Журналы брандмауэра - это ценные данные при определении атак,
нахождения проблем в правилах и причины необычной активности
вашей сети. Вы также должны включить правила регистрации
событий брандмауэра, и эти правила должны предшествовать любому
применяемому завершаемому правилу (правило, целью которого является
определение судьбы пакета: ACCEPT, DROP, or REJECT)
Если вы используете ufw, вы можете включить регистрацию событий, введя
следующую команду в терминале:
sudo ufw logging on
Для отключения регистрации событий в ufw просто замените on на off в
приведённой выше команде.
Если используется iptables вместо ufw, введите:
sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 \
-j LOG --log-prefix "NEW_HTTP_CONN: "
186
Защита
Запрос, поступивший на порт 80 от компьютера в локальной сети, затем
сгенерирует текст журнала в dmesg, который выглядит примерно так (одна
строка разделена на три, чтобы уместить её в этом документе):
[4304885.870000] NEW_HTTP_CONN: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00
SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=58288 DF PROTO=TCP
SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0
Вышеупомянутый текст журнала также появится в файлах /var/log/
messages, /var/log/syslog и /var/log/kern.log. Это поведение можно изменить,
отредактировав соответствующим образом файл /etc/syslog.conf или с
помощью установки и настройки ulogd и использования ULOG вместо LOG.
Демон ulogd - это сервер, работающий в пространстве пользователя,
который слушает инструкции журналирования от ядра специально для
межсетевых экранов и может записывать журнал в любой выбранный вами
файл, и даже в базы данных PostgreSQL или MySQL. Для того, чтобы легко
разобраться в файлах журнала, можно использовать их анализаторы, такие
как logwatch, fwanalog, fwlogwatch или lire.
3.5. Другие инструменты
Есть много инструментов, предназначенных помочь вам создать
полноценный брандмауэр без каких-либо знаний iptables. Для GUI-
ориентированных:
fwbuilder1 очень мощный инструмент, будет удобен администраторам,
уже имевшим дело с коммерческими брандмауэрами, например,
Checkpoint FireWall-1.
Если вы предпочитаете инструменты командной строки с текстовыми
конфигурационными файлами:
Shorewall2 - очень мощное решение, призванное помочь вам настроить
улучшенный брандмауэр для любой сети.
3.6. Ссылки
• Вики-страница Ubuntu Firewall3 содержит необходимую информацию о
работе c ufw..
• Также руководство пользователя по ufw содержит много полезной
информации: man ufw.
• Больше информации по использованию iptables ищите на страничке
packet-filtering-HOWTO4
187
Защита
• Страничка nat-HOWTO5 содержит дополнительную информацию о
маскарадинге.
IPTables HowTo6 Ubuntu Вики также отличный источник.
188
Защита
4. AppArmor
AppArmor - это реализация в виде модулей безопасности Linux (LSM)
основанного на именах мандатного управления доступом. AppArmor
ограничивает доступ отдельных программ к перечисленному набору
файлов и возможностей, указанных в стандартах 1003.1e posix.
Приложение AppArmor по умолчанию установлено и запущено. Оно
использует профили приложений, чтобы определить, какие файлы и права
требуются данному приложению. Некоторые пакеты будут устанавливать
собственные профили, дополнительные профили могут быть найдены в
пакете apparmor-profiles.
Для установки пакета apparmor-profiles наберите в терминале:
sudo apt-get install apparmor-profiles
Профили AppArmor имеют два режима выполнения:
• Жалоб/Обучения (Complaining/Learning): нарушения профиля разрешаются
и фиксируются. Удобен для тестирования и разработки новых профилей.
• Принудительный/Ограниченный (Enforced/Confined): принудительно
применяет политику профиля и регистрирует нарушения.
4.1. Использование AppArmor
Пакет apparmor-utils содержит утилиты для командной стоки, которые
вы можете использовать для изменения режима выполнения AppArmor,
находить статус профиля, создавать новые профили и т.д.
• apparmor_status используется для просмотра текущего статуса профилей
AppArmor.
sudo apparmor_status
• aa-complain переводит профиль в режим жалоб.
sudo aa-complain /path/to/bin
• aa-enforce переводит профиль в принудительный режим.
sudo aa-enforce /path/to/bin
• Каталог /etc/apparmor.d хранит профили AppArmor. Он может
использоваться для управления режимом всех профилей.
Введите следующее для перевода всех профилей в режим жалоб:
189
Защита
sudo aa-complain /etc/apparmor.d/*
Для перевода всех профилей в принудительный режим:
sudo aa-enforce /etc/apparmor.d/*
• apparmor_parser используется для загрузки профиля в ядро. Он также
может использоваться для перезагрузки текущего загруженного
профиля с помощью опции -r. Для загрузки профиля:
cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a
Для перезагрузки профиля:
cat /etc/apparmor.d/profile.name | sudo apparmor_parser -r
/etc/init.d/apparmor может использоваться для перезагрузки всех
профилей:
sudo /etc/init.d/apparmor reload
• Каталог /etc/apparmor.d/disable может использоваться совместно с опцией
apparmor_parser -R для отключения профиля.
sudo ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/profile.name
Для повторного включения отключённого профиля удалите
символическую ссылку на профиль в /etc/apparmor.d/disable/. После этого
загрузите профиль с помощью опции -a.
sudo rm /etc/apparmor.d/disable/profile.name
cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a
• Приложение AppArmor может быть отключено, а модули ядра -
выгружены, если вы введёте нижеследующее:
sudo /etc/init.d/apparmor stop
sudo update-rc.d -f apparmor remove
• Для повторного включения AppArmor введите:
sudo /etc/init.d/apparmor start
sudo update-rc.d apparmor defaults
Замените profile.name на имя того профиля, которым вы хотите
управлять. Также замените /path/to/bin/ на действительный путь к
файлу. Например, для команды ping используйте /bin/ping
190
Защита
4.2. Профили
Профили AppArmor являются простыми текстовыми файлами,
расположенными в /etc/apparmor.d/. Имена этих файлов состоят из полного
пути к исполняемому файлу с заменой "/" на ".". Например, /etc/apparmor.d/
bin.ping является профилем AppArmor для команды /bin/ping.
Есть два главных типа правил в профилях:
Path entries: описывает, к каким файлам приложение может иметь доступ
в файловой системе.
Capability entries: определяет, какие привилегии ограниченному процессу
разрешено использовать.
Например, взгляните на файл /etc/apparmor.d/bin.ping:
#include <tunables/global>
/bin/ping flags=(complain) {
#include <abstractions/base>
#include <abstractions/consoles>
#include <abstractions/nameservice>
capability net_raw,
capability setuid,
network inet raw,
/bin/ping mixr,
/etc/modules.conf r,
}
#include <tunables/global>: включает операторы из других файлов. Это
позволяет помещать в общий файл операторы, относящиеся к нескольким
приложениям.
/bin/ping flags=(complain): путь к профилированной программе, также
настройки режима complain
capability net_raw,: даёт доступ к возможности CAP_NET_RAW Posix.1e.
/bin/ping mixr,: даёт приложению права доступа на чтение и исполнение
файла.
После редактирования файла профиля он должен быть
перезагружен. Более подробно смотрите Раздел 4.1,
«Использование AppArmor» [189] .
4.2.1. Создание профиля
Разработка тест-плана: Попробуйте продумать, как приложение должно
быть использовано. Тест-план должен быть разделён на небольшие
191
Защита
тестовые случаи. Каждый тестовый случай должен иметь краткое
описание и список шагов, по которым нежно следовать.
Некоторые стандартные тестовые случаи:
• Запуск программы.
• Завершение программы.
• Перезагрузка программы.
• Проверка всех команд, поддерживаемых скриптом init.
Генерация нового профиля: используйте aa-genprof, чтобы сгенерировать
новый профиль. Введите в консоли:
sudo aa-genprof executable
Например:
sudo aa-genprof slapd
• Чтобы ваш новый профиль был включён в пакет apparmor-profiles,
отправьте на Launchpad сообщение об ошибке в пакете AppArmor7:
• Включите ваш план тестирования и контрольные примеры.
• Укажите в сведениях об ошибке ваш профиль.
4.2.2. Обновление профилей
Когда программа неправильно работает, сообщения аудита посылаются
в файлы журналов. Программа aa-logprof может использоваться для
сканирования журналов на предмет сообщений аудита AppArmor, их
проверки и обновления профилей. Введите в терминале:
sudo aa-logprof
4.3. Ссылки
• Расширенные опции конфигурирования можно найти в Руководстве
администратора по AppArmor 8
• Чтобы подробнее узнать о том, как использовать AppArmor с другими
выпусками Ubuntu, зайдите на страницу AppArmor Community Wiki9.
• Ещё одним введением в AppArmor является страница OpenSUSE
AppArmor10.
apparmor/apparmor201_sp10_admin/data/book_apparmor_admin.html
10
192
Защита
• Отличное место для получения помощи по AppArmor, а также для участия
в сообществе Ubuntu Server - это IRC канал #ubuntu-server на freenode11.
11
193
Защита
5. Сертификаты
Одной из наиболее распространённых видов криптографии на сегодняшний
день является криптосистема с открытым ключом. Криптографическая
система с открытым ключом использует открытый ключ и секретный
ключ. Система шифрует информацию с помощью открытого ключа. Такая
информация может быть дешифрована только с помощью секретного
ключа.
Обычное применение криптосистемы с открытым ключом - шифрование
трафика приложений с помощью соединений через Secure Socket Layer
(SSL) или Transport Layer Security (TLS). Например, конфигурирование
Apache для поддержки HTTPS (протокола HTTP через SSL). Это обеспечивает
возможность шифровать трафик, используя протокол, который сам по себе
не обеспечивает шифрования.
Сертификат является методом, используемым для распространения
публичного ключа и другой информации о сервере и организации, которая
за него отвечает. Сертификаты могут иметь цифровую подпись от
центра сертификации (CA). Центр сертификации является доверенным
третьим лицом, которое подтверждает, что информация, содержащаяся в
сертификате, является точной.
5.1. Типы сертификатов
Чтобы создать защищённый сервер с использованием криптографии
открытого ключа, в большинстве случаев, вы посылаете запрос на
сертификат (с открытым ключом), подтверждаете подлинность данных
о своей компании и оплачиваете услуги удостоверяющего центра (CA).
Удостоверяющий центр проверяет ваш запрос и присылает вам сертификат
для вашего сервера. В качестве альтернативы вы можете создать свой
собственный самоподписанный сертификат.
Учтите, что самоподписанные сертификаты не должны
использоваться в большинстве серьёзных производственных систем.
Продолжая пример с HTTPS, подписанный CA сертификат имеет две важных
особенности, которых сампоподписанный сертификат не имеет:
• Браузеры (обычно) автоматически определяют сертификаты и разрешают
безопасные соединения без подтверждения пользователя.
• Выданный CA подписанный сертификат является гарантией подлинности
организации, предоставляющей веб-страницы браузеру.
194
Защита
Большинство веб-браузеров и компьютеров, которые поддерживают
SSL, имеют список центров сертификации, чьи сертификаты они
принимают автоматически. Если браузер сталкивается с сертификатом,
чей центр сертификации отсутствует в списке, то браузер просит
пользователя принять или отклонить это соединение. Также, различные
приложения могут генерировать сообщение об ошибке при использовании
самоподписанных сертификатов.
Процесс получения сертификата от CA довольно прост. Краткие сведения
об этом:
1. Создайте пару ключей шифрования, открытый и закрытый.
2. Создайте запрос сертификата, основанный на открытом ключе. Данный
запрос содержит в себе информацию о вашем сервере и компании, где он
размещается.
3. Отправьте запрос сертификата вместе с документами,
подтверждающими вашу личность, в CA. Мы не можем рекомендовать
вам, какой удостоверяющий центр выбрать. Ваше решение может
основываться на вашем прошлом опыте, на опыте ваших друзей и коллег,
или просто на финансовых факторах.
Если вы определились с CA, вам необходимо следовать инструкциям,
которые он предоставит для получения его сертификата.
4. Когда CA установит, что вы являетесь тем, за кого себя выдаёте, он
пришлёт вам цифровой сертификат.
5. Установите этот сертификат на ваш защищённый сервер и настройте
соответствующие приложения на использование сертификата.
5.2. Генерация запроса на подпись сертификата
(Certificate Signing Request, или CSR)
Получаете ли вы сертификат от CA или генерируете его собственноручно,
первым шагом должно быть создание ключа.
Если сертификат будет использоваться системными сервисами, такими как
Apache, Postfix, Dovecot и т.п., уместно создать ключ без пароля. Отсутствие
пароля позволяет сервису запускаться без вмешательства пользователя,
обычно это предпочтительный вариант запуска сервиса.
В этом разделе показано, как создать ключ с паролем и без него. Ключ
без пароля затем будет использован для создания сертификата, который
можно использовать для различных системных сервисов.
Запуск вашего защищённого сервиса без пароля удобен потому, что
вам не потребуется вводить пароль при каждом запуске данного
195
Защита
сервиса. Однако это небезопасно и компрометация ключа будет
означать и компрометацию сервера.
Для генерации ключей запроса подписи сертификата (CSR) запустите
следующую команду из строки терминала:
openssl genrsa -des3 -out server.key 2048
Generating RSA private key, 2048 bit long modulus
..........................++++++
.......++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Теперь вы можете ввести свою парольную фразу. Для наилучшей
безопасности она должна содержать не менее восьми символов.
Минимальная длина - четыре символа. Пароль должен содержать цифры
и/или специальные символы и не являться словом из словаря. Запомните
то, что вы введёте.
Для подтверждения наберите парольную фразу ещё раз. Как только вы
наберете её правильно, ключ к серверу будет создан и сохранён в файле
server.key.
Теперь создадим небезопасный ключ, без кодовой фразы, и перетасуем
имена ключей:
openssl rsa -in server.key -out server.key.insecure
mv server.key server.key.secure
mv server.key.insecure server.key
Небезопасный ключ теперь называется server.key, и вы можете
использовать его для создания CSR без кодовой фразы.
Для создания CSR выполните следующую команду в терминале:
openssl req -new -key server.key -out server.csr
У вас будет запрошена парольная фраза (при использовании ключа с
паролем - прим. пер.). Если пароль введён правильно, у вас запросят
название компании, имя сайта, адрес электронной почты и пр. Как только
вы введёте все эти подробности, будет создан запрос CSR и сохранен в
файл server.csr.
Теперь вы можете отправить этот CSR-файл в CA для обработки. CA,
используя этот CSR-файл, выпустит сертификат. С другой стороны, вы
196
Защита
можете создать самоподписанный сертификат сами, используя тот же CSR-
файл.
5.3. Создание сертификата со своей подписью
Для того, чтобы создать самоподписанный сертификат, исполните
следующую команду в терминале:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Вышеприведённая команда предложит ввести парольную фразу. При вводе
правильной парольной фразы ваш сертификат будет создан и сохранён в
файле server.crt.
Если ваш защищённый сервер будет использоваться в
производственной среде, вам, скорее всего, необходим сертификат,
подписанный CA. В данном случае не рекомендуется использовать
самоподписанный сертификат.
5.4. Установка сертификата
Вы можете установить ключевой файл server.key и файл сертификата
server.crt, или файл сертификата, выданный вам CA, запустив следующую
команду в строке терминала:
sudo cp server.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private
Теперь просто сконфигурируйте любые приложения, имеющие поддержку
криптографии с открытым ключом, для использования файлов сертификата
и ключа. Например, Apache может использовать HTTPS, Dovecot - IMAPS и
POP3S и т.д.
5.5. Центр Сертификации
Если для ваших сетевых сервисов требуется много самоподписанных
сертификатов, стоит затратить дополнительные усилия и установить свой
собственный центр сертификации (CA). Использование сертификатов,
подписанных вашим собственным CA, позволяет различным использующим
сертификаты сервисам проще доверять другим сервисам, использующим
сертификаты от этого же CA.
1. Сначала создайте каталоги для хранения сертификата CA и связанных с
ним файлов:
197
Защита
sudo mkdir /etc/ssl/CA
sudo mkdir /etc/ssl/newcerts
2.
Для работы CA требует несколько дополнительных файлов: один
содержит запись о последнем серийном номере, выданном CA (каждый
сертификат должен иметь уникальный серийный номер), другой файл
предназначен для записи, какие сертификаты были выданы:
sudo sh -c "echo '01' > /etc/ssl/CA/serial"
sudo touch /etc/ssl/CA/index.txt
3.
Третьим файлом является файл конфигурации CA. Хотя он не
обязателен, тем не менее, он обеспечивает удобство при выдаче
нескольких сертификатов. Отредактируйте /etc/ssl/openssl.cnf и в
[ CA_default ] измените:
dir = /etc/ssl/ # Где все сохраняется
database = $dir/CA/index.txt # база данных файла index.
certificate = $dir/certs/cacert.pem # CA сертификат
serial = $dir/CA/serial # Верный серийный номер
private_key = $dir/private/cakey.pem# Частный ключ
4.
Затем создайте самоподписанный корневой сертификат:
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
Затем вас попросят ввести описание сертификата.
5.
Теперь установите корневой сертификат и ключ:
sudo mv cakey.pem /etc/ssl/private/
sudo mv cacert.pem /etc/ssl/certs/
6.
Теперь вы готовы к подписыванию сертификатов. Первое, что вам
необходимо, это запрос на подпись сертификата (CSR), подробнее
смотрите Раздел 5.2, «Генерация запроса на подпись сертификата
(Certificate Signing Request, или CSR)» [195]. Как только у вас будет
CSR, можно перейти к получению сертификата, подписанного центром
сертификации:
sudo openssl ca -in server.csr -config /etc/ssl/openssl.cnf
После ввода пароля для ключа центра сертификации, вас попросят
дважды подписать сертификат, для его подтверждения. Затем вы
увидите большое количество генерируемых данных процесса создания
сертификата.
7.
Теперь у вас должен появиться новый файл /etc/ssl/newcerts/01.pem,
с таким же содержанием, что и в предыдущем выводе. Выделите и
198
Защита
скопируйте всё, начиная со строки -----BEGIN CERTIFICATE----- и до строки
----END CERTIFICATE----- в файл с названием, соответствующим сетевому
имени сервера, где он будет установлен. Например, mail.example.com.crt
- вполне хорошее описательное имя.
Последующие сертификаты будут называться 02.pem, 03.pem, и т.д.
Замените mail.example.com.crt своим описательным именем.
8. Наконец, скопируйте новый сертификат на компьютер, для которого
он выпущен, и настройте соответствующие приложения на его
использование. Место по умолчанию для установки сертификатов -
каталог /etc/ssl/certs. Это позволяет нескольким сервисам использовать
один и тот же сертификат без чрезмерного усложнения прав доступа к
файлу.
Для приложений, требующих использования сертификата CA, вы
должны скопировать файл /etc/ssl/certs/cacert.pem в каталог /etc/ssl/
certs/ на каждом сервере.
5.6. Ссылки
• Для получения более подробных инструкций по использованию
криптографии смотрите SSL Certificates HOWTO12 на tlpd.org
• На странице Википедии HTTPS13 вы найдете больше информации о
протоколе HTTPS
• Для дополнительной информации об OpenSSL смотрите домашнюю
страницу OpenSSL14.
• Также хорошим подробным руководством является Network Security with
OpenSSL15 издательства O'Reilly.
12
13
14
15
199
Защита
6. eCryptfs
eCryptfs - это POSIX-совместимая многоуровневая криптографическая
файловая система промышленного уровня для Linux. Располагаясь поверх
уровня файловой системы, eCryptfs защищает файлы безотносительно к
нижележащим файловым системам, типам разделов и пр.
Во время установки предлагается возможность шифрования раздела /
home. Это позволит автоматически настроить всё, что необходимо для
шифрования, и смонтировать раздел.
В качестве примера в этом разделе приводится шифрование /srv с
помощью eCryptfs.
6.1. Использование eCryptfs
Сначала установите необходимые пакеты. Введите в командной строке:
sudo apt-get install ecryptfs-utils
Теперь смонтируйте раздел для шифрования:
sudo mount -t ecryptfs /srv /srv
Вам будет задано несколько вопросов о том, как ecryptfs должен
зашифровать данные.
Чтобы убедиться, что файлы, находящиеся в /srv, действительно являются
зашифрованной копией каталога /etc/default в /srv:
sudo cp -r /etc/default /srv
Теперь отмонтируйте /srv и попробуйте просмотреть файл:
sudo umount /srv
cat /srv/default/cron
Перемонтирование /srv с помощью ecryptfs сделает данные снова
доступными.
6.2. Автоматическое монтирование зашифрованных
разделов
Существует пара способов автоматически монтировать файловую систему,
зашифрованную ecryptfs, на этапе загрузки. В этом примере используется
200
Защита
файл /root/.ecryptfsrc, содержащий опции монтирования, совместно с
файлом парольной фразы, расположенным на USB ключе.
Сначала создайте файл /root/.ecryptfsrc, содержащий:
key=passphrase:passphrase_passwd_file=/mnt/usb/passwd_file.txt
ecryptfs_sig=5826dd62cf81c615
ecryptfs_cipher=aes
ecryptfs_key_bytes=16
ecryptfs_passthrough=n
ecryptfs_enable_filename_crypto=n
Измените параметр ecryptfs_sig на сигнатуру из файла /
root/.ecryptfs/sig-cache.txt.
Далее создадим файл парольной фразы /mnt/usb/passwd_file.txt:
passphrase_passwd=[secrets]
Теперь добавьте необходимые строки в /etc/fstab:
/dev/sdb1
/mnt/usb
ext3
ro
0 0
/srv /srv ecryptfs defaults 0 0
Удостоверьтесь, что USB-носитель смонтирован перед шифруемым
разделом.
Наконец, перегрузитесь и /srv будет смонтирован с использованием
eCryptfs.
6.3. Другие утилиты
Пакет ecryptfs-utils содержит несколько других полезных утилит:
ecryptfs-setup-private: создаёт каталог ~/Private, информация в котором
хранится в зашифрованном виде. Эту утилиту могут запустить
пользователи без административных полномочий, чтобы защитить
личные данные от других пользователей системы.
ecryptfs-mount-private и ecryptfs-umount-private: соответственно
смонтирует и отмонтирует пользовательский каталог ~/Private.
ecryptfs-add-passphrase: ecryptfs-add-passphrase: добавляет новую
парольную фразу в хранилище ключей ядра.
ecryptfs-manager: управляет объектами eCryptfs, например ключами.
ecryptfs-stat: позволит вам увидеть метаинформацию ecryptfs для файла.
201
Защита
6.4. Ссылки
• Дополнительная информация о eCryptfs доступна на странице проекта на
Launchpad16.
• Существует также статья в Linux Journal17, посвящённая eCryptfs.
• Также для дополнительных опций ecryptfs смотрите страницу
руководства man ecryptfs. 18.
eCryptfs Ubuntu Wiki19 также содержит дополнительную информацию.
16
17
18
19
202
Глава 10. Мониторинг
203
Мониторинг
1. Обзор
Мониторинг основных серверов и служб является важной составляющей
системы администрирования. Большинство сетевых служб контролируются
для наблюдения за их производительностью, доступностью или и тем и
другим. В этом разделе описаны установка и настройка систем Nagios для
мониторинга и Munin для слежения за производительностью.
Для примера, в этом разделе использованы два сервера с именами
server01 и server02. Server01 настроен на работу с системой Nagios для
мониторинга сервисов и служб самого себя и server02. На server01 также
будет установлен пакет munin для сбора информации по сети. Используя
пакет munin-node, server02 будет отправлять информацию на server01.
Надеемся, что эти простые примеры позволят вам контролировать
дополнительные сервера и службы в вашей сети.
204
Мониторинг
2. Nagios
2.1. Установка
Для начала на server01 необходимо установить пакет nagios. Для этого
введите в терминале:
sudo apt-get install nagios3 nagios-nrpe-plugin
Вам будет предложено ввести пароль для пользователя nagiosadmin.
Учётные записи пользователя находятся в /etc/nagios3/htpasswd.users.
Для смены пароля пользователя nagiosadmin или добавления других
пользователей для выполнения CGI скриптов Nagios используйте утилиту
htpasswd, которая является частью пакета apache2-utils. apache2-utils.
Например, для смены пароля пользователя nagiosadmin введите в
терминале:
sudo htpasswd /etc/nagios3/htpasswd.users nagiosadmin
Для добавления пользователя:
sudo htpasswd /etc/nagios3/htpasswd.users steve
Далее, на server02 установите пакет nagios-nrpe-server. В терминале на
server02 введите:
sudo apt-get install nagios-nrpe-server
NRPE позволяет выполнять локальные проверки на удалённом
компьютере. Но существуют и другие способы достижения этой
цели, используя другие плагины Nagios, также как и другие способы
проверок.
2.2. Обзор конфигурации
Существует несколько каталогов, содержащих конфигурационные файлы
Nagios а также файлы проверок.
/etc/nagios3: содержит конфигурационные файлы для работы демона
nagios, CGI-файлов, хостов и др.
/etc/nagios-plugins: файлы конфигурации для служебных проверок.
/etc/nagios: содержит конфигурационные файлы на удаленном
компьютере nagios-nrpe-server.
205
Мониторинг
/usr/lib/nagios/plugins/: тут находятся бинарные проверки. Для просмотра
опций проверки используйте ключ-h.
Например: /usr/lib/nagios/plugins/check_dhcp -h
Существует множество проверок Nagios, которые могут быть настроены
для выполнения на любом компьютере. В этом примере NagiosNagios
будет настроен на проверку дискового пространства, службы DNS, а
также группы пользователей MySQL. Проверка DNS будет осуществятся на
server02, а группа компьютеров MySQL будет включать в себя как server01,
так и server02.
Смотрите раздел Раздел 1, «HTTPD - веб сервер Apache2» [213] для
более детальных настроек Apache, Глава 8, Служба доменных имён
(DNS) [158] для настройки DNS, а также Раздел 1, «MySQL» [237]
для настройки MySQL.
В дополнение к этому будут приведены несколько терминов, которые
помогут вам облегчить настройку Nagios:
Host: сервер, рабочая станция, сетевое устройство и т.д., которое
отслеживается.
Host Group: группа подобных компьютеров. Например вы можете
сгруппировать все веб-серверы, файловые серверы и т.д.
Service: служба, которая отслеживается на компьютере. Например HTTP,
DNS, NFS и т.д.
Группа служб: позволяет объединить несколько служб вместе. Например
это будет полезным для объединения нескольких веб-серверов.
Контакт: человек, который будет уведомлён при каком-либо событии.
Nagios может быть настроен на отправку email, SMS-сообщений и т.д.
По умолчанию Nagios настроен на проверку HTTP, дискового пространства,
SSH, текущих пользователей, процессов и слежение за уровнем загрузки на
локальном компьютере (localhost). Nagios также выполняет проверку шлюза
посредством команды ping.
Настроить Nagios на множестве компьютеров может быть довольно сложно.
Начать лучше с нескольких компьютеров, одного или двух, настроить
всё оптимальным образом, а затем расширить настройку для большего
количества компьютеров.
2.3. Конфигурация
• 1. Для начала необходимо создать конфигурационный файл для
server02. Если не указанно иное, выполните все эти команды на
server01. Введите в терминале:
206
Мониторинг
sudo cp /etc/nagios3/conf.d/localhost_nagios2.cfg \ /etc/nagios3/conf.d/server02.cfg
В вышеуказанном, а также следующем примере замените
"server01", "server02", 172.18.100.100 и 172.18.100.101 на имя и
IP-адреса ваших серверов.
2.
Далее отредактируйте файл /etc/nagios3/conf.d/server02.cfg:
define host{
use
generic-host
; Name of host template to use
host_name
server02
alias
Server 02
address
172.18.100.101
}
# check DNS service.
define service {
use
generic-service
host_name
server02
service_description
DNS
check_command
check_dns!172.18.100.101
}
3.
Перезагрузите демон nagios для активации новых настроек:
sudo /etc/init.d/nagios3 restart
• 1.
Теперь добавим служебное описание для проверки MySQL путём
добавления следующих строк в /etc/nagios3/conf.d/services_nagios2.cfg:
# check MySQL servers.
define service {
hostgroup_name
mysql-servers
service_description
MySQL
check_command
check_mysql_cmdlinecred!nagios!secret!$HOSTADDRESS
use
generic-service
notification_interval 0 ; set > 0 if you want to be renotified
}
2.
Сейчас должны быть определена группа mysql-servers.
Отредактируйте /etc/nagios3/conf.d/hostgroups_nagios2.cfg, добавив
следующее:
# MySQL hostgroup.
define hostgroup {
hostgroup_name mysql-servers
alias
MySQL servers
members
localhost, server02
}
207
Мониторинг
3.
Проверка Nagios должна пройти аутентификацию в MySQL. Для
добавления пользователя nagios в MySQL введите:
mysql -u root -p -e "create user nagios identified by 'secret';"
Пользователь nagios должен присутствовать на всех
компьютерах рабочей группы серверов mysql-servers.
4.
Перезагрузите nagios для проверки сервера MySQL.
sudo /etc/init.d/nagios3 restart
• 1.
Наконец, необходимо настроить NRPE для проверки дискового
пространства на server02.
На server01 добавим служебную проверку в /etc/nagios3/conf.d/
server02.cfg:
# NRPE disk check.
define service {
use
generic-service
host_name
server02
service_description
nrpe-disk
check_command
check_nrpe_1arg!check_all_disks!172.18.100.101
}
2.
Теперь на server02 отредактируем /etc/nagios/nrpe.cfg:
allowed_hosts=172.18.100.100
А в строку объявления команды добавим:
command[check_all_disks]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -e
3.
В конце перезагрузим nagios-nrpe-server:
sudo /etc/init.d/nagios-nrpe-server restart
4.
На server01 также необходимо перезагрузить nagios:
sudo /etc/init.d/nagios3 restart
Теперь вы должны видеть ваши серверы и служебные проверки в файлах
Nagios CGI. Для доступа к ним наберите в строке браузера http://server01/
nagios3. Вам будет предложено ввести имя пользователя и пароль для
nagiosadmin.
208
Мониторинг
2.4. Ссылки
В этом разделе были описаны лишь незначительные возможности Nagios.
nagios-plugins-extra и nagios-snmp-plugins содержат намного больше файлов
проверки служб.
• Для более детальной информации обратитесь к документации на
официальном сайте Nagios1.
• А особенно на сайте онлайн-документации2.
• Существует несколько книг3 посвященных Nagios и мониторингу сети.
• Страница Nagios Ubuntu Wiki4 также содержит достаточно документации.
209
Мониторинг
3. Munin
3.1. Установка
Перед установкой Munin на server01 необходимо установить веб-сервер
apache2. Стандартной конфигурации будет достаточно для запуска
сервера munin. Для более детальной информации по настройке apache2,
обратитесь к разделу Раздел 1, «HTTPD - веб сервер Apache2» [213].
Для начала на server01 установим munin. Введите в терминале:
sudo apt-get install munin
Теперь на server02 установим пакет munin-node:
sudo apt-get install munin-node
3.2. Конфигурация
На server01 отредактируйте файл /etc/munin/munin.conf добавив IP-адрес
server02:
## First our "normal" host.
[server02]
address 172.18.100.101
Замените server02 и 172.18.100.101 на имя компьютера и IP-адрес
вашего сервера.
Далее настроим пакет munin-node на server02. Отредактируйте файл /etc/
munin/munin-node.conf для доступа server01:
allow ^172\.18\.100\.100$
Замените ^172\.18\.100\.100$ на IP-адрес вашего сервера munin.
Теперь перезагрузите munin-node на server02 для принятия изменений:
sudo /etc/init.d/munin-node restart
Наконец, в строке браузера введите http://server01/munin , и вы увидите
ссылки, которые отображают информацию из стандартных плагинов munin-
plugins для дисков, сети, процессов и системы.
210
Мониторинг
Поскольку это новая установка, может пройти некоторое время
перед отображением какой-либо полезной информации.
3.3. Дополнительные плагины
Пакет munin-plugins-extra содержит дополнительные проверки
производительности служб, таких как DNS, DHCP, Samba и т.д. Для
установки пакета введите в терминале:
sudo apt-get install munin-plugins-extra
Убедитесь в том, что вы установили пакет как на сервер, так и на
связывающие компьютеры.
3.4. Ссылки
• Посетите официальный сайт Munin5 для более детальной информации.
• Узконаправленная документация Munin6 содержит информацию о
дополнительных плагинах, написании плагинов и т.д.
• Также можно прочесть книгу на немецком языке издательства «Open
Source Press»: Munin Graphisches Netzwerk- und System-Monitoring7.
• Другой ресурс Munin Ubuntu Wiki8.
211
Глава 11. Веб-серверы
Веб-сервер - это программное обеспечение, ответственное за приём HTTP-
запросов от клиентов, известных как веб-браузеры, и отправки им HTTP-
ответов вместе с опциональными данными, которые обычно являются
веб-страницами, такими как документы HTML и присоединённые объекты
(изображения и т.д.).
212
Веб-серверы
1. HTTPD - веб сервер Apache2
Apache является наиболее часто используемым веб-сервером на
системах Linux. Веб-серверы используются для обслуживания веб-
страниц, запрашиваемых клиентскими компьютерами. Клиенты обычно
запрашивают веб-страницы с помощью приложений для просмотра
Интернета, таких как Firefox, Opera, Chromium или Mozilla.
Пользователи вводят Uniform Resource Locator (URL), чтобы указать на
веб-сервер посредством Fully Qualified Domain Name (FQDN) и пути к
необходимому ресурсу. Например, чтобы просмотреть домашнюю страницу
веб-сайта Ubuntu1, пользователь будет вводить только FQDN:
Чтобы посмотреть подстраницу community2, пользователь вводит FQDN,
сопровождаемый путём:
Самый часто используемый протокол для передачи веб-страниц - это HTTP
(Hyper Text Transfer Protocol). Также поддерживаются такие протоколы, как
HTTP over Secure Sockets Layer (HTTPS) и Transfer Protocol (FTP), протокол для
передачи файлов.
Веб-сервер Apache часто используется в связке с движком баз данных
MySQL, скриптовым языком PHP и другими популярными скриптовыми
языками - Python и Perl. Данная конфигурация обозначена аббревиатурой
LAMP (Linux, Apache, MySQL, Perl/Python/PHP) и формирует собой мощный
набор инструментов для разработки и использования веб-приложений.
1.1. Установка
Веб-сервер Apache2 доступен в Ubuntu Linux. Чтобы установить Apache2:
• В терминале введите следующую команду:
sudo apt-get install apache2
213
Веб-серверы
1.2. Конфигурация
Apache2 настраивается путём редактирования или добавления директив
в обычных текстовых конфигурационных файлах. Эти директивы
размещаются в следующих файлах и каталогах:
apache2.conf: главный конфигурационный файл Apache2. Содержит
параметры, которые являются глобальными для Apache2.
conf.d: содержит конфигурационные файлы, которые применяются к
Apache2 глобально. Другие пакеты, использующие Apache2 для хранения
содержимого, могут добавлять файлы или символические ссылки на этот
каталог.
envvars: файл, где устанавливается переменные окружения Apache2.
httpd.conf: исторически главный конфигурационный файл Apache2,
названный в честь службы httpd. Теперь файл, как правило, пуст,
так как большинство параметров конфигурации было перемещено в
перечисленные ниже каталоги. Этот файл может быть использован для
пользовательских глобальных параметров конфигурации Apache2.
mods-available: этот каталог содержит файлы конфигурации для загрузки
модулей и их настройки. Однако, не все модули будут иметь конкретные
конфигурационные файлы.
mods-enabled: содержит символические ссылки на файлы в /etc/apache2/
mods-available. Если на конфигурационный файл модуля поставить
символическую ссылку, модуль будет загружен при следующем
перезапуске apache2.
ports.conf: содержит директивы, определяющие, на каких TCP портах
Apache2 принимает соединения.
sites-available: эта папка содержит конфигурационные файлы
виртуальных хостов (Virtual Hosts) Apache2. Виртуальные хосты позволяют
сконфигурировать Apache2 так, чтобы каждый сайт имел отдельную
конфигурацию.
sites-enabled: подобна mods-enabled, sites-enabled содержит символьные
ссылки на каталог /etc/apache2/sites-available. Соответственно, когда на
конфигурационный файл в sites-available будет сделана ссылка, то она
вступит в действие, как только Apache2 будет перезапущен.
В дополнение, другие конфигурационные файлы могут быть
добавлены, используя директиву Include. Для включения нескольких
конфигурационных файлов могут использоваться метасимволы. Любая
директива может быть помещена в любой из этих конфигурационных
файлов. Изменения в основных конфигурационных файлах распознаются
Apache2 в процессе запуска или перезапуска.
214
Веб-серверы
Сервер также читает файл, содержащий mime-типы документов; имя
файла задается директивой TypesConfig, как правило, через /etc/apache2/
mods-available/mime.conf, которая может также включать дополнения и
коррекции, и /etc/mime.types по умолчанию.
1.2.1. Основные настройки
В этом разделе описаны основные параметры конфигурации сервера
Apache2. Обратитесь к Документации Apache23 для более подробной
информации.
• По умолчанию Apache 2 имеет конфигурацию, совместимую с
виртуальными хостами. В его настройках указан единственный
виртуальный хост (через директиву VirtualHost), который может быть
оставлен как есть, если у вас всего один сайт, либо использован как
шаблон для других виртуальных хостов, если сайтов у вас несколько.
Если оставить его настройку, как есть, виртуальный хост по умолчанию
будет обслуживать ваш основной сайт, или сайт, который увидят
пользователи, если URL, по которому они попали на ваш сервер, не
обрабатывается ни одним из остальных виртуальных хостов (т.е. если
имя хоста не найдено ни в одной директиве ServerName). Чтобы изменить
виртуальный хост по умолчанию, отредактируйте файл /etc/apache2/sites-
available/default.
Директивы, установленные для виртуального хоста, применяются
только для того виртуального хоста, для которого они
установлены. Если директива установлена в основной
конфигурации сервера и не установлена для конкретного
виртуального хоста, то будет использовано значение по
умолчанию. Например, вы можете указать адрес электронной
почты вебмастера в основном конфигурационном файле сервера и
не указывать его для каждого виртуального хоста.
Если вы хотите настроить новый виртуальный хост или сайт, скопируйте
этот файл в ту же папку, дав ему выбранное вами имя. Например:
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mynewsite
Отредактируйте новый файл, чтобы настроить новый сайт, используя
некоторые директивы, описанные ниже.
• Директива ServerAdmin определяет почтовый адрес администратора
сервера, который будет отображаться пользователям. Значение по
умолчанию - webmaster@localhost. Данная переменная должна быть
215
Веб-серверы
изменена на доступный для вас почтовый адрес (если вы являетесь
администратором сервера). Если на вашем сайте возникнут проблемы,
Apache2 отобразит ошибку, в которой также будет отображен указанный
почтовый адрес с целью сообщения проблемы. Вы можете найти эту
директиву в вашем файле конфигурации сайтов, в каталоге /etc/apache2/
sites-available.
• Директива Listen определяет порт и, при указании, IP-адрес, на котором
должен работать Apache2. Если IP-адрес не указан, Apache2 работает на
всех IP-адресах, которые доступны компьютеру, на котором он запущен.
Значение директивы по умолчанию - порт 80. Вы можете изменить
значение на 127.0.0.1:80, чтобы Apache2 работал только на локальном
интерфейсе и не был доступен извне. Также можно указать, например,
значение 81 для изменения порта сервера или оставить всё как есть для
работы по умолчанию. Данная директива может быть найдена и изменена
в её собственном файле /etc/apache2/ports.conf
• Директива ServerName является необязательной и определяет, на
какие FQDN должен отвечать ваш сайт. По умолчанию виртуальный
хост не имеет установленной директивы ServerName, поэтому он
будет отвечать на все запросы, которые не совпадают с директивой
ServerName на другом виртуальном хосте. Если вы только что приобрели
доменное имя ubunturocks.com и хотите разместить его на своём Ubuntu-
сервере, то значение директивы ServerName в конфигурационном файле
вашего виртуального хоста должно быть ubunturocks.com. Добавьте
эту директиву к новому файлу виртуального хоста, который вы создали
ранее (/etc/apache2/sites-available/mynewsite).
Возможно вы захотите, чтобы ваш сайт отвечал на www.ubunturocks.com,
поскольку многие пользователи сочтут подходящим использовать
префикс www. Для этого используйте директиву ServerAlias. В директиве
ServerAlias вы также можете использовать метасимволы.
Например, следующая конфигурация заставит ваш сайт отвечать на
любой запрос домена, оканчивающийся на .ubunturocks.com.
ServerAlias *.ubunturocks.com
• Директива DocumentRoot указывает, где Apache2 должен искать файлы,
составляющие сайт. Значением по умолчанию является /var/www, как
указано в /etc/apache2/sites-available/default. Если необходимо, измените
это значение в файле виртуального хоста вашего сайта, и не забудьте
при необходимости создать соответствующий каталог!
216
Веб-серверы
Активируйте новый VirtualHost, используя утилиту a2ensite, и
перезапустите Apache2:
sudo a2ensite mynewsite
sudo service apache2 restart
Не забудьте заменить mynewsite более подходящим именем для
VirtualHost. Один из способов - это назвать файл так же, как в
директиве ServerName для VirtualHost.
Аналогично, используйте утилиту a2dissite для выключения сайтов. Это
может быть полезным для устранения неполадок в конфигурации для
нескольких виртуальных хостов.
sudo a2dissite mynewsite
sudo service apache2 restart
1.2.2. Настройки по умолчанию
Данный раздел описывает настройку параметров Apache2 по умолчанию.
Они необходимы, например, если вы добавляете виртуальный хост,
настраиваете нужные директивы, а некоторые не указываете. В этом
случае используются значения по умолчанию.
DirectoryIndex указывает на страницу (файл) по умолчанию, которую
выдаёт пользователю сервер при запросе индекса каталога, указывая
слеш (/) в конце имени каталога.
Например, когда пользователь запрашивает страницу http://
www.example.com/this_directory/, он получит либо страницу DirectoryIndex,
если она существует, либо сгенерированный сервером список каталогов,
если она не существует и задана опция indexes, либо страницу отказа в
доступе (Permission Denied). Сервер попытается найти один из файлов,
перечисленных в директиве DirectoryIndex и вернёт первый найденный.
Если он не найдёт ни один из этих файлов и, если задана опция Options
Indexes для этого каталога, сервер сгенерирует и вернёт в формате
HTML список подкаталогов и файлов в каталоге. Значения по умолчанию
из /etc/apache2/mods-available/dir.conf - это "index.html index.cgi index.pl
index.php index.xhtml index.htm". Таким образом, если Apache2 находит в
запрашиваемом каталоге файл, соответствующий любому из этих имён,
он возвращает первый найденный файл.
• Директива ErrorDocument позволяет указать Apache2 файл для вывода
определённых ошибок. Например, если пользователь запрашивает
несуществующий ресурс, возникнет ошибка 404. По умолчанию Apache2
217
Веб-серверы
просто вернёт код HTTP 404. Обратитесь к /etc/apache2/conf.d/localized-
error-pages за подробными инструкциями по использованию ErrorDocument,
включая файлы примеров.
• По умолчанию сервер записывает журнал передачи данных в файл
/var/log/apache2/access.log. Вы можете изменить это в вашем файле
конфигурации виртуальных хостов с помощью директивы CustomLog
для каждого хоста, или пропустить его, чтобы принять значение по
умолчанию, указанное в /etc/apache2/conf.d/other-vhosts-access-log. Вы
также можете указать файл, в котором регистрируются ошибки, через
директиву ErrorLog, которая по умолчанию указывает на /var/log/apache2/
error.log. Они хранятся отдельно от журналов передачи данных, чтобы
помочь в решении проблем с вашим сервером Apache2. Вы также можете
задать уровень журналирования в LogLevel (по умолчанию "warn") и
формат журнала в LogFormat (Смотрите /etc/apache2/apache2.conf для
значений по умолчанию).
• Некоторые опции указываются для каталога, а не для сервера. Одна из
таких директив - Options. Группа строк Directory заключена в теги XML
следующим образом:
<Directory /var/www/mynewsite>
</Directory>
Директива Options внутри группы строк Directory может принимать одно
или несколько из следующих значений (помимо прочих), разделяемых
пробелом:
ExecCGI - разрешает запуск CGI-скриптов. CGI-скрипты не будут
запускаться, если эта опция не установлена.
Includes - разрешает расширения на стороне сервера. Расширения
на стороне сервера позволяют HTML-файлу включать в себя другие
файлы. Смотрите документацию Apache SSI (сообщества Ubuntu)4 для
получения дополнительной информации.
IncludesNOEXEC - разрешает использовать расширения на стороне
сервера, но отключает команды #exec и #include в CGI скриптах.
Indexes - отображать форматированный список содержимого
каталога, если в опрашиваемом каталоге нет файла из Индекса
каталога (такого как index.html).
Из соображений безопасности обычно эта опция не
устанавливается и, естественно, не должна устанавливаться
для каталога DocumentRoot. Включайте эту опцию только для
218
Веб-серверы
отдельных каталогов и только в том случае, если уверены,
что хотите, чтобы пользователи могли просматривать всё
содержимое каталога.
Multiview - поддержка множества видов страницы в зависимости
от содержимого; по соображениям безопасности этот параметр по
умолчанию выключен. Смотрите Документацию Apache2 по этому
параметру5.
SymLinksIfOwnerMatch - переходить по символическим ссылкам
только в случае, если у файла/каталога и ссылки один и тот же
владелец.
1.2.3. Настройки httpd
Этот раздел объясняет некоторые основные настройки демона httpd
LockFile - директива LockFile устанавливает путь к lock-файлу
сервера, который используется, если сервер собран с параметрами
USE_FCNTL_SERIALIZED_ACCEPT или USE_FLOCK_SERIALIZED_ACCEPT. Он
должен располагаться на локальном диске. Значение директивы должно
быть оставлено по умолчанию за исключением случая, когда каталог
журналов находится в разделе NFS. Доступ к файлу должен быть только у
суперпользователя (root).
PidFile - директива PidFile устанавливает имя файла, в который сервер
записывает свой номер поцесса (process ID - pid). Файл должен читаться
только суперпользователем (root). В большинстве случаев следует оставить
значение по умолчанию.
User - директива User устанавливает идентификатор пользователя
(userid), используемый сервером для ответа на запросы. Эта настройка
определяет доступ к серверу. Любые файлы, недоступные для этого
пользователя, будут также недоступны посетителям вашего сайта.
Значение по умолчанию для User: "www-data".
Без полного понимания того, что вы делаете, не устанавливайте
директиву User в значение root. Использование суперпользователя
(root) как пользователя веб-сервера создаст очень серьёзные дыры в
безопасности вашего сервера.
Group - директива Group подобна директиве User. Group устанавливает
группу, под которой сервер будет отвечать на запросы. По умолчанию
Group: "www-data".
219
Веб-серверы
1.2.4. Модули Apache2
Apache2 - модульный сервер. Это значит, что в ядро сервера включены
только базовые функции. Расширенные возможности доступны в виде
модулей, которые могут быть загружены в Apache2. По умолчанию, базовый
набор модулей включается в сервер во время компиляции. Если сервер
скомпилирован с возможностью использования динамически загруженных
модулей, модули могут быть скомпилированы отдельно и добавлены в
любое время с помощью директивы LoadModule. Иначе, Apache2 должен
быть перекомпилирован для добавления и/или удаления модулей.
Ubuntu компилирует Apache2 с возможностью динамической загрузки
модулей. Конфигурационные директивы могут быть включены для
присутствия конкретного модуля при условии заключения их в блок
<IfModule>.
Вы можете установить дополнительные модули для Apache2 и
использовать их на вашем веб-сервере. Например, запустите следующую
команду из командной строки терминала, чтобы установить модуль MySQL
Authentication:
sudo apt-get install libapache2-mod-auth-mysql
Для дополнительных модулей смотрите каталог /etc/apache2/mods-available.
Чтобы включить модуль, используйте утилиту a2enmod:
sudo a2enmod auth_mysql
sudo service apache2 restart
Аналогично, a2dismod отключит модуль:
sudo a2dismod auth_mysql
sudo service apache2 restart
1.3. Настройка HTTPS
Модуль mod_ssl добавляет серверу Apache2 важную особенность -
возможность защищённых коммуникаций. Соответственно, когда ваш
браузер соединяется с использованием SSL, в адресной строке браузера
перед URL используется префикс https://.
Модуль mod_ssl доступен в составе пакета apache2-common. Выполните
нижеследующую команду в терминале для включения модуля mod_ssl:
220
Веб-серверы
sudo a2enmod ssl
Пример настройки HTTPS содержится в файле /etc/apache2/sites-available/
default-ssl. Для работы Apache2 с HTTPS также необходимы файлы
сертификата и ключа. Базовая конфигурация HTTPS использует ключ
и сертификат, генерируемые пакетом ssl-cert. Они подходят для
тестирования, но позже должны быть заменены на уникальные для
данного сайта или сервера. Прочесть о генерировании ключа и получении
сертификата можно здесь Раздел 5, «Сертификаты» [194].
Чтобы настроить Apache2 для HTTPS, введите следующее:
sudo a2ensite default-ssl
Каталоги /etc/ssl/certs и /etc/ssl/private - это места по умолчанию.
Если вы установили сертификат и ключ в другие каталоги,
убедитесь, что SSLCertificateFile и SSLCertificateKeyFile тоже
изменены.
Теперь Apache2 сконфигурирован для HTTPS, перезапустите службу, чтобы
активировать новые настройки:
sudo service apache2 restart
В зависимости от того, как вы получили сертификат, может
потребоваться ввести пароль при запуске Apache2.
Вы можете получить доступ к страницам через безопасное соединение,
набрав в адресной строке браузера https://your_hostname/url/.
1.4. Права разделения записи
Чтобы несколько пользователей имели возможность выполнять запись в
один и тот же каталог, необходимо предоставить права записи группе, к
которой они оба относятся. В следующем примере предоставляются права
записи в /var/www группе "webmasters".
sudo chgrp -R webmasters /var/www
sudo find /var/www -type d -exec chmod g=rwxs "{}" \;
sudo find /var/www -type f -exec chmod g=rws "{}" \;
Если доступ к каталогу должен быть предоставлен более чем одной
группе, необходимо включить списки контроля доступа (ACL).
221
Веб-серверы
1.5. Ссылки
Apache2 Documentation6 содержит подробную информацию по
конфигурационным директивам Apache2. Смотрите также пакет apache2-
doc, содержащий официальную документацию Apache2.
• Смотрите сайт Mod SSL Documentation7 для дополнительной информации
по SSL.
• Книга Apache Cookbook8 издательства O'Reilly - хороший источник для
освоения специфических настроек Apache2.
• По поводу специфических для Ubuntu вопросов по Apache2 обращайтесь
на IRC канал #ubuntu-server в сети freenode.net9.
• Хороший ресурс по интеграции PHP и MySQL Apache MySQL PHP Ubuntu
Wiki 10.
10
222
Веб-серверы
2. PHP5 - язык сценариев
PHP - язык сценариев общего назначения, применяемый веб-
программистами. Сценари PHP могут встраиваться в HTML. В этом разделе
описывается, как установить и настроить PHP5 в системе Ubuntu с Apache2
и MySQL.
В этом разделе предполагается, что вы установили и настроили веб-сервер
Apache2 и сервер баз данных MySQL. Вы можете обратиться к разделам,
посвящённым Apache2 и MySQL в данном документе, чтобы установить и
настроить Apache2 и MySQL, соответственно.
2.1. Установка
PHP5 доступен в Ubuntu Linux. В отличие от python и perl, которые уже
установлены в системе, PHP должен быть добавлен.
• Чтобы установить PHP5, вам нужно ввести следущую команду в
терминале:
sudo apt-get install php5 libapache2-mod-php5
Вы можете запускать сценарии PHP5 из командной строки. Чтобы
сделать это, вам следует установить пакет php5-cli. Для установки
этого пакета введите в терминале:
sudo apt-get install php5-cli
Вы также можете запускать сценарии PHP5 без установленного модуля
PHP5 Apache. Чтобы добиться этого, вам следует установить пакет
php5-cgi. Для этого наберите в терминале:
sudo apt-get install php5-cgi
Для того, чтобы иметь возможность использовать MySQL с PHP5, вам
необходимо установить пакет php5-mysql. Для установки php5-mysql вы
можете воспользоваться следующей командой в окне терминала:
sudo apt-get install php5-mysql
Аналогично, для использования PostgerSQL с PHP5, вам понадобится
установить пакет php5-pgsql. Для установки php5-pgsql введите в
строке терминала:
223
Веб-серверы
sudo apt-get install php5-pgsql
2.2. Конфигурация
Установив PHP5, вы можете выполнять сценарии PHP5 на сервере по
запросу вашего браузера. Если вы установили пакет php5-cli, то можете
выполнять сценарии PHP5 из командной строки.
По умолчанию, веб-сервер Apache 2 сконфигурирован для выполнения
сценариев PHP5. Другими словами, модуль PHP5 автоматически
включается, когда вы устанавливаете модуль. Проверьте, существуют ли
файлы /etc/apache2/mods-enabled/php5.conf и /etc/apache2/mods-enabled/php5.load.
Если эти файлы отсутствуют, вы можете включить модуль с помощью
команды a2ebmod.
После того, как вы установите соответствующие пакеты PHP5 и
активируете модули PHP5 в Apache2, необходимо будет перезапустить Web-
сервер Apache2, чтобы скрипты PHP5 исполнялись. Вы можете запустить
следующую команду в терминале для перезапуска веб-сервера:
sudo service apache2 restart
2.3. Тестирование
Для проверки успешности установки, вы можете выполнить следующий
PHP5 phpinfo скрипт:
<?php
phpinfo();
?>
Вы можете сохранить содержимое в файле phpinfo.php и поместить
его в каталог DocumentRoot веб-сервера Apache2. Указав в браузере
адрес http://hostname/phpinfo.php , вы увидите значения различных
конфигурационных параметров PHP5.
2.4. Ссылки
• Более полную информацию можно получить из документации на
php.net11.
• Существует множество книг по языку PHP. Можно порекомендовать две
хорошие книги O'Reilly Learning PHP 512 and the PHP Cook Book13.
11
12
13
224
Веб-серверы
• Кроме того, смотрите страницу Apache MySQL PHP Ubuntu Wiki14 для
дополнительной информации.
14
225
Веб-серверы
3. Прокси-сервер Squid
Squid - полноценный кэширующий прокси-сервер, предоставляющий
услуги прокси и кэширования для HTTP, FTP и других популярных
протоколов. Squid может обеспечить кэширование и посредничество SSL
запросов и кэширование DNS обзоров, а также выполнять прозрачное
кэширование. Squid поддерживает широкий спектр кэширующих
протоколов, такие как Internet Cache Protocol (ICP), Hyper Text Caching
Protocol (HTCP), Cache Array Routing Protocol (CARP) и Web Cache Coordination
Protocol (WCCP).
Прокси/кеш сервер Squid - великолепное решение для разных задач,
в которых требуется использование прокси или кэширования. Его
применение варьируется от малых офисов до серьёзных многоуровневых
сетей, которые предоставляют обширные системы управления доступом
и наблюдение за критическими параметрами через Simple Network
Management Protocol (SNMP). При выборе компьютера для выделенного
сервера под Squid убедитесь, что он оснащён большим количеством
оперативной памяти, так как Squid кэширует данные в оперативную память
для повышения производительности.
3.1. Установка
В строке терминала введите следующую команду для установки сервера
Squid:
sudo apt-get install squid
3.2. Конфигурация
Squid настраивается посредством редактирования значений директив в
файле /etc/squid/squid.conf . Следующие примеры показывают несколько
директив, которые могут быть изменены для влияния на поведение
сервера Squid. Для более детальной настройки Squid смотрите источники в
разделе Ссылки.
Перед редактированием конфигурационного файла сделайте копию
оригинала с целью востановления каких-либо значений, если это
потребуется или просто для справки.
Скопируйте файл /etc/squid/squid.conf и защитите копию от записи
следующей командой:
226
Веб-серверы
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original
sudo chmod a-w /etc/squid/squid.conf.original
• Для того, чтобы настроить порт, на котором будет работать сервер Squid,
на 8888 (по умолчанию 3128), вам нужно изменить значение директивы
http_port следующим образом:
http_port 8888
• Измените директиву visible_hostname для указания имени серверу
Squid. Не обязательно, чтобы имя сервера Squid совпадало с именем
компьютера. В данном примере оно установлено как weezie
visible_hostname weezie
• Используя контроль доступа Squid, можно разрешить использовать
интернет-сервисы через Squid только пользователям с определённых
IP-адресов. Для примера, мы покажем как предоставить доступ только
пользователям из подсети 192.168.42.0/24:
Добавьте следующее в конец секции ACL в вашем файле /etc/squid/
squid.conf:
acl fortytwo_network src 192.168.42.0/24
Потом добавьте следующее в начало секции http_access в вашем файле /
etc/squid/squid.conf:
http_access allow fortytwo_network
• Используя отличные возможности разграничения доступа в Squid, вы
можете разрешить доступ к ресурсам Интернет только в рабочие часы.
Напрмер, мы продемонстрируем доступ с 9:00 до 17:00, с понедельника
по пятницу, для подсети 10.1.42.0/24:
Добавьте следующее в конец секции ACL в вашем файле /etc/squid/
squid.conf:
acl biz_network src 10.1.42.0/24
acl biz_hours time M T W T F 9:00-17:00
Потом добавьте следующее в начало секции http_access в вашем файле /
etc/squid/squid.conf:
http_access allow biz_network biz_hours
227
Веб-серверы
После внесения изменений в файл /etc/squid/squid.conf, сохраните
его и, набрав в терминале следующую команду, перезапустите squid
сервер, чтобы изменения вступили в силу.
sudo /etc/init.d/squid restart
3.3. Ссылки
Веб-сайт Squid15
Страница Ubuntu Wiki Squid16.
15
16
228
Веб-серверы
4. Ruby on Rails
Ruby on Rails - это веб-инфраструктура с открытым исходным кодом для
разработки веб-приложений с базами данных. Она оптимизирована для
обеспечения стабильной продуктивности работы программиста, поскольку
она позволяет программисту писать код, предпочитая конвенцию
конфигурации.
4.1. Установка
Перед установкой Rails необходимо установить Apache и MySQL. Для
установки Apache, пожалуйста, обратитесь к Раздел 1, «HTTPD - веб
сервер Apache2» [213]. Для инструкций по установке MySQL, обратитесь к
Раздел 1, «MySQL» [237].
Установив Apache и MySQL, можно приступать к установке Ruby on Rails.
Для установки базовых пакетов Ruby и Ruby on Rails, вы можете выполнить
следующие команды в терминале:
sudo apt-get install rails
4.2. Конфигурация
Измените конфигурационный файл /etc/apache2/sites-available/default для
настройки ваших доменов.
Первое, что подлежит изменению - это директива DocumentRoot:
DocumentRoot /path/to/rails/application/public
Далее, измените директиву <Directory "/path/to/rails/application/public">:
<Directory "/path/to/rails/application/public">
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
allow from all
AddHandler cgi-script .cgi
</Directory>
Также следует разрешить Apache использовать модуль mod_rewrite. Для
этого выполните следующее в строке терминала:
sudo a2enmod rewrite
229
Веб-серверы
Наконец, вам понадобится установить права владения каталогами /path/
to/rails/application/public и /path/to/rails/application/tmp пользователю,
используемому для запуска процесса Apache:
sudo chown -R www-data:www-data /path/to/rails/application/public
sudo chown -R www-data:www-data /path/to/rails/application/tmp
Вот и всё! Теперь ваш сервер может работать с приложениями Ruby on
Rails.
4.3. Ссылки
• Для более детальной информации смотрите веб-сайт Ruby on Rails17.
• Также существует великолепный сайт Agile Development with Rails18.
• Дополнительная информация на странице Ruby on Rails Ubuntu Wiki19.
17
18
19
230
Веб-серверы
5. Apache Tomcat
Apache Tomcat - это веб-контейнер, позволяющий вам обслуживать веб-
приложения Java Servlets и JSP (Java Server Pages).
Пакеты Tomcat 6.0 в Ubuntu поддерживают два варианта запуска Tomcat.
Вы можете установить его как классический одиночный экземпляр
на всю систему, который будет запускаться при загрузке системы
от имени непривилегированного пользователя tomcat6. Но вы также
можете развернуть частные экземпляры, которые будут запускаться с
правами вашего собственного пользователя, и вам придется запускать
и останавливать их самостоятельно. Второй вариант особенно полезен в
контексте сервера разработки, где нескольким пользователям требуется
тестировать их собственные частные экземпляры Tomcat.
5.1. Общесистемная установка
Для установки сервера Tomcat можно ввести следующую команду в
приглашении терминала:
sudo apt-get install tomcat6
Это установит сервер Tomcat только со встроенным веб-приложением
ROOT, которое выводит простейшую страницу "It works".
5.2. Конфигурация
Конфигурационные файлы Tomcat находятся в /etc/tomcat6. Здесь будут
описаны только несколько общих настроек, для большего смотрите
документацию Tomcat 6.020
5.2.1. Изменение портов по умолчанию
По умолчанию Tomcat 6.0 запускает соединение HTTP на порту 8080 и
соединение AJP на порту 8009. Вы, возможно, захотите изменить эти порты
по умолчанию с тем, чтобы избежать конфликтов с другим сервером
в системе. Это делается изменением следующих строк в /etc/tomcat6/
server.xml:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
20
231
Веб-серверы
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
5.2.2. Изменение используемой JVM
По умолчанию Tomcat сначала работает с OpenJDK-6, затем пробует Sun's
JVM, а затем все остальные JVM. Если у Вас установлены разные JVM, Вы
можете указать, какую из них использовать, путем установки JAVA_HOME в /
etc/default/tomcat6:
JAVA_HOME=/usr/lib/jvm/java-6-sun
5.2.3. Объявление пользователей и ролей
Имена пользователей, пароли и роли (группы) могут быть централизованно
объявлены в контейнере Servlet. В Tomcat 6.0 это делается в файле /etc/
tomcat6/tomcat-users.xml:
<role rolename="admin"/>
<user username="tomcat" password="s3cret" roles="admin"/>
5.3. Использование стандартных веб-приложений Tomcat
Tomcat поставляется с веб-приложениями, которые вы можете установить
для документирования, администрирования или с демонстрационными
целями.
5.3.1. Документация по Tomcat
Пакет tomcat6-docs содержит документацию по Tomcat 6.0, собранную как
веб-приложение, доступ к которому по умолчанию вы можете получить на
http://yourserver:8080/docs. Вы можете установить его, введя следующую
команду в терминале:
sudo apt-get install tomcat6-docs
5.3.2. Веб-приложения для администрирования Tomcat
Пакет tomcat6-admin содержит два веб-приложения, которые могут
использоваться для администрирования сервера Tomcat с использованием
веб-интерфейса. Вы можете установить их, введя следующую команду в
терминале:
sudo apt-get install tomcat6-admin
232
Веб-серверы
Первое - это веб-приложение manager, которое по умолчанию доступно
на http://yourserver:8080/manager/html. Оно в основном используется для
получения статуса сервера и перезапуска web-приложений.
Доступ к приложению manager по умолчанию защищён: вы должны
определить пользователя с ролью "manager" в /etc/tomcat6/tomcat-
users.xml перед тем, как получите к нему доступ.
Второе - это веб-приложение host-manager, которое по умолчанию
доступно на http://yourserver:8080/host-manager/html. Оно может
использоваться для динамического создания виртуальных хостов.
Доступ к приложению host-manager также по умолчанию защищён:
вы должны определить пользователя с ролью "admin" в /etc/tomcat6/
tomcat-users.xml перед тем, как получите к нему доступ.
По причинам безопасности пользователь tomcat6 по умолчанию не
может выполнять запись в каталог /etc/tomcat6. Некоторые возможности
этих административных веб-приложений (разворачивание приложений,
создание виртуальных хостов) требуют права на запись в этот каталог.
Если вы хотите использовать эти возможности, выполните следующее для
того, чтобы дать пользователям группы tomcat6 необходимые права:
sudo chgrp -R tomcat6 /etc/tomcat6
sudo chmod -R g+w /etc/tomcat6
5.3.3. Примеры веб-приложений Tomcat
Пакет tomcat6-examples содержит два веб-приложения, которые могут
использоваться для проверки или демонстрации возможностей Servlets
и JSP, по умолчанию они доступны на http://yourserver:8080/examples. Вы
можете установить их, выполнив в терминале следующую команду:
sudo apt-get install tomcat6-examples
5.4. Использование частных сущностей
Tomcat большей частью используется в сценариях разработки и
тестирования, где использование единых настроек системы не отвечает
требованиям всех пользователей этой системы. Пакеты Tomcat 6.0 в
Ubuntu поставляются с инструментами, которые позволяют для каждого
отдельного пользователя создавать свои настройки, позволяя им (без прав
суперпользователя) использовать отдельные разрешённые библиотеки,
установленные системой.
233
Веб-серверы
Возможен запуск общесистемной и частных сущностей параллельно,
так как они не используют одни и те же порты TCP.
5.4.1. Установка поддержки частных сущностей
Вы можете установить все необходимое для запуска частных сущностей,
выполнив в терминале следующую команду:
sudo apt-get install tomcat6-user
5.4.2. Создание частной сущности
Вы можете создать каталог частной сущности, выполнив в терминале
следующую команду:
tomcat6-instance-create my-instance
Это создаст новый каталог my-instance со всеми необходимыми
подкаталогами и скриптами. Вы можете, например, установить общие
библиотеки в подкаталог lib/ и развернуть веб-приложения в подкаталоге
webapps/. По умолчанию никакие веб-приложения не устанавливаются.
5.4.3. Настраиваем вашу частную сущность
Исходные конфигурационные файлы Tomcat для вашей частной установки,
находятся в подкаталоге conf/. Вы можете, например, отредактировать
файл conf/server.xml для изменения портов, используемых по умолчанию
вашей персональной установкой Tomcat, во избежание конфликтов с
другими запущенными установками.
5.4.4. Запуск/остановка вашей частной сущности
Вы можете запустить вашу частную сущность, введя следующую команду в
строке терминала (предполагается, что сущность располагается в каталоге
my-instance)
my-instance/bin/startup.sh
Вам следует проверить подкаталог logs/ на наличие ошибок. Если
вы получили ошибку java.net.BindException: Address already in
use<null>:8080, это значит, что используемый вами порт уже занят,
и вам следует изменить его.
Вы можете остановить вашу сущность, введя следующую команду в строке
терминала (предполагается, что сущность располагается в каталоге my-
instance)
234
Веб-серверы
my-instance/bin/shutdown.sh
5.5. Ссылки
• Для более детальной информации посетите сайт Apache Tomcat21.
Tomcat: The Definitive Guide22 - хороший источник информации по
созданию веб-приложений с использованием Tomcat.
• Здесь можно увидеть список дополнительной литературы Tomcat Books23.
• Кроме того, смотрите Ubuntu Wiki Apache Tomcat24.
21
22
23
24
235
Глава 12. Базы данных
Ubuntu предоставляет два популярных сервера баз данных. Это:
• MySQL™
• PostgreSQL
Они доступны в основном хранилище (репозитории). В этом разделе
рассматривается, как установить и настроить эти сервера баз данных:
236
Базы данных
1. MySQL
MySQL - это быстрый, многопоточный, многопользовательский
и устойчивый SQL-сервер базы данных. Он предназначен как для
ответственных сильнозагруженных производственных систем, так и для
встраивания в массовое программное обеспечение.
1.1. Установка
Для установки MySQL выполните следующую команду в терминале:
sudo apt-get install mysql-server
Начиная с Ubuntu 12.04, MySQL 5.5 устанавливается по умолчанию.
Несмотря на 100% совместимость с MySQL 5.1, при необходимости
установить версию 5.1 (например в качестве зависимой базы к
другим MySQL 5.1 серверам), вы можете заменить устанавливаемый
пакет на mysql-server-5.1.
В процессе установки у вас запросят пароль для пользователя root под
MySQL.
Как только установка будет окончена, сервер MySQL должен будет
автоматически запущен. Для того, чтобы проверить, запущен ли сервер
MySQL или нет, можно воспользоваться командой:
sudo netstat -tap | grep mysql
После того, как вы запустите эту команду, вы должны увидеть нечто
похожее:
tcp
0
0 localhost:mysql
*:*
LISTEN
2556/mysqld
Если сервер не был запущен, то для запуска можно попробовать эту
команду:
sudo service mysql restart
1.2. Конфигурация
Вы можете отредактировать файл /etc/mysql/my.cnf для настройки основных
параметров - файл журнала, номер порта и пр. Например, чтобы
настроить MySQL на ожидание подключений от компьютеров в сети,
измените параметр bind-address на IP-адрес сервера:
237
Базы данных
bind-address
= 192.168.0.5
Замените 192.168.0.5 на реальное значение адреса вашего сервера.
После изменений в /etc/mysql/my.cnf сервис MySQL нужно перезагрузить:
sudo service mysql restart
Если вам потребовалось сменить пароль пользователя root в MySQL,
введите в терминале:
sudo dpkg-reconfigure mysql-server-5.5
Сервис MySQL будет остановлен и вас попросят ввести новый пароль.
1.3. Драйверы базы данных
Хотя конфигурация по умолчанию для MySQL, предоставляемая пакетами
Ubuntu, имеет великолепную функциональность и работает достаточно
хорошо, есть некоторые вещи, которые вы можете решить до того как
продолжить.
MySQL разработан так, что позволяет хранить данные по-разному. Эти
варианты относятся к драйверам (управляющим модулям - engines)
как баз данных, так и хранилищ. Существует два основных драйвера,
которые вам могут быть интересны: InnoDB и MyISAM. Драйверы хранилищ
прозрачны (незаметны) конечным пользователям. MySQL управляет
событиями по-разному на нижнем уровне, но независимо от того, какая
система хранения данных используется, вы будете взаимодействовать с
базой одним и тем же способом.
Каждый драйвер имеет свои преимущества и недостатки.
Хотя смешивание и связывание драйверов баз данных на уровне таблиц
разрешается и может быть привлекательным, это снижает эффективность
настройки производительности, которую вы смогли бы провести при
разделении ресурсов между двумя системами вместо замешивания их в
одно целое.
• MyISAM - более старая из двух. Она может быть быстрее InnoDB при
определенных обстоятельствах и предпочтительна при рабочей нагрузке,
ориентированной на чтение данных. Некоторые интернет-приложения
настроены на использование именно MyISAM (однако это не означает,
что они будут медленнее под InnoDB). MyISAM также поддерживает
238
Базы данных
тип данных FULLTEXT, который позволяет осуществлять очень быстрый
поиск по большому количеству текстовых данных. Однако MyISAM
поддерживает блокировку записи только на уровне таблиц. Это означает,
что только один процесс может изменять данные в таблице в один
момент времени. Поскольку некоторые приложения, использующие
таблицу, могут масштабироваться (работать несколькими экземплярами
- scales), это может стать серьёзной помехой. Здесь также отсутствует
журналирование, что может усложнить восстановление данных после
сбоя. Следующая ссылка предоставляет некоторые соображения по
использованию MyISAM on a production database1.
• InnoDB - более современный драйвер, созданный по принципам ACID
compliant2, что гарантирует надежную обработку транзакций базы
данных. Блокировка записи производится на уровне одной записи в
таблице. Это означает возможность нескольких изменений в одной
таблице одновременно. Кэширование данных происходит также и в
оперативной памяти внутри драйвера базы данных, позволяя кэшировать
более эффективно чем на уровне блоков файлов. В соответствии с ACID
все транзакции журналируются независимо от основных таблиц. Это
позволяет намного более надёжно восстанавливать данные при проверке
целостности данных.
Начиная MySQL 5.5, InnoDB является драйвером по умолчанию и
настоятельно рекомендуется вместо MyISAM, если только у вас нет
специфических потребностей, уникальных для этого драйвера.
1.4. Расширенные настройки
1.4.1. Создание настроенного файла my.cnf
Существует ряд параметров, которые могут быть указаны в
файле настроек MySQL, что со временем позволит вам повысить
производительность вашего сервера. Для начальной настройки вам может
пригодиться Percona's my.cnf generating tool3. Этот инструмент позволит
вам создать файл my.cnf, более оптимизированный под специфические
возможности вашего сервера и ваши требования.
Не меняйте ваш существующий файл my.cnf на созданный утилитой, если
у вас уже загружены данные в вашу базу данных. Некоторые изменения в
этом файле могут быть несовместимы, если вы поменяли то, как хранятся
данные на диске, после чего вы не сможете запустить MySQL. Если вы
239
Базы данных
все же решили это сделать и у вас есть данные в базе, вам потребуется
выполнить mysqldump и загрузить данные повторно:
mysqldump --all-databases --all-routines -u root -p > ~/fulldump.sql
Эта операция запросит пароль пользователя root перед созданием копии
данных. Желательно убедиться, что другие пользователи и процессы не
используют базу во время этой операции. В зависимости от количества
данных в вашей базе, это может занять длительное время. Вы не увидите
ничего на экране во время этого процесса.
Как только файл выгрузки создан, остановите MySQL:
sudo service mysql stop
Теперь сохраните оригинальный файл my.cnf и замените его на новый:
sudo cp /etc/my.cnf /etc/my.cnf.backup
sudo cp /path/to/new/my.cnf /etc/my.cnf
Затем удалите и создайте заново пространство базы данных, а также
убедитесь в корректности его владельца перед запуском MySQL:
sudo rm -rf /var/lib/mysql/*
sudo mysql_install_db
sudo chown -R mysql: /var/lib/mysql
sudo service start mysql
Теперь всё, что осталось - это импортировать ваши данные. Чтобы дать
нам представление о том, как идет процесс импорта, полезно использовать
утилиту 'Pipe Viewer' (pv). Далее показано, как установить и использовать
pv для этого случая, но если вы не хотите её использовать, просто
замените pv на cat в соответствующей команде. Не обращайте внимание
на время ETA (расчетное время окончания), генерируемое pv, поскольку
оно основывается на среднем времени обработки каждой записи при
сохранении в файл, однако скорость может сильно меняться от записи к
записи при использовании mysqldumps:
sudo apt-get install pv
pv ~/fulldump.sql | mysql
Когда всё завершится, это будет означать что всё получилось!
Эта операция не обязательна для всех изменений my.cnf.
Многие значения, которые вы захотите поменять для улучшения
производительности, сработают даже на работающем сервере. Но
240
Базы данных
как всегда не забудьте сделать надёжную копию файлов настроек и
данных перед внесением изменений.
1.4.2. MySQL Tuner
MySQL Tuner - это полезный инструмент, который подсоединяется
к работающему MySQL и предлагает варианты, как можно улучшить
настройки для вашей рабочей нагрузки. Чем дольше работает сервер, тем
лучше рекомендации предоставит mysqltuner. Для рабочего окружения
подождите как минимум 24 часа, прежде чем запускать утилиту. Вы
можете установить mysqltuner из хранилища Ubuntu:
sudo apt-get install mysqltuner
После установки запустите её:
mysqltuner
и ждите её финального отчета. Верхняя секция предоставляет
общую информацию а сервере баз данных, а нижняя часть содержит
рекомендации по настройке, необходимые для изменения вашего
my.cnf. Многие из них могут быть поправлены вживую на сервере без
перезагрузки. Смотрите официальную документацию MySQL (указанную
в разделе Ссылки) для перечня параметров, изменяемых "на лету". Далее
часть примерного отчета по работающей базе, который показывает, что
можно извлечь некоторую пользу от увеличения размера кэша запросов:
-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
Increase table_cache gradually to avoid file descriptor limits
Variables to adjust:
key_buffer_size (> 1.4G)
query_cache_size (> 32M)
table_cache (> 64)
innodb_buffer_pool_size (>= 22G)
Один финальный комментарий по настройке базы данных: Хотя мы
можем утверждать что определённые настройки самые лучшие,
производительность может изменяться от приложения к приложению.
Например, что работает великолепно для Wordpress, может оказаться
не лучшим для Drupal, Joomla или проприетарных приложений.
Производительность зависит от типов запросов, использования индексов,
насколько эффективно спроектирована база данных и т.д. Вы можете
посчитать полезным потратить некоторое время на поиск настроек
241
Базы данных
базы данных под используемые вами приложения. Как только вы
пройдёте определённую точку, любые ваши изменения будут приводить к
минимальным улучшениям и вам будет лучше либо заняться улучшением
ваших приложений, либо масштабировать вашу базу данных, используя
более производительное оборудование или добавляя зависимые сервера.
1.5. Ресурсы
• Смотрите MySQL Home Page4 для дополнительной информации.
• Полная документация доступна в форматах как онлайн, так и оффлайн по
ссылке MySQL Developers portal5
• Для общей информации по SQL смотрите Using SQL Special Edition6 от Rafe
Colburn.
• Страница Apache MySQL PHP Ubuntu Wiki7 также содержит полезную
информацию.
242
Базы данных
2. PostgreSQL
PostgreSQL - это объектно-ориентированная база данных, которая
имеет характерные черты классических коммерческих баз данных с
расширенными возможностями, которые могут быть найдены в системах
DBMS следующего поколения. (DBMS - DataBase Management System -
система управления базой данных - прим. переводчика).
2.1. Установка
Для того, что бы установить PostgreSQL, необходимо выполнить следующую
команду:
sudo apt-get install postgresql
После окнчания установки вы можете настроить сервер PostgreSQL под
свои нужды.
2.2. Конфигурация
По умолчанию соединения через TCP/IP заблокированы. PostgreSQL
поддерживает множество методов аутентификации. Метод
аутентификации IDENT используется для postgres и локальных
пользователей, пока не настроено что-то ещё. Обратитесь к the PostgreSQL
Administrator's Guide, если вы собираетесь использовать какую-либо
альтернативу типа Kerberos.8.
Дальнейшее обсуждение предполагает, что вы собираетесь разрешить
соединения по TCP/IP и используете аутентификацию клиентов на основе
метода MD5. Файлы настроек PostgreSQL хранятся в каталоге /etc/postgresql/
<version>/main. Например, если вы установили PostgreSQL 8.4, файлы
настроек сохранятся в каталоге /etc/postgresql/8.4/main.
Для настройки аутентификации ident добавьте записи в файл /
etc/postgresql/8.4/main/pg_ident.conf. В файле содержатся подробные
комментарии чтобы направлять вас.
Чтобы разрешить соединения по TCP/IP, отредактируйте файл /etc/
postgresql/8.4/main/postgresql.conf.
Найдите строку #listen_addresses = 'localhost' и замените её на:
listen_addresses = 'localhost'
243
Базы данных
Чтобы разрешить другим компьютерам соединяться с вашим
PostgreSQL сервером, замените 'localhost' на IP-адрес вашего сервера
или, в качестве альтернативы, на 0.0.0.0, чтобы подключить все
интерфейсы.
Вы можете также редактировать любые другие параметры, если знаете что
вы делаете! Для подробностей смотрите комментарии файла настроек или
документацию по PostgreSQL.
Теперь, поскольку мы можем подключиться к нашему серверу PostgreSQL,
следующим шагом будет установка пароля для пользователя postgres.
Выполните следующую команду в терминале для соединения со
стандартной базой шаблонов PostgreSQL:
sudo -u postgres psql template1
Вышеуказанная команда соединяет с базой данных PostgreSQL template1
как пользователя postgres. Соединившись с сервером PostgreSQL, вы
попадаете в строку ввода SQL запросов. Вы можете выполнить следующую
команду SQL в строке psql для настройки пароля пользователя postgres.
ALTER USER postgres with encrypted password 'your_password';
После настройки пароля, измените файл /etc/postgresql/8.4/main/pg_hba.conf
на использование MD5 аутентификации для пользователя postgres:
local
all
postgres
md5
Под конец вам потребуется перезапустить сервис PostgreSQL для
применения новых настроек. Из терминала выполните следующее для
перезапуска PostgreSQL:
sudo /etc/init.d/postgresql-8.4 restart
Настройка выше в любом случае неполная. Пожалуйста обратитесь
к руководству the PostgreSQL Administrator's Guide9 для настройки
других параметров.
2.3. Ресурсы
• Как упоминалось выше, Administrator's Guide10 - великолепный ресурс.
Руководство также доступно из пакета postgresql-doc-8.4. Выполните
следующую команду в терминале для установки пакета:
10
244
Базы данных
sudo apt-get install postgresql-doc-8.4
doc-8.4/html/index.html в адресную строку вашего браузера.
• Для общей информации по SQL смотрите Using SQL Special Edition11 от Rafe
Colburn.
• Также смотрите страницу PostgreSQL Ubuntu Wiki12 для дополнительной
информации.
11
12
245
Глава 13. Приложения LAMP
246
Приложения LAMP
1. Обзор
Установка LAMP (Linux + Apache + MySQL + PHP/Perl/Python) является
популярным вариантом настройки серверов Ubuntu. Существует множество
приложений с открытым кодом, написанных с использованием стека
приложений LAMP. Популярными приложениями LAMP являются wiki-
энциклопедии, системы управления содержимым (CMS) и управляющие
приложения, такие как phpMyAdmin.
Одним из преимуществ LAMP является значительная гибкость в выборе
различных баз данных, веб-серверов и языков сценариев. Популярной
заменой для MySQL служат PostgreSQL и SQLite. Python, Perl и Ruby также
часто заменяют PHP. А Nginx, Cherokee и Lighttpd могут заменять Apache.
Самым быстрым способом установить LAMP является использование
tasksel. Tasksel - это инструмент Debian/Ubuntu, который устанавливает
несколько зависимых пакетов в вашу систему в качестве единой "задачи".
Для установки LAMP сервера:
• В терминале введите следующую команду:
sudo tasksel install lamp-server
После установки вы можете поставить большинство LAMP приложений
следующим образом:
• Загрузите архив, содержащий файлы с исходным кодом приложения.
• Распакуйте архив в каталог, доступный веб-серверу.
• В зависимости от того, куда распакованы файлы, настройте веб-сервер на
их обработку.
• Настройте приложение на доступ к базе данных.
• Выполните сценарий (script) или загрузите страницу приложения для
установки базы данных, необходимой приложению.
• Когда шаги, указанные выше или подобные им, выполнены, вы готовы
начать использовать приложение.
Неудобство использования такого подхода заключается в нестандартном
способе установки файлов приложения на файловую систему, что может
привести к беспорядку в выборе мест установки приложений. Другим
большим неудобством является обновление приложений. При выпуске
новой версии, этот же процесс используется для установки обновляемого
приложения.
247
Приложения LAMP
К счастью, ряд приложений LAMP уже упакованы для Ubuntu и доступны
для установки так же, как и обычные (не-LAMP) приложения. Однако для
некоторых таких приложений могут потребоваться дополнительные шаги
по установке и настройке.
В этом разделе описано, как установить некоторые приложения LAMP.
248
Приложения LAMP
2. Moin Moin
MoinMoin - это Wiki-движок реализованный на языке Python, основанный на
движке Wiki PikiPiki и распространяемый под лицензией GNU GPL.
2.1. Установка
Для установки MoinMoin выполните следующую команду в командной
строке:
udo apt-get install python-moinmoin
Вам также понадобится установить веб-сервер apache2. Для этого,
просмотрите подсекцию Раздел 1.1, «Установка» [213] в секции Раздел 1,
«HTTPD - веб сервер Apache2» [213].
2.2. Конфигурация
Для настройки своего первого приложения Wiki выполните следующий
набор команд. Предположим, что вы создаете Wiki с именем mywiki:
cd /usr/share/moin
sudo mkdir mywiki
sudo cp -R data mywiki
sudo cp -R underlay mywiki
sudo cp server/moin.cgi mywiki
sudo chown -R www-data.www-data mywiki
sudo chmod -R ug+rwX mywiki
sudo chmod -R o-rwx mywiki
Сейчас вам рекомендуется настроить MoinMoin чтобы найти вашу новую
Wiki mywiki. Для настройки MoinMoin откройте файл /etc/moin/mywiki.py и
измените следующую строку:
data_dir = '/org/mywiki/data'
на
data_dir = '/usr/share/moin/mywiki/data'
Также ниже data_dir добавьте опцию data_underlay_dir:
data_underlay_dir='/usr/share/moin/mywiki/underlay'
Если файла /etc/moin/mywiki.py не существует, вы можете скопировать
файл /usr/share/moin/config/wikifarm/mywiki.py в /etc/moin/mywiki.py и
провести соответствующие изменения, описанные выше.
249
Приложения LAMP
Если вы назвали Wiki как my_wiki_name, то введите строку
«("my_wiki_name", r".*")» в файл /etc/moin/farmconfig.py после строки
«("mywiki", r".*")».
После того, как вы настроили MoinMoin для поиска mywiki, нужно настроить
apache2 и подготовить его для вашего Wiki-приложения.
Добавьте следующие строки в файл /etc/apache2/sites-available/default
внутри тега «<VirtualHost *>»:
### moin
ScriptAlias /mywiki "/usr/share/moin/mywiki/moin.cgi"
alias /moin_static193 "/usr/share/moin/htdocs"
<Directory /usr/share/moin/htdocs>
Order allow,deny
allow from all
</Directory>
### end moin
После того, как вы настроили веб-сервер apache2 и подготовили его
для вашего приложения Wiki, перезапустите его. Вы можете выполнить
следующею команду, чтобы перезапустить веб-сервер apache2:
sudo service apache2 restart
2.3. Проверка
Вы можете проверить приложение Wiki и убедиться, что оно работает,
введя следующий URL:
За дополнительными подробностями обратитесь к веб-сайту MoinMoin1.
2.4. Ссылки
• Для дополнительной информации смотрите moinmoin Wiki2.
• Также обратитесь к странице Ubuntu Wiki MoinMoin3.
250
Приложения LAMP
3. MediaWiki
MediaWiki является веб-ориентированным Wiki-приложением, написанном
на языке PHP. Оно может использовать систему управления базами данных
MySQL или PostgreSQL.
3.1. Установка
Перед установкой MediaWiki вы должны установить Apache2, язык
сценариев PHP5 и СУБД. В качестве СУБД чаще всего используются MySQL
или PostgreSQL. Выберите ту, которая вам больше подходит. Пожалуйста,
обратитесь к соответствующим разделам этого руководства для получения
инструкций по установке.
Для установки MediaWiki выполните следующую команду в командной
строке:
sudo apt-get install mediawiki php5-gd
Для расширения функциональности MediaWiki смотрите пакет mediawiki-
extensions.
3.2. Конфигурация
Конфигурационный файл Apache mediawiki.conf для MediaWiki установлен
в каталог /etc/apache2/conf.d/. Вам нужно раскомментировать следующую
строку в этом файле для доступа к приложениям MediaWiki.
# Alias /mediawiki /var/lib/mediawiki
После того, как вы раскомментируете указанную выше строку,
перезапустите сервер Apache и осуществите доступ к MediaWiki по
следующему URL:
Пожалуйста, прочтите раздел «Проверка окружения...» на этой
странице. Вы сможете решить многие вопросы, внимательно прочтя
его.
После завершения настройки вам нужно скопировать файл LocalSettings.php
в каталог /etc/mediawiki:
sudo mv /var/lib/mediawiki/config/LocalSettings.php /etc/mediawiki/
251
Приложения LAMP
Вы можете также отредактировать /etc/mediawiki/LocalSettings.php, чтобы
установить лимит используемой памяти (отключено по умолчанию):
ini_set( 'memory_limit', '64M' );
3.3. Расширения
Расширения добавляют новые возможности и расширяют
функциональность приложения MediaWiki. Расширения дают wiki-
администраторам и конечным пользователям возможность подстраивать
MediaWiki под их требования.
Вы можете загрузить расширения MediaWiki в виде архива или получить их
из репозитория Subversion. Вам нужно будет скопировать их в каталог /var/
lib/mediawiki/extensions. Также потребуется добавить следующую строку в
конец файла: /etc/mediawiki/LocalSettings.php.
require_once "$IP/extensions/ExtentionName/ExtentionName.php";
3.4. Ссылки
• Для получения более подробной информации перейдите на сайт
MediaWiki4.
• Руководство MediaWiki Administrators’ Tutorial Guide5 содержит кучу
информации для новых администраторов MediaWiki.
• Также хорошим ресурсом является страница Ubuntu Wiki MediaWiki6 .
252
Приложения LAMP
4. phpMyAdmin
phpMyAdmin - это приложение LAMP, специально созданное для
администрирования серверов MySQL. Написанное на PHP и доступное
через веб-браузер, приложение phpMyAdmin предоставляет графический
интерфейс для задач администрирования базы данных.
4.1. Установка
Перед установкой phpMyAdmin вам понадобится доступ к базе данных
MySQL либо на том же хосте, на который установлен phpMyAdmin, либо
на хосте, доступном по сети. Для дополнительной информации смотрите
Раздел 1, «MySQL» [237]. Наберите в терминале:
sudo apt-get install phpmyadmin
По запросу выберите, какой веб-сервер будет настроен для phpMyAdmin.
В этом разделе предполагается использование в качестве веб-сервера
Apache2.
В обозревателе перейдите по адресу http://servername/phpmyadmin ,
заменив serveranme на актуальный адрес сервера. На странице входа
введите root в качестве имени пользователя, или другого пользователя
MySQL, если вы его настраивали, а также пароль этого пользователя
MySQL.
Как только вы авторизуетесь, вы сможете при необходимости сменить
пароль пользователя root, создавать пользователей, создавать/удалять
базы данных, таблицы и прочее.
4.2. Конфигурация
Конфигурационные файлы для phpMyAdmin размещаются в /etc/phpmyadmin.
Главный конфигурационный файл - это /etc/phpmyadmin/config.inc.php. Этот
файл содержит конфигурационные опции, которые глобально применяются
к phpMyAdmin.
Чтобы использовать phpMyAdmin для администрирования базы данных
MySQL, расположенной на другом сервере, измените следующее в /etc/
phpmyadmin/config.inc.php:
$cfg['Servers'][$i]['host'] = 'db_server';
253
Приложения LAMP
Замените db_server на имя или IP-адрес реального сервера
удалённой базы данных. Убедитесь также, что хост phpMyAdmin
имеет права доступа к удалённой базе данных.
После настройки выйдите из phpMyAdmin и зайдите снова, и вы получите
доступ к новому серверу.
Файлы config.header.inc.php и config.footer.inc.php используются для
добавления верхнего и нижнего HTML-заголовков для phpMyAdmin.
Другим важным конфигурационным файлом является /etc/phpmyadmin/
apache.conf, который является символьной ссылкой на /etc/apache2/conf.d/
phpmyadmin.conf и используется для настройки Apache2 по обслуживанию
сайта phpMyAdmin. Файл содержит настройки по загрузке PHP, правам
доступа к каталогу и прочее. Для получения дополнительной информации
о настройке Apache2 смотрите раздел Раздел 1, «HTTPD - веб сервер
Apache2» [213].
4.3. Ссылки
• Документация по phpMyAdmin устанавливается из пакета и доступна по
ссылке phpMyAdmin Documentation (в виде знака вопроса в обрамлении)
под логотипом phpMyAdmin. Официальная документация также доступна
на сайте phpMyAdmin7.
• Также хороший ресурс Mastering phpMyAdmin8.
• Ещё один ресурс - это страница phpMyAdmin Ubuntu Wiki9.
254
Глава 14. Файл-серверы
Если у вас в одной сети более одного компьютера, то в какой-то момент
вы наверняка захотите обмениваться файлами между ними. В этой секции
рассмотрена установка и настройка серверов FTP, NFS и CUPS.
255
Файл-серверы
1. FTP-сервер
Протокол передачи файлов (FTP) - это протокол TCP для передачи файлов
между компьютерами. В прошлом он использовался также для загрузки
файлов на сервер в интернете, но, поскольку этот метод не использует
шифрование, пользовательские данные и содержимое файлов передаются
в открытую и легко перехватываются. Поэтому, если вы здесь ищете способ
безопасно передавать и загружать файлы, лучше обратитесь к статье по
OpenSSH в разделе Глава 6, Удалённое администрирование [93].
FTP работает на основе модели клиент/сервер. Серверный компонент
называется сервисом FTP. Он постоянно слушает FTP-запросы от удалённых
клиентов. При получении запроса он управляет входом и установкой
соединения. На протяжении сессии он выполняет любые команды,
переданные клиентом FTP.
Доступ к FTP-серверу может быть установлен двумя путями:
• Анонимный
• Авторизованный
В анонимном режиме удалённый клиент может получить доступ к FTP-
серверу, используя учётную запись пользователя по умолчанию с именем
«anonymous» или «ftp» и передав адрес электронной почты в качестве
пароля. В авторизованном режиме пользователь должен иметь учётное
имя и пароль. Этот последний вариант крайне небезопасный и не должен
использоваться за исключением специальных обстоятельств. Если
вы хотите передавать файлы безопасно, смотрите SFTP в разделе по
OpenSSH серверу. Пользовательский доступ к каталогам и файлам FTP
сервера зависит от прав доступа пользователя, указанного при входе. Как
правило, сервис FTP скрывает корневой каталог FTP сервера, подменяя
его на домашний каталог FTP. Это скрывает корень файловой системы от
удалённых сессий.
1.1. vsftpd - установка FTP-сервера
vsftpd - это демон FTP, доступный в Ubuntu. Его легко устанавливать,
настраивать и поддерживать. Для установки vsftpd вы можете выполнить
следующую команду:
sudo apt-get install vsftpd
256
Файл-серверы
1.2. Настройка анонимного доступа по FTP
Настройка vsftpd по умолчанию не разрешает анонимную загрузку. Если
вы хотите разрешить анонимную загрузку, измените в /etc/vsftpd.conf
следующее:
anonymous_enable=Yes
В процессе установки создается пользователь ftp с домашним каталогом /
srv/ftp. Это каталог по умолчанию для FTP.
Если вы желаете поменять его расположение, например, на /srv/files/
ftp, просто создайте новый каталог и измените домашний каталог
пользователя ftp:
sudo mkdir /srv/files/ftp
sudo usermod -d /srv/files/ftp ftp
После изменений перезапустите vsftpd:
sudo restart vsftpd
Под конец скопируйте все файлы и каталоги, которые вы хотите сделать
доступными для анонимного FTP, в /srv/files/ftp, или /srv/ftp, если вы
хотите оставить настройки по умолчанию.
1.3. Настройка авторизованного доступа по FTP
По умолчанию vsftpd настроен на аутентификацию системных
пользователей с возможностью скачивать файлы. Если вы хотите
разрешить пользователям загружать файлы на сервер, измените в /etc/
vsftpd.conf:
write_enable=YES
после чего перезагрузите vsftpd:
sudo restart vsftpd
Теперь при входе системных пользователей по FTP они будут попадать в
свои домашние каталоги, где они смогут скачивать и загружать файлы,
создавать каталоги и т.д.
Аналогично, по умолчанию анонимный пользователь не имеет возможности
загружать файлы на FTP-сервер. Для изменения этой настройки уберите
комментарий на следующей строке и перезапустите vsftpd:
257
Файл-серверы
anon_upload_enable=YES
Разрешение анонимному пользователю загружать файлы на
сервер может оказаться серьёзной угрозой безопасности. Лучше
не разрешать анонимную загрузку файлов на серверы с прямым
доступом из интернета.
Конфигурационный файл содержит много параметров настройки.
Информация по каждому параметру доступна в этом же файле. В качестве
альтернативы вы можете посмотреть системное руководство по команде
man 5 vsftpd.conf для уточнения деталей по каждому параметру.
1.4. Защита FTP
В /etc/vsftpd.conf существуют опции, помогающие сделать vsftpd более
безопасным. Например, пользователи могут быть ограничены своими
домашними каталогами, если раскомментировать:
chroot_local_user=YES
Вы также можете определить список пользователей, имеющих доступ
только в домашний каталог:
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
После снятия комментариев с этих опций, создайте /etc/vsftpd.chroot_list,
содержащий список пользователей по одному на строку. Затем
перезапустите vsftpd:
sudo restart vsftpd
Аналогично, файл /etc/ftpusers содержит список пользователей, которым
запрещён доступ по FTP. По умолчанию он включает root, daemon, nobody
и т.п. Для запрета доступа по FTP для дополнительных пользователей,
просто добавьте их в этот список.
FTP может быть зашифрованным при использовании FTPS. В отличие от
SFTP, FTPS - это FTP поверх SSL. SFTP - это сессия, подобная FTP, по
зашифрованному SSH соединению. Основное отличие заключается в том,
что пользователи SFTP должны иметь учётную запись с собственным
окружением shell вместо оболочки nologin. Предоставление всем
пользователям доступа к оболочке может оказаться не лучшим решением
для некоторых систем, таких как веб-сервер общего доступа. Однако
258
Файл-серверы
есть возможность ограничить такие учетные записи только SFTP и
запретить взаимодействие с оболочкой. Смотрите раздел по OpenSSH для
дополнительной информации.
Для настройки FTPS, добавьте в конец файла /etc/vsftpd.conf следующее:
ssl_enable=Yes
Также обратите внимание на опции сертификата и ключа:
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
По умолчанию эти опции установлены в значения, предоставленные
пакетом ssl-cert. Для рабочей среды они должны быть заменены
на сертификат и ключ, созданные для определённого компьютера.
Для дополнительной информации смотрите раздел Раздел 5,
«Сертификаты» [194].
Теперь перегрузите vsftpd и неанонимные пользователи будут
использовать FTPS:
sudo restart vsftpd
Чтобы позволить пользователям с оболочкой /usr/sbin/nologin получить
доступ к FTP, но не предоставлять shell доступ, отредактируйте /etc/shells,
добавив к оболочке nologin:
# /etc/shells: valid login shells
/bin/csh
/bin/sh
/usr/bin/es
/usr/bin/ksh
/bin/ksh
/usr/bin/rc
/usr/bin/tcsh
/bin/tcsh
/usr/bin/esh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/screen
/usr/sbin/nologin
Это необходимо, поскольку по умолчанию vsftpd использует
аутентификацию PAM, а файл настроек /etc/pam.d/vsftpd содержит:
259
Файл-серверы
auth
required
pam_shells.so
Модуль PAM shells ограничивает доступ к оболочкам, перечисленным в
файле /etc/shells.
Наиболее популярные клиенты FTP могут быть настроены на использование
FTPS. FTP-клиент командной строки lftp также имеет возможность
использовать FTPS.
1.5. Ссылки
• Обратитесь к сайту vsftpd website1 для дополнительной информации.
• Подробности по опциям /etc/vsftpd.conf доступны в man-странице
vsftpd.conf2.
260
Файл-серверы
2. Сетевая файловая система (NFS)
NFS позволяет системе предоставлять в общий сетевой доступ каталоги
и файлы. Посредством NFS, пользователи и программы могут получать
доступ к файлам на удаленных машинах так же легко, как будто это файлы
на их локальном компьютере.
Некоторые из преимуществ, которые может обеспечить NFS:
• Рабочие станции используют меньше локального дискового
пространства, так как общие данные могут содержаться на одной
машине и оставаться доступными по сети для всех остальных.
• У пользователей отпадает необходимость в использовании отдельных
домашних каталогов на каждой машине, подключенной в сеть. Можно
разместить домашние каталоги пользователей на сервере NFS и сделать
их доступными с помощью сети.
• Устройства хранения информации, такие как флоппи-дисководы,
приводы компакт-дисков и USB-диски, могут использоваться другими
компьютерами в сети. Это может уменьшить общее число накопителелей
со сменными носителями в сети.
2.1. Установка
Введите следующую команду в терминале для установки NFS сервера:
sudo apt-get install nfs-kernel-server
2.2. Конфигурация
Вы можете настроить каталоги для экспорта, добавляя их в файл /etc/
exports. Например:
/ubuntu *(ro,sync,no_root_squash)
/home *(rw,sync,no_root_squash)
Вы можете заменить * одним из форматов записи имени хоста. Сделайте
объявление хоста настолько необычным, насколько это возможно, чтобы
нежеланные системы не могли получить доступа к монтированию NFS.
Для запуска NFS сервера выполните следующую команду в терминале:
sudo /etc/init.d/nfs-kernel-server start
261
Файл-серверы
2.3. Настройка клиента NFS
Используйте команду mount для монтирования каталога NFS, доступ к
которому открыт на другом компьютере. Наберите в терминале команду,
схожую со следующим примером.
sudo mount example.hostname.com:/ubuntu /local/ubuntu
Точка монтирования /local/ubuntu должна существовать. В каталоге /
local/ubuntu не должно быть никаких файлов или подкаталогов.
Другой способ монтирования ресурса NFS, открытого на другом
компьютере, состоит в добавлении соответствующей строчки в файл /
etc/fstab. Строчка должна содержать имя хоста NFS-сервера, название
каталога, открытого на сервере, и название каталога на локальном
компьютере, куда будет монтироваться совместно используемый ресурс
NFS.
Общий синтаксис строки файла /etc/fstab следующий:
example.hostname.com:/ubuntu /local/ubuntu nfs rsize=8192,wsize=8192,timeo=14,intr
Если вы испытываете сложности с монтированием NFS-ресурса, убедитесь,
что пакет nfs-common установлен на вашем клиенте. Для установки пакета
nfs-common введите следующую команду в терминале:
sudo apt-get install nfs-common
2.4. Ссылки
Линукс NFS FAQ3
Ubuntu Wiki NFS Howto4
262
Файл-серверы
3. iSCSI-инициатор
iSCSI (Internet Small Computer System Interface) - это протокол, который
разрешает передавать команды SCSI по сети. Обычно iSCSI реализуется для
сетевых дисковых массивов (Storage Area Network - SAN), чтобы позволить
серверам иметь доступ к большим объемам дискового пространства.
Протокол iSCSI считает клиентов инициаторами, а сервера iSCSI - целью.
Сервер Ubuntu может быть настроен как в качестве инициатора
iSCSI, так и в качестве целевого объекта (сервера). Это руководство
описывает команды и опции настройки по установке инициатора iSCSI.
Это предполагает, что у вас есть iSCSI-устройство в вашей сети и вы
обладаете необходимыми правами для подключения к нему. Инструкции
по установке iSCSI-устройств очень сильно зависят от производителя,
поэтому обратитесь к документации производителя для настройки вашего
конкретного iSCSI-устройства.
3.1. Установка инициатора iSCSI
Для настройки сервера Ubuntu в качестве инициатора iSCSI установите
пакет open-iscsi. Введите в терминале:
sudo apt-get install open-iscsi
3.2. Настройка инициатора iSCSI
Как только пакет open-iscsi установлен, отредактируйте /etc/iscsi/
iscsid.conf, изменив следующее:
node.startup = automatic
Вы можете определить, какие целевые объекты вам доступны, с помощью
утилиты iscsiadm. Введите следующую команду в терминале:
sudo iscsiadm -m discovery -t st -p 192.168.0.10
-m: определяет режим, в котором работает iscsiadm.
-t: определяет тип поиска.
-p: опция, определяющая IP-адрес целевого объекта.
Замените 192.168.0.10 в примере на IP-адрес вашего объекта в сети.
Если целевой объект доступен, вы увидите вывод, подобный следующему:
263
Файл-серверы
192.168.0.10:3260,1 iqn.1992-05.com.emc:sl7b92030000520000-2
Номер iqn и IP-адрес могут быть другими, в зависимости от вашего
оборудования.
Теперь вы можете соединиться с iSCSI сервером и, в зависимости от
его настроек, вам, возможно, придётся ввести данные учетной записи
пользователя. Подключитесь к узлу iSCSI:
sudo iscsiadm -m node --login
Убедитесь, что новый диск определяется с помощью dmesg:
dmesg | grep sd
[
4.322384] sd 2:0:0:0: Attached scsi generic sg1 type 0
[
4.322797] sd 2:0:0:0: [sda] 41943040 512-byte logical blocks: (21.4 GB/20.0 GiB)
[
4.322843] sd 2:0:0:0: [sda] Write Protect is off
[
4.322846] sd 2:0:0:0: [sda] Mode Sense: 03 00 00 00
[
4.322896] sd 2:0:0:0: [sda] Cache data unavailable
[
4.322899] sd 2:0:0:0: [sda] Assuming drive cache: write through
[
4.323230] sd 2:0:0:0: [sda] Cache data unavailable
[
4.323233] sd 2:0:0:0: [sda] Assuming drive cache: write through
[
4.325312] sda: sda1 sda2 < sda5 >
[
4.325729] sd 2:0:0:0: [sda] Cache data unavailable
[
4.325732] sd 2:0:0:0: [sda] Assuming drive cache: write through
[
4.325735] sd 2:0:0:0: [sda] Attached SCSI disk
[ 2486.941805] sd 4:0:0:3: Attached scsi generic sg3 type 0
[ 2486.952093] sd 4:0:0:3: [sdb] 1126400000 512-byte logical blocks: (576 GB/537 GiB)
[ 2486.954195] sd 4:0:0:3: [sdb] Write Protect is off
[ 2486.954200] sd 4:0:0:3: [sdb] Mode Sense: 8f 00 00 08
[ 2486.954692] sd 4:0:0:3: [sdb] Write cache: disabled, read cache: enabled, doesn't
support DPO or FUA
[ 2486.960577] sdb: sdb1
[ 2486.964862] sd 4:0:0:3: [sdb] Attached SCSI disk
В приведённом выводе sdb - это новый iSCSI диск. Помните, что это всего
лишь пример; вывод на вашем экране может сильно отличаться.
Далее создадим раздел, отформатируем файловую систему и подсоединим
новый iSCSI диск. Введите в терминале:
sudo fdisk /dev/sdb
n
p
264
Файл-серверы
enter
w
Команды, приведённые выше, выполняются внутри утилиты fdisk;
смотрите man fdisk для дополнительных подробностей. Также
утилита cfdisk иногда более дружелюбна к пользователям.
Теперь форматируем файловую систему и монтируем её, например, в /srv:
sudo mkfs.ext4 /dev/sdb1
sudo mount /dev/sdb1 /srv
Наконец добавим запись в /etc/fstab для монтирования iSCSI устройства в
процесе загрузки:
/dev/sdb1
/srv
ext4
defaults,auto,_netdev 0 0
Хорошей идеей будет убедиться, что всё работает как надо, перегрузив
сервер.
3.3. Ссылки
Сайт Open-iSCSI5
Страница Debian Open-iSCSI6
265
Файл-серверы
4. CUPS - сервер печати
Основным механизмом печати в Ubuntu служит Common UNIX Printing
System (CUPS). Эта система печати - свободно доступный, переносимый
уровень абстракции печати, который является стандартом печати для
большинства дистрибутивов Linux.
CUPS управляет заданиями на печать и очередями, а также обеспечивает
печать по сети, используя стандартный протокол печати интернета,
(Internet Printing Protocol, IPP). В то же время он поддерживает большое
количество принтеров, от матричных до лазерных. CUPS также
поддерживает файлы описания принтеров PostScript (PostScript Printer
Description, PPD) и авто-определение сетевых принтеров, и имеет простой
веб-ориентированный инструмент настройки и администрирования.
4.1. Установка
Для того, чтобы установить CUPS на ваш компьютер, используйте sudo с
командой apt-get указав в качестве первого параметра название пакета
для установки. Полная установка CUPS зависит от множества пакетов, но
все они могут быть указаны в той же командной строке. Для установки
CUPS наберите в командной строке следующее:
sudo apt-get install cups
После аутентификации вас по паролю, пакеты должны загрузиться и
установиться без ошибок. В заключении установки сервер CUPS будет
запущен автоматически.
При необходимости решения проблем, вы можете получить доступ к
ошибкам сервера CUPS через файл журнала: /var/log/cups/error_log. Если
журнал ошибок не даёт достаточно информации для решения какой-либо
проблемы, уровень журналирования CUPS можно повысить изменением
директивы LogLevel в файле настроек (описывается ниже) до debug
или даже debug2 со стандартного info, что будет сохранять в журнал
абсолютно всё. Если вы провёдете такое изменение, не забудьте вернуть
всё обратно после решения проблемы, чтобы избежать излишнего
разрастания файла журнала.
4.2. Конфигурация
Поведение сервера CUPS настраивается с помощью инструкций,
содержащихся в файле /etc/cups/cupsd.conf. Файл настроек CUPS использует
такой же синтаксис, как и основной файл настроек HTTP сервера Apache,
266
Файл-серверы
то есть пользователи, знакомые с модификацией файлов настроек Apache,
должны спокойно ориентироваться при работе с настройками CUPS.
Примеры некоторых настроек, которые вы, возможно, захотите изменить с
самого начала, будут представлены здесь.
Перед изменением конфигурационного файла сделайте копию
с оригинала и защитите её от записи, чтобы использовать файл
оригинальных настроек в качестве справки, а также иметь
возможность использовать его снова.
Скопируйте файл /etc/cups/cupsd.conf и защитите копию от записи
с помощью следующих команд, выполненных в командной строке
терминала:
sudo cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.original
sudo chmod a-w /etc/cups/cupsd.conf.original
ServerAdmin: Чтобы настроить адрес электронной почты для
назначенного администратора сервера CUPS, просто откройте
файл /etc/cups/cupsd.conf в своём любимом текстовом редакторе и
добавьте или измените строку ServerAdmin соответствующим образом.
Например, если вы администратор сервера CUPS и ваш почтовый
адрес 'bjoy@somebigco.com', вам следует изменить строку ServerAdmin
следующим образом:
ServerAdmin bjoy@somebigco.com
Listen: В Ubuntu по умолчанию установленный сервер CUPS слушает
только интерфейс обратной петли по адресу 127.0.0.1.Чтобы заставить
сервер CUPS прослушивать актуальный IP-адрес сетевого адаптера,
вы должны указать сетевое имя или пару IP-адрес/порт добавочной
директивой Listen. Например, если ваш сервер находится в локальной
сети с IP-адресом 192.168.10.250, и вы хотите сделать его доступным
для других систем в этой подсети, отредактируйте /etc/cups/cupsd.conf,
добавив директиву Listen, как показано ниже:
Listen 127.0.0.1:631 # существующий Listen интерфейса loopback
Listen /var/run/cups/cups.sock # существующий Listen для сокетов
Listen 192.168.10.250:631 # Listen на интерфейсе LAN, Порт 631 (IPP)
В вышепривёденном примере вы можете закомментировать или удалить
ссылки на loopback-адрес (127.0.0.1), если желаете, чтобы cupsd вместо
этого интерфейса использовал только Ethernet-интерфейсы локальной
сети. Для разрешения использования всех интерфейсов, включая
267
Файл-серверы
loopback, к которым привязано определенное имя хоста, создайте запись
Listen для имени хоста socrates следующим образом:
Listen socrates:631
# Listen on all interfaces for the hostname 'socrates'
или опустив директиву Listen и используя вместо неё Port, как в
Port 631
# Listen on port 631 on all interfaces
Если вам необходимо большее количество примеров директив
конфигурационного файла сервера CUPS, обратитесь к соответствующей
странице руководства системы, введя следующую команду в терминале:
man cupsd.conf
Если вы внесёте изменения в файл конфигурации /etc/cups/cupsd.conf,
вам будет необходимо перезапустить CUPS сервер, выполнив
следующую команду в терминале:
sudo /etc/init.d/cups restart
4.3. Веб-интерфейс
Настраивать CUPS и отслеживать его состояние можно через веб-
интерфейс, который по умолчанию доступен по адресу http://
localhost:631/admin. Веб-интерфейс можно использовать для
выполнения любых задач управления принтером.
Чтобы выполнить административную задачу через веб-интерфейс, вы
должны либо разрешить учётную запись root на своем сервере, либо
авторизоваться как пользователь из группы lpadmin. По соображениям
безопасности CUPS не авторизует пользователей с пустыми паролями.
Чтобы добавить пользователя в группу lpadmin, выполните в терминале
следующую команду:
sudo usermod -aG lpadmin username
Дальнейшая документация доступна через закладку Documentation/Help
веб-интерфейса.
268
Файл-серверы
4.4. Ссылки
Сайт CUPS7
Страница Debian Open-iSCSI8
269
Глава 15. Сервисы
электронной почты
Процесс доставки электронных писем от одного человека к другому через
локальную сеть или Интернет включает в себя взаимодействие множества
систем. Каждая из этих систем должна быть правильно настроена,
чтобы выполнять свою работу. Оправитель использует почтовый агент
пользователя (Mail User Agent, MUA) или клиент электронной почты, чтобы
отправлять сообщения через один или несколько агентов передачи почты
(Mail Transfer Agents, MTA), последний из которых передаст сообщение
агенту доставки почты (Mail Delivery Agent, MDA) для доставки почты в
почтовый ящик получателя, откуда оно может быть доставлено получателю
с помощью его почтового клиента, обычно через сервер POP3 или IMAP.
270
Сервисы электронной почты
1. Postfix
В Ubuntu агент передачи почты (Mail Transfer Agent (MTA)) по умолчанию -
Postfix. Он считается безопасным, быстрым и лёгким в администрировании.
Он совместим с MTA sendmail. Данный раздел объяснит, как установить
и настроить postfix. Так же будет описано, как настроить SMTP-сервер с
использованием безопасного соединения (для безопасной передачи почты).
Это руководство не рассматривает настройку виртуальных
доменов postfix. Для получения информации по виртуальным
доменам и другим расширенным настройкам смотрите Раздел 1.7.3,
«Ссылки» [277].
1.1. Установка
Чтобы установить postfix, запустите следующую команду:
sudo apt-get install postfix
Просто нажимайте ввод, когда процесс установки задает вопросы, более
детальная настройка будет выполнена на следующем этапе.
1.2. Базовая конфигурация
Чтобы настроить postfix, выполните следующую команду:
sudo dpkg-reconfigure postfix
Будет запущен пользовательский интерфейс. На каждом экране выбирайте
следующие значения:
• Сайт в интернете
• mail.example.com
• steve
• mail.example.com, localhost.localdomain, localhost
• No
• 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24
• 0
• +
• все
Замените mail.example.com на домен, для которого вы настраиваете
email, 192.168.0.0/24 на актуальную подсеть и маску для вашего
почтового сервера и steve на соответствующее имя пользователя.
271
Сервисы электронной почты
Теперь самое время решить, какой формат почтового ящика вы хотите
использовать. По умолчанию, Postfix будет использовать mbox, как формат
почтового ящика. Вместо прямого редактирования конфигурационного
файла, вы можете использовать команду postconf для настройки всех
параметров postfix. Параметры конфигурации будут храниться в файле
/etc/postfix/main.cf. Позже, если вы захотите перенастроить отдельный
параметр, вы можете либо запустить команду, либо изменить его в файле
вручную.
Для настройки формата почтового ящика в Maildir:
sudo postconf -e 'home_mailbox = Maildir/'
Это поместит новую почту в /home/username/Maildir, поэтому вам
потребуется настроить вашего агента доставки почты (MDA) на
использование этого же каталога.
1.3. Аутентификация SMTP
SMTP-AUTH позволяет клиенту идентифицировать себя через механизм
аутентификации (SASL). Транспортный уровень безопасности (TLS) будет
использоваться для шифрования процесса аутентификации. После
аутентификации SMTP сервер позволит клиенту передавать почту.
1. Настройте Postfix на SMTP-AUTH с использованием SASL (Dovecot SASL):
sudo postconf -e 'smtpd_sasl_type = dovecot'
sudo postconf -e 'smtpd_sasl_path = private/auth-client'
sudo postconf -e 'smtpd_sasl_local_domain ='
sudo postconf -e 'smtpd_sasl_security_options = noanonymous'
sudo postconf -e 'broken_sasl_auth_clients = yes'
sudo postconf -e 'smtpd_sasl_auth_enable = yes'
sudo postconf -e 'smtpd_recipient_restrictions = \
permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
Настройка smtpd_sasl_path является путём, относительным к
каталогу запросов Postfix.
2. Далее создайте или получите цифровой сертификат для TLS. Смотрите
подробности в разделе Раздел 5, «Сертификаты» [194]. Этот пример
также использует Центр сертификации (CA). Для информации по
созданию сертификатов CA смотрите раздел Раздел 5.5, «Центр
Сертификации» [197].
Почтовым агентам пользователей (MUA), подключающимся к
вашему почтовому серверу через TLS, потребуется распознать
272
Сервисы электронной почты
сертификат, используемый для TLS. Это может быть сделано
либо с использованием сертификата от коммерческого центра
сертификации, либо с самоподписанным сертификатом,
который пользователи установили вручную. Для TLS между
MTA (агентами передачи почты) сертификаты никогда
не подтверждаются без дополнительного соглашения с
контролирующими организациями. Поэтому для таких
соединений, если локальные политики этого не требуют,
нет резона не использовать самоподписанные сертификаты.
Смотрите подробности в разделе Раздел 5.3, «Создание
сертификата со своей подписью» [197].
3.
Как только у вас появился сертификат, настройте Postfix на
использование TLS-шифрования как для входящей, так и для
исходящей почты:
sudo postconf -e 'smtp_tls_security_level = may'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtp_tls_note_starttls_offer = yes'
sudo postconf -e 'smtpd_tls_key_file = /etc/ssl/private/server.key'
sudo postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/server.crt'
sudo postconf -e 'smtpd_tls_loglevel = 1'
sudo postconf -e 'smtpd_tls_received_header = yes'
sudo postconf -e 'myhostname = mail.example.com'
4.
Если вы используете собственный Центр сертификации, для подписи
сертификата введите:
sudo postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem'
Опять же, для подробностей смотрите раздел Раздел 5,
«Сертификаты» [194].
После выполнения всех команд Postfix настроен на SMTP-AUTH и
самоподписанный сертификат создан для TLS шифрования.
Теперь, файл /etc/postfix/main.cf должен выглядеть подобным1 образом.
Начальная настройка postfix закончена. Выполните следующую команду
для перезапуска сервиса postfix:
sudo /etc/init.d/postfix restart
1 ../sample/postfix_configuration
273
Сервисы электронной почты
Postfix поддерживает SMTP-AUTH как описано в RFC25542. Он основан на
SASL3. Однако все-таки необходимо настроить аутентификацию перед тем,
как вы сможете использовать SMTP-AUTH.
1.4. Настройка SASL
Postfix поддерживает две реализации SASL: Cyrus SASL и Dovecot SASL.
Чтобы разрешить Dovecot SASL, требуется установить пакет dovecot-
common. Для этого из терминала введите следующее:
sudo apt-get install dovecot-common
Далее вам потребуется отредактировать /etc/dovecot/dovecot.conf. В секции
auth default снимите комментарий с опции socket listen и измените её
следующим образом:
socket listen {
#master {
# Master socket provides access to userdb information. It's typically
# used to give Dovecot's local delivery agent access to userdb so it
# can find mailbox locations.
#path = /var/run/dovecot/auth-master
#mode = 0600
# Default user/group is the one who started dovecot-auth (root)
#user =
#group =
#}
client {
# The client socket is generally safe to export to everyone. Typical use
# is to export it to your SMTP server so it can do SMTP AUTH lookups
# using it.
path = /var/spool/postfix/private/auth-client
mode = 0660
user = postfix
group = postfix
}
}
Чтобы позволить использовать SMTP-AUTH клиентам Outlook, в секции auth
default файла /etc/dovecot/dovecot.conf добавьте "login":
mechanisms = plain login
После того, как Dovecot настроен, перезапустите его:
274
Сервисы электронной почты
sudo /etc/init.d/dovecot restart
1.5. Почтовый стек доставки
Другой опцией настройки Postfix для SMTP-AUTH является использование
пакета mail-stack-delivery (ранее он назывался dovecot-postfix). Этот пакет
установит Dovecot и настроит Postfix для его использования совместно с
SASL аутентификацией и как агента доставки почты (MDA). Пакет также
настроит Dovecot для IMAP, IMAPS, POP3 и POP3S.
Вы можете захотеть или не захотеть использовать IMAP, IMAPS,
POP3, или POP3S на вашем почтовом сервере. Например, если вы
настраиваете свой сервер в качестве почтового шлюза, фильтра
спама и вирусов и т.п. В этом случае возможно будет проще
использовать вышеприведенные команды для настройки Postfix на
SMTP_AUTH.
Чтобы установить пакет, введите в терминале:
sudo apt-get install mail-stack-delivery
У вас теперь рабочий почтовый сервер, но существует несколько опций,
которые вы, возможно, захотите изменить в дальнейшем. Например, пакет
использует сертификат и ключ от ssl-cert пакета, и в рабочей среде, вы
должны использовать сертификат и ключ, сгенерированный для хоста.
Смотрите радел Раздел 5, «Сертификаты» [194] для дополнительных
деталей.
После того, как вы получили заказанный сертификат для сервера, замените
следующую опцию в /etc/postfix/main.cf:
smtpd_tls_cert_file = /etc/ssl/certs/ssl-mail.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-mail.key
Перезапустите Postfix:
sudo /etc/init.d/postfix restart
1.6. Тестирование
Настройка SMTP-AUTH завершена. Теперь самое время проверить
настройки.
Чтобы убедиться, что SMTP-AUTH и TLS работают правильно, выполните
следующую команду:
275
Сервисы электронной почты
telnet mail.example.com 25
После установления соединения с почтовым сервером postfix введите:
ehlo mail.example.com
Если среди прочего вы увидите следующие строки, всё работает
замечательно. Введите quit для выхода.
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME
1.7. Устранение проблем
Этот раздел описывает несколько общих способов определения причин
возникающих проблем.
1.7.1. Отказ от режима chroot
Пакет postfix в Ubuntu по умолчанию устанавливается в окружении chroot
из соображений безопасности. Это может дополнительно усложнить
процесс поиска решения проблем.
Для отключения функционирования chroot, найдите следующую строку в
файле настроек /etc/postfix/master.cf:
smtp inet n - - - - smtpd
и измените на:
smtp inet n - n - - smtpd
После этого вам придётся перезапустить Postfix для использования новых
настроек. В терминале введите следующее:
sudo /etc/init.d/postfix restart
1.7.2. Файлы журналов
Postfix посылает все сообщения в журнал /var/log/mail.log. Однако
сообщения об ошибках и предупреждения могут иногда теряться в
нормальном журнале, поэтому они отдельно сохраняются в /var/log/mail.err
и /var/log/mail.warn, соответственно.
Для просмотра сообщений журнала в режиме реального времени вы
можете использовать команду tail -f:
276
Сервисы электронной почты
tail -f /var/log/mail.err
Количество деталей, записываемых в журнал, может быть увеличено. Ниже
приведено несколько опций настройки для увеличения уровня детализации
некоторых областей, описанных выше.
• Для увеличения TLS активности журнала, установите опции
smtpd_tls_loglevel значение от 1 до 4.
sudo postconf -e 'smtpd_tls_loglevel = 4'
• Если вы испытываете трудности с отправкой или приёмом почты из
отдельного домена, вы можете включить его в параметр debug_peer_list.
sudo postconf -e 'debug_peer_list = problem.domain'
• Вы можете увеличить детализацию любого сервиса Postfix
редактированием /etc/postfix/master.cf, добавив -v после соответствующей
записи. Для примера изменим запись smtp:
smtp
unix
-
-
-
-
-
smtp -v
Важно помнить, что после внесения изменений настроек
журналирования процессов, Postfix требуется перезапустить для
восприятия новой конфигурации: sudo /etc/init.d/postfix reload
• Для увеличения количества информации в журнале при поиске проблем с
SASL, вы можете установить следующие опции в /etc/dovecot/dovecot.conf
auth_debug=yes
auth_debug_passwords=yes
Как и в случае с Postfix, если вы изменяете настройки Dovecot,
процесс требуется перезапустить: sudo /etc/init.d/dovecot reload.
Некоторые опции выше могут серьёзно увеличить объем
информации, передаваемой в файлы журналов. Не забывайте
возвращать уровень детализации журналов к нормальному
значению после решения проблем. Затем перезапустите
соответствующий сервис, чтобы изменения настройки вступили в
силу.
1.7.3. Ссылки
Администрирование сервера Postfix может быть очень сложной задачей. В
какой-то момент вам может потребоваться обратиться к сообществу Ubuntu
для более квалифицированной помощи.
277
Сервисы электронной почты
Хорошее место, чтобы задать вопрос по сопровождению Postfix и влиться
в сообщество Ubuntu Server community - это IRC-канал #ubuntu-server на
freenode4. Вы также можете отправить сообщение на один из веб-форумов5.
Для всесторонней информации Postfix разработчики Ubuntu очень
рекомендуют прочитать The Book of Postfix6.
Наконец, веб-сайт Postfix7 также содержит много информации по всем
возможным опциям настройки.
Кроме того, страница Ubuntu Wiki Postifx8 содержит дополнительную
информацию.
278
Сервисы электронной почты
2. Exim4
Exim4 - это почтовый транспортный агент (MTA), разработанный
в университете Кембриджа для использования в системах Unix,
подключённых к Интернету. Exim можно установить вместо sendmail, хотя
процедура настройки exim сильно отличается от настройки sendmail.
2.1. Установка
Чтобы установить exim4, выполните следующую команду:
sudo apt-get install exim4
2.2. Конфигурация
Для настройки Exim4 выполните следующую команду:
sudo dpkg-reconfigure exim4-config
Появится пользовательский интерфейс. Этот интерфейс позволит вам
настроить множество параметров. Например, в Exim4 файлы настроек
разделены между различными файлами. Если вы решите объединить
их в один файл, вы можете настроить это в данном пользовательском
интерфейсе.
Все параметры, которые вы настроите в пользовательском интерфейсе
будут сохранены в файле /etc/exim4/update-exim4.conf. Если вы захотите
что-то перенастроить, то либо перезапустите мастера настройки, либо
вручную поправьте данный файл любым редактором. После настройки вам
потребуется выполнить следующую команду для создания главного файла
настроек:
sudo update-exim4.conf
Главный файл настроек будет создан и сохранён в /var/lib/exim4/
config.autogenerated.
Вы не должны, ни при каких обстоятельствах, редактировать
вручную основной файл настроек /var/lib/exim4/config.autogenerated.
Он обновляется автоматически каждый раз, когда вы запускаете
команду update-exim4.conf
Вы можете воспользоваться следующей командой для запуска сервиса
Exim4.
279
Сервисы электронной почты
sudo /etc/init.d/exim4 start
2.3. Аутентификация SMTP
Этот раздел раскрывает, как настроить Exim4 для использования SMTP-
AUTH с TLS и SASL.
Первым шагом будет создание сертификата для использования TLS.
Введите следующее в терминале:
sudo /usr/share/doc/exim4-base/examples/exim-gencert
Теперь Exim4 нуждается в настройке TLS. Отредактируйте /etc/exim4/conf.d/
main/03_exim4-config_tlsoptions, добавив следующее:
MAIN_TLS_ENABLE = yes
Далее вам потребуется настроить Exim4 на использование saslauthd
для аутентификации. Вызовите на редактирование /etc/exim4/
conf.d/auth/30_exim4-config_examples и раскомментируйте секции
plain_saslauthd_server и login_saslauthd_server:
plain_saslauthd_server:
driver = plaintext
public_name = PLAIN
server_condition = ${if saslauthd{{$auth2}{$auth3}}{1}{0}}
server_set_id = $auth2
server_prompts = :
.ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}}
.endif
#
login_saslauthd_server:
driver = plaintext
public_name = LOGIN
server_prompts = "Username:: : Password::"
# don't send system passwords over unencrypted connections
server_condition = ${if saslauthd{{$auth1}{$auth2}}{1}{0}}
server_set_id = $auth1
.ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}}
.endif
Дополнительно, чтобы внешний почтовый клиент имел возможность
соединиться с вашим новым сервером exim, требуется добавить нового
пользователя в exim, используя следующие команды:
280

 

 

 

 

 

 

 

 

содержание      ..     1      2      3      4      ..