- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
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 и заменить упоминания о реальных интерфейсах на виртуальный. КК