Журнал LinuxFormat - перейти на главную

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

Материал из Linuxformat
Перейти к: навигация, поиск

Если вы завязли в какой-то проблеме и чтение 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 и заменить упоминания о реальных интерфейсах на виртуальный. КК


Адский RPM

Вопрос:
Я пробовал установить OpenOffice.org с DVD номера LXF74. Разархивирование z-файла с DVD не обнаружило никакого ./configure, только RPM-файлы. Используя rpm в командной строке, я обнаружил порочный круг: CORE01 требует для установки пакеты CORE02-CORE08, а пакеты CORE02–CORE08 – CORE01.

У меня дистрибутив Mandrake 9.1, установленный с CD номера LXF41. Rpm я запускал из домашней директории, в которую скопировал пакеты. Джон

Ответ:
Как Вы запускали rpm? Если Вы пытались устанавливать пакеты по очереди, то понятно, почему у Вас ничего не вышло – они зависят друг от друга. Команда rpm может разрешить эту ситуацию, но только если Вы укажете все пакеты сразу:

rpm -Uhv *.rpm

Нужно лишь позаботиться, чтобы в директории, где Вы запускаете эту команду, не было других RPM-пакетов. НБ


Примочки QuickTime

Вопрос:
Я установил SUSE 10.0 с DVD номера LXF74: система очень проста в установке и содержит бесплатный офисный пакет, однако я не смог найти подключаемый модуль QuickTime для Firefox. Пробовал Quicktime4Linux – но с тех пор, как вышел QuickTime 7, он больше не работает. На сайте Apple подразумевается, что у меня либо Windows, либо MacOS.

В любом случае, трудно поверить, что Apple не портировала модуль на Linux, ведь OS X использует ядро Linux. Если и вы не знаете альтернативного сайта с трейлерами, я оказываюсь в луже. Джефф Баркл

Ответ:
Подключаемый модуль Mplayer для Mozilla работает также и с Firefox (http://mplayerplugin.sf.net). Он позволит Вам просматривать мультимедиа-файлы прямо в браузере. И в формате QuickTime тоже – правда, не все. Множество новых трейлеров сжаты закрытым кодеком Sorensen, который не поддерживается ни одним открытым проектом – пока не будет взломан.

Есть и другой вариант: с помощью CrossOver Office (разновидность Wine) можно использовать Windows-модули в Linux-браузерах, а также запускать приложения Windows прямо из-под Linux. CrossOver Office доступен на http://www.codeweavers.сom/site/products/cxoffice. Стандартная версия стоит $39.95.

Между прочим, Mac OS X базируется не на ядре Linux, а на разновидности BSD [а если быть еще точнее – на микроядре Mach и некоторых пользовательских утилитах BSD, – прим. ред.]. НБ

Персональные инструменты
купить
подписаться
Яндекс.Метрика