LXF78:Вопрос? Ответ!

Материал из Linuxformat.

(Различия между версиями)
Перейти к: навигация, поиск
(Порулить мышью)
(Почто-man)
Строка 230: Строка 230:
Не забудьте, что если Вы хотите пропускать почту для внешних адресов, то надо соответствующим образом настроить Sendmail. ''КК''
Не забудьте, что если Вы хотите пропускать почту для внешних адресов, то надо соответствующим образом настроить Sendmail. ''КК''
 +
----
 +
===Бондинг===
 +
 +
'''Вопрос:''' <br />
 +
У меня на компьютере под управлением Red Hat установлены две сетевые карты Ethernet, которые подключены к одному коммутатору (switch), и у меня один статический IP-адрес. Можно ли без виртуального IP настроить оба сетевых интерфейса как два параллельных пути, таким образом, чтобы в случае обрыва одной связи трафик переключался на другую?
 +
'''Тони'''
 +
 +
'''Ответ:''' <br />
 +
Да, бондинг допускает избыточность: один хост подключается к сети через два независимых пути (интерфейса). В отличие от метода с виртуальным IP-адресом, бондинг создает «плавающий» виртуальный интерфейс. Под Red Hat Вам нужно ассоциировать два физических интерфейса с одним виртуальным, ‘bond0’, при помощи стандартных файлов сетевой конфигурации. Итак, '''ifcfg-eth0''' и '''ifcfg-eth1''' должны содержать следующее:
 +
/etc/sysconfig/network-scripts/ifcfg-
 +
eth0
 +
DEVICE=eth0
 +
ONBOOT=yes
 +
TYPE=Ethernet
 +
MASTER=bond0
 +
SLAVE=yes
 +
/etc/sysconfig/network-scripts/ifcfg-
 +
eth1
 +
DEVICE=eth0
 +
ONBOOT=yes
 +
TYPE=Ethernet
 +
MASTER=bond0
 +
SLAVE=yes
 +
 +
Теперь создайте файл сетевого интерфейса '''bond0''', который должен содержать что-то вроде этого:
 +
 +
/etc/sysconfig/network-scripts/ifcfg-
 +
bond0
 +
DEVICE=bond0
 +
ONBOOT=yes
 +
BOOTPROTO=static
 +
TYPE=Ethernet
 +
IPADDR=x.y.z.a
 +
NETMASK=x.y.z.a
 +
 +
Этим вы ассоциировали два физических интерфейса с одним виртуальным.
 +
 +
Вам нужно настроить запуск бондинга при загрузке. Для этого добавьте следующие строки в '''/etc/modprobe.conf'''
 +
alias bond0 bonding options
 +
bonding mode=1 miimon=100
 +
primary=eth0
 +
install bond0 /sbin/modprobe eth0;
 +
/sbin/modprobe eth1; /sbin/
 +
modprobe bonding; /bin/true
 +
mode=1 – активный/неактивный
 +
miimon=100 – период опроса сети в миллисекундах (100мс)
 +
 +
Теперь загрузите модуль бондинга и перезапустите сетевой init-скрипт.
 +
Выполните следующие команды от лица суперпользователя:
 +
# modprobe bond0
 +
# service network restart
 +
 +
Последнее, что осталось сделать – обновить конфигурацию iptables и заменить упоминания о реальных интерфейсах на виртуальный. ''КК''

Версия 12:54, 4 апреля 2008

Содержание

Вопрос? Ответ!

  • Если вы завязли в какой-то проблеме и чтение HOWTO не помогает, почему бы не написать нам? Наши эксперты помогут вам разобраться даже в самых сложных проблемах.

Безbashенному

Вопрос:
Я пытаюсь писать bash-скрипты с использованием утилит, требующих ввода с клавиатуры. Например, здесь без этого не обойтись:

update-alternatives --config xxx

Хотелось бы автоматизировать этот процесс с помощью параметра, передаваемого скрипту. На данный момент мое лучшее решение – записать в файл то, что нужно ввести с клавиатуры, запустить update-alternatives, направив поток ввода из этого файла, а затем удалить сам файл. Но должен быть другой путь. Как можно ввести параметр с клавиатуры, не записывая его во временный файл? Аноним, с форума LXF

Ответ:
Запомните закон Linux (и Unix): «Все на свете – файлы», включая стандартные потоки ввода и вывода. Для них предусмотрены дескрипторы: &0 для стандартного ввода stdin, а &1 – для стандартного вывода stdout (кстати, &2 – это поток ошибок, stderr) . Вот что Вам нужно:

echo «A» | update-alternatives --config xxx <&0

Здесь «А» – параметр, вводимый с клавиатуры. echo посылает его в stdout, далее канал (|) перенаправляет его следующей команде: &0 – дескриптор для stdin, а <&0 направляет ввод на команду.

Согласно другому неписаному закону Linux, «для любой задачи существуют как минимум два способа выполнения». Вместо &0, &1 и &2 Вы можете указать /dev/stdin, /dev/stdout и /dev/stderr соответственно. Версии с & короче набирать, но /dev будут понятнее, если Вы откроете свой скрипт через полгодика. НБ


Вдохнуть Ethereal

Вопрос:
Только что приобрел ваш журнал и установил SUSE Linux на списанный компьютер, потому что очень хочу разобраться в Linux. Установка была очень простой, и руководства в журнале очень полезные. Однако я сетевой инженер, поэтому теперь хочу установить Ethereal [анализатор сети]. Поскольку я новичок в Linux и у меня очень мало опыта, не могли бы вы подсказать, что нужно скачать, чтобы скомпилировать и установить Ethereal в SUSE Linux? Линден Данлоп

Ответ:
Собрать из исходных текстов любую открытую программу очень легко. Однако у дистри бутивов вроде SUSE Linux есть замечательное свойство: большинство необходимого имеется на дисках или в репозитариях пакетов.

Для установки Ethereal запустите YaST из меню SUSE, перейдите на вкладку Программное обеспечение (Software) и выберите Управление программным обеспечением (Software Management). Теперь просто напечатайте «ethereal» в строке поиска, выберите найденные пакеты и нажмите Принять (Accept) для запуска установки. Если у программы есть какие-нибудь зависимости (другие программы или библиотеки), они установятся автоматически.

По умолчанию YaST знает лишь о тех пакетах, которые есть на установочных дисках. Вы можете добавить репозитарии с дополнительными пакетами, выбрав Источники установки (Installation Sources). Список зеркал SUSE можно найти на сайте http://www.opensuse.org/Mirrors_Released_Version. Выберите себе сервер и добавьте его в YaST, чтобы иметь доступ к самым свежим версиям пакетов. НБ


Уловка-22

Вопрос:
Я уезжаю работать за границу на несколько месяцев и хотел бы иметь удаленный доступ к своей сети. Установил FreeNX на SUSE 9.3 и перенаправил пакеты с порта 22 на нужную машину на роутере Netgear. Теперь я без проблем могу соединяться со своей машиной, просматривать почту и запускать приложения.

Этим утром я просмотрел /var/log/messages и увидел, что кто-то пытается атаковать меня по 22-му порту. Там были сотни сообщений от sshd вида
`Invalid user <xxx> from :: ffff:195.90.196.20’.

На моей системе зарегистрированы только 2 пользователя, root и я (вряд ли хакеры могут угадать мое имя). Я использую сильные пароли, комбинируя буквы верхнего и нижнего регистра с цифрами, их нет ни в каком словаре.

Беспокоиться ли насчет этих атак? Можно ли предупредить sshd, чтобы он отклонял соединения после X неудачных попыток входа за N секунд, или лучше просто отследить злоумышленника и отклонять вообще все пакеты с его ip-адреса? Лео Палваст

Ответ:
Такие атаки – обычное дело, если Вы открываете миру порт 22 для внешнего ssh-доступа. Есть несколько приемов, уменьшающих вероятность проникновения злоумышленника. Сложные пароли – только первый шаг. Так как Вы используете SSH для удаленной пользовательской работы, root-доступ Вам скорее всего не нужен, вот и отключите его в /etc/ssh/sshd_config. Для этого найдите строку

PermitRootLogin yes

и замените yes на no. Если понадобится, сможете получить права суперпользователя через su, а вот взломщику для этого придется взломать уже два пароля – сначала Ваш пользовательский, затем пароль суперпользователя.

Или включите yes для without-password. root-доступ откроется, но только для того, у кого верный ssh-ключ. Посмотрите man-страницы для ssh и ssh-keygen, чтобы побольше узнать об этом. Вы можете потребовать проверки ключа для всех пользователей, но тогда придется скопировать ключ на все компьютеры, с которых Вы захотите иметь ssh-доступ – это не здорово. Решение сработает, если Вы заходите по ssh только со своего ноутбука.

Для включения этой опции найдите строку с «PasswordAuthentication» и приведите ее к такому виду:

PasswordAuthentication no

Еще Вы можете запускать ssh-сервер на каком-нибудь нестандартном порту, изменив строку «Port 22» в sshd_config и разрешив этот порт в nxclient и knx. Все эти методы позволят Вам сделать Вашу систему практически недосягаемой для хакеров.

Есть несколько программ, блокирующих IP-адреса, с которых пытаются подобрать пароли для SSH и других сервисов: http://breakinguard.sf.net, http://daemonshield.sourceforge.net или http://www.csc.liv.ac.uk/~greg/sshdfilter.


Криптографомания

Вопрос:
У нас в офисе – внутренний почтовый сервер на Dovecot. Мы бы хотели обеспечить нашим сотрудникам шифрованный доступ к нему, чтобы они могли подключаться к серверу из дома, но беспокоимся о безопасности этого шага. Можете ли вы рассказать о том, как разрешить безопасное соединение через надежные email-протоколы? Мичил Гир

Ответ:
Шифрование базовых сервисов совсем не трудно, несмотря на то, что математические аспекты криптографии очень сложны для понимания. Нужно только создать SSL-сертификат и убедиться, что сервер работает с созданными нами сертификатами. Сертификат можно и купить, но вряд ли это будет оправдано в случае исключительно внутренних нужд. Будь это общедоступный сервис, Вам потребовался бы сертификат, распознаваемый большинством распространенных почтовых клиентов.

Для создания сертификата воспользуемся пакетом OpenSSL (http://www.openssl.org), который есть в большинстве дистрибутивов. Команда openssl сама по себе малопонятна, но есть простой интерактивный интерфейс, через который можно создать сертификат для Вас. Для этого имеется скрипт mkcert.sh, поставляемым вместе с Dovecot, но, имея дело с файлами OpenSSL, можно изготовить ключи и сертификаты другого вида.

От лица суперпользователя перейдите в директорию /etc/pki/tls/certs (/usr/share/ssl/certs для SUSE или /etc/ssl для Mandriva). Если наберете make в командной строке, получите напоминание о том, какие сертификаты будут созданы. Обычно сначала создается ключ, а затем на его основе генерируется сертификат. А вот команда make dovecot.pem создаст ключ и сертификат для Dovecot, оба в одном файле. Все, что Вам нужно – в ответ на подсказку ввести информацию (значения по умолчанию будут показаны в квадратных скобках). Самое важное из заполняемых полей – Common Name, тут следует вписать домен Вашего почтового сервера, а с остальными разобраться нетрудно.

Теперь перенесем созданный сертификат в директорию, указанную в файле конфигурации Dovecot – /etc/dovecot.conf, параметры ssl_cert_file и ssl_key_file – это те самые сертификат и ключ.

Просто скопируем файл с этой парой в /etc/pki/dovecot/dovecot.pem и в /etc/pki/dovecot/private/dovecot.pem, удалив при этом автоматически сгенерированные файлы. Уникальный сертификат готов – наслаждайтесь безопасным сервером Dovecot. КК


Где модем?

Вопрос:
После месяцев сомнений я наконец набрался смелости установить SUSE 10. Установка прошла нормально, но система настойчиво считала, что я в локальной сети (хотя у меня никакой сети нет), да еще она не нашла мой модем.

Я испробовал все советы из вашего журнала и все, что нашел в различных форумах, однако без толку (честно говоря, многого из того, что мне советовали, я просто не понял). Я даже хотел удалить Linux с жесткого диска, но теперь уже долгое время я не могу загрузиться в Windows, потому что не запускается какой-то Grub.

Если вы сможете мне помочь, я попытаюсь еще раз. Если нет, то как я могу удалить SUSE Linux? Лес Вуд

Ответ:
Во-первых, важное замечание. Пока Вы не сообщите как можно больше информации о Вашей системе, мы будем блуждать в потемках. Чтобы помочь, мы должны знать конфигурацию компьютера, на который Вы устанавливаете Linux. Есть в Вашем компьютере сетевая карта? Если да, тогда понятно, почему SUSE думал, что Вы в сети. Решение этой ИСКЕ проблемы очень простое: запустите YaST, зайдите в Сетевое оборудование (Network Devices) > Сетевая карта (Network Card), выделите сетевой интерфейс и нажмите Удалить (Delete).

Теперь займемся модемом. Скорее всего SUSE его не распознает, потому что у Вас так называемый Winmodem. Это примитивные устройства, и большинство их функций перекладывается на центральный процессор и Windows-драйвер. Некоторые из них можно уговорить поработать в Linux, некоторые – нет, поскольку их изготовители не выкладывают спецификаций, которые нужны для создания драйвера.

Для начала определите, что у Вас за модем, с помощью утилиты Scanmodem, которая включена на диск этого журнала. Вставьте диск, запустите терминал и выполните такую команду:

sh /media/cdrom/Magazine/Answers/scanModem

Скрипт создаст директорию Modem с несколькими текстовыми файлами, содержащими информацию о Вашем модеме, о подходящем драйвере и о том, где его найти. Дополнительная информация имеется на сайте http://linmodems.org.

С другой стороны, можно приобрести обычный COM-модем (с некоторыми USB-моделями также возникают сложности). COM-модемы без проблем работают абсолютно в любой операционной системе.

Ваша проблема с удалением Linux не уникальна. Когда Вы установили его, в главную загрузочную запись прописался Grub, позволяющий выбрать загрузку Linux или Windows. Linux Вы стерли, а Grub остался, но необходимые ему файлы были удалены. Поэтому он и не может нормально запуститься. Если у Вас Windows 98, загрузитесь с аварийной дискеты или диска и запустите fdisk следующим образом:

fdisk /mbr

Если у Вас Windows XP, то вместо fdisk запустите fixmbr. НБ


Синхронология

Вопрос:
У меня есть старый компьютер с Mandrake 8.2, который служит домашним сервером для шести компьютеров. Мы все еще на ISDN, поскольку в широкополосном Интернете для нас нет насущной необходимости. Последние несколько месяцев я использовал NTP для еженедельной синхронизации времени на сервере. Я создал простое задание в Cron, по которому сервер соединяется с Интернетом, синхронизирует время с помощью ntpdate, а затем разрывает соединение.

Следующий шаг – синхронизировать домашние компьютеры с сервером. Я не могу использовать для этого ntpdate (это ведь не демон), у меня работает ntpd. Я наконец разобрался, как его настроить – документация к NTP выглядит как диссертация по астрофизике, а не как руководство пользователя – и действительно могу синхронизировать компьютеры с сервером, но ntpd сам пытается синхронизироваться с Интернет-серверами каждые несколько минут, а так как соединения при этом нет, то он завершается аварийно.

Как можно настроить ntpd, чтобы он синхронизировался с Интернет-сервером только в заданное время? Или можно сделать так, чтобы для синхронизации времени использовалось мое задание с ntpdate, а сам ntpd раздавал на компьютеры локальное время сервера? Мэтью Вайз


Ответ:
Дизайн большинства NTP-серверов, включая ntpd и openntpd, рассчитан на постоянное подключение к Интернету. Поддержка связи с другими серверами времени является неотъемлемой частью алгоритма их работы, что делает их бесполезными в Вашем случае.

Для обеспечения сервиса синхронизации времени с непостоянным или вообще отсутствующим Интернет-доступом создан Chrony. Он содержит две программы: chronyd, демон, раздающий клиентам локальное время сервера, и chronyc, который служит для синхронизации локального времени сервера с другими серверами времени. Последнюю версию пакета можно взять с http://chrony.sunsite.dk. Вам придется скомпилировать его из исходных текстов, но это простой процесс и он отлично описан в файле INSTALL.

Документация довольно многословная, однако простой сервер настроить очень легко. Просто поместите в /etc/chrony.conf следующие строки, заменяя nnn.nnn.nnn.nnn IP-адресом Вашего сервера:

server nnn.nnn.nnn.nnn offline
server nnn.nnn.nnn.nnn offline
server nnn.nnn.nnn.nnn offline
keyfile /etc/chrony.keys
commandkey 1
driftfile /etc/chrony.drift
allow 192.168.1

Список доступных серверов можно получить следующей командой:

netselect -s 3 pool.ntp.org

Параметр offline пресечет попытки Chrony синхронизироваться с Интернет-серверами. Команда allow задает диапазон IP-адресов, которым разрешено получать время с этого сервера. Установите пароль:

echo >/etc/chrony.keys `1 somepassword’

Теперь запустите демон с помощью init-скрипта: Ваш сервер будет раздавать компьютерам из домашней сети свое локальное время. Для корректного обновления локального времени лучше исправить Cron-задание, дописав в сценарий cron после соединения такие строки:

/usr/local/bin/chronyc <<EOF
password somepassword
online
EOF

Проделайте это еще раз после разрыва соединения, заменив online на offline. НБ


Порулить мышью

Вопрос:
У меня есть IntelliMouse с семью кнопками: 1 = левая, 2 = средняя, 3 = правая, 4 и 5 = колесо, 6 и 7 = дополнительные кнопки. Я хотел бы контролировать этими кнопками уровень громкости, а может, переключение песен в Amarok. Насколько я понимаю, все это можно сделать, исправив файл xorg.conf. Можете помочь? Тим

Ответ:
Для начала нужно убедиться, что все семь кнопок посылают события в X-сервер. Для этого запустите xev и покликайте по его окну всеми кнопками. Если нажатие распознано, Вы увидите что-то вроде этого:

ButtonRelease event, serial 31,
synthetic NO window
0x3600001,
root 0x5a, subw 0x0,
time
191458267, (86,1 1),1
root:(91,162), state 0x1 button 4, 10, same_screen YES

Если сервер не получает событий от дополнительных кнопок, отредактируйте xorg.conf. У Вас уже должна быть строка ZAxisMapping; просто поменяйте в ней две цифры последних номеров кнопок и добавьте строку Buttons, указав в ней количество кнопок. Вот как это выглядит для семикнопочной мыши:

Section «InputDevice»
Identifier «USBMouse»
Driver «mouse»
Option «Protocol» «auto»
Option «Device» «/dev/input/mice»
Option «Buttons» «7»
Option «ZAxisMapping» «6 7»
EndSection

Перезапустите X-сервер и снова попробуйте xev. Ваши дополнительные кнопки – это 4 и 5, а колесо теперь будет 6 и 7. Сопоставим мышиным событиям нужные действия. Для этого можно взять XbindKeys (http://hocwp.free.fr/xbindkeys). У XBindKeys очень простой файл конфигурации (~/.xbindkeysrc). Например, он может выглядеть вот так:

«firefox»
b:4

В данном случае при щелчке по кнопке 4 запустится Firefox. Для контроля любого KDE-приложения Вам нужно изучить DCOP (Desktop Communications Protocol). Запустите kdcop и посмотрите, какие команды принимает Amarok. Выполните эти команды из kdcop, и увидите, как их можно запустить из командной строки, скрипта или XBindKeys. Например, для перехода на следующую песню в Amarok нужно выполнить такую команду:

dcop amarok player next.

НБ


Почто-man

Вопрос:
На моем компьютере установлена Fedora Core 4, и я хотел бы знать, можно ли посылать письма из Cron-задания через запущенный Sendmail-сервер. Это спасло бы меня от запуска второй копии Sendmail. Мэтт Уэлш

Ответ:
Несмотря на то, что для работы Sendmail или Postfix в Fedora Core 4 почти не требуется редактировать файлы конфигурации, Вы можете воспользоваться ESMTP или SSMTP для отправки почты через внешний почтовый сервер. Раньше я для этого пользовался SSMTP, однако сейчас, похоже, через Yum работает только ESMTP:

# yum install esmtp
# cat > /etc/esmtprc << «EOF»
hostname = mailserver:25
mda «/usr/bin/procmail -d %T»
EOF
#

Эта простая конфигурация будет пропускать почту через сервер mailserver на 25-м порту. Рекомендую прочесть man-страницы для esmtp и esmtprc для ознакомления со всевозможными опциями.

Если Sendmail по умолчанию является MTA (запустите alternatives --display mta, чтобы это выяснить), это можно исправить, выбрав ESMTP:

# alternatives --config mta

Команда отобразит меню для выбора MTA по умолчанию.

Наконец, если Вы намерены пропускать через Sendmail даже почту для удаленных ящиков (скажем, направив выход Cron на адреса @gmail.com), убедитесь, что Вы верно отредактировали /etc/mail/access.

Как я уже говорил, вместо ESMTP можно использовать SSMTP. Он не доступен через Yum, так что Вам нужно будет установить его вручную:

# cd /root
# wget ftp://ftp.debian.org/debian/
pool/main/s/
ssmtp/ssmtp_2.61.orig.tar.gz
# tar -xzvf ssmtp_2.61.orig.tar.gz
# cd ssmtp_2.61
# make
# make install

Скрипт устроит Вам небольшой допрос и установит SSMTP-сервер в /usr/local/sbin, а файл его конфигурации (ssmtp.conf) – в /usr/local/etc/ssmtp/. Проверьте в файле конфигурации строку mail: она должна указывать на Ваш Sendmail-сервер. Для получения детальной информации запустите man ssmtp и рассмотрите пример конфигурационного файла в директории ssmtp_2.61 (содержащей исходные коды).

Так как Вы устанавливали программу не через менеджер пакетов, а вручную, нужно добавить SSMTP в список доступных MTA:

# alternatives --install /usr/sbin/
sendmail mta /usr/
local/sbin/ssmtp 10

Теперь убедитесь, что SSMTP является MTA по умолчанию:

# alternatives --config mta

Не забудьте, что если Вы хотите пропускать почту для внешних адресов, то надо соответствующим образом настроить Sendmail. КК


Бондинг

Вопрос:
У меня на компьютере под управлением Red Hat установлены две сетевые карты Ethernet, которые подключены к одному коммутатору (switch), и у меня один статический IP-адрес. Можно ли без виртуального IP настроить оба сетевых интерфейса как два параллельных пути, таким образом, чтобы в случае обрыва одной связи трафик переключался на другую? Тони

Ответ:
Да, бондинг допускает избыточность: один хост подключается к сети через два независимых пути (интерфейса). В отличие от метода с виртуальным IP-адресом, бондинг создает «плавающий» виртуальный интерфейс. Под Red Hat Вам нужно ассоциировать два физических интерфейса с одним виртуальным, ‘bond0’, при помощи стандартных файлов сетевой конфигурации. Итак, ifcfg-eth0 и ifcfg-eth1 должны содержать следующее:

/etc/sysconfig/network-scripts/ifcfg-
eth0
DEVICE=eth0
ONBOOT=yes
TYPE=Ethernet
MASTER=bond0
SLAVE=yes
/etc/sysconfig/network-scripts/ifcfg-
eth1
DEVICE=eth0
ONBOOT=yes
TYPE=Ethernet
MASTER=bond0
SLAVE=yes

Теперь создайте файл сетевого интерфейса bond0, который должен содержать что-то вроде этого:

/etc/sysconfig/network-scripts/ifcfg-
bond0
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=static
TYPE=Ethernet
IPADDR=x.y.z.a
NETMASK=x.y.z.a

Этим вы ассоциировали два физических интерфейса с одним виртуальным.

Вам нужно настроить запуск бондинга при загрузке. Для этого добавьте следующие строки в /etc/modprobe.conf

alias bond0 bonding options
bonding mode=1 miimon=100
primary=eth0
install bond0 /sbin/modprobe eth0;
/sbin/modprobe eth1; /sbin/
modprobe bonding; /bin/true

mode=1 – активный/неактивный miimon=100 – период опроса сети в миллисекундах (100мс)

Теперь загрузите модуль бондинга и перезапустите сетевой init-скрипт. Выполните следующие команды от лица суперпользователя:

# modprobe bond0
# service network restart

Последнее, что осталось сделать – обновить конфигурацию iptables и заменить упоминания о реальных интерфейсах на виртуальный. КК

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию