Tips & tricks

This article is protected by the Open Publication License, V1.0 or later. Copyright © 2005 by Red Hat, Inc.
Original article: http://www.redhat.com/magazine/010aug05/departments/tips_tricks/

Red Hat Magazine, выпуск 10, август 2005

Перевод: © Иван Песин

Служба поддержки пользователей Red Hat получает технические вопросы со всего мира. Специалисты Red Hat ежедневно добавляют полученные вопросы и ответы на них в базу знаний Red Hat Knowledgebase. Доступ к ней возможен при наличии учетной записи на сайте redhat.com. Каждый месяц Red Hat Magazine знакомит читателей с Red Hat Knowledgebase, публикуя несколько самых свежих вопросов и ответов.

Советы от RHCE

Возможно ли удаленно работать с рабочим столом?

Да. В Red Hat Enterprise Linux 4 оболочка GNOME включает встроенный vnc-подобный сервис vino. Vino позволяет vnc-клиенту удаленно управлять рабочим столом GNOME зарегистрированного пользователя и поддерживает подключения в режиме зрителя. Для активации этой функциональности, соответствующий пользователь должен зарегистрироваться в системе, выбрать Applications --> Preferences --> Remote Desktop и отметить пункт Allow other users to view your desktop. Нажмите Close и ву а ля, удаленный vnc-клиент может подключаться к рабочему столу GNOME текущего пользователя, указав дисплей :0 .



Как мне настроить сервер NFS, находящийся за пакетным фильтром, для работы с внешними клиентами?

Проблема:
Номера портов, через которые работает сервис NFS, задаются сервисом portmap. Побочным эффектом этого является то, что номера портов определяются случайным образом. Таким образом, порты по которым работает сервис NFS меняются при каждом его перезапуске. Это представляет определенную проблему для работы сервера NFS, находящегося за пакетным фильтром, который разрешает доступ только к конкретным портам системы.

Решение:
Первым шагом решения этой проблемы будет присвоение постоянного номера порта каждому из сервисов NFS (rquotad, mountd, statd и lockd). Не смотря на то, что эти сервисы могут использовать любые неиспользуемые порты выше 1024, рекомендуется просмотреть файл /etc/services и найти незарезервированный диапазон портов. В наших примерах используется диапазон 10000-10005.

Большинство портов, используемых сервисами NFS, настраиваются в файле /etc/sysconfig/nfs. Вам будет необходимо создать его, если он не существует. Содержимое файла должно быть приблизительно таким:

# NFS port numbers
STATD_PORT=10002
STATD_OUTGOING_PORT=10003
MOUNTD_PORT=10004
RQUOTAD_PORT=10005

Сервис lockd настраивается по-другому, потому что он представляет собой модуль ядра. Чтобы задать номер порта для lockd, добавьте в конец файла /etc/modprobe.conf следующую строку:

options lockd nlm_tcpport=10000 nlm_udpport=10001

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

После изменения конфигурации, вы можете посмотреть командой rpcinfo -p <hostname> на каких портах работают сервисы :

 program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100021 1 udp 10001 nlockmgr
100021 3 udp 10001 nlockmgr
100021 4 udp 10001 nlockmgr
100021 1 tcp 10000 nlockmgr
100021 3 tcp 10000 nlockmgr
100021 4 tcp 10000 nlockmgr
100024 1 udp 10002 status
100024 1 tcp 10002 status
100011 1 udp 10005 rquotad
100011 2 udp 10005 rquotad
100011 1 tcp 10005 rquotad
100011 2 tcp 10005 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100005 1 udp 10004 mountd
100005 1 tcp 10004 mountd
100005 2 udp 10004 mountd
100005 2 tcp 10004 mountd
100005 3 udp 10004 mountd
100005 3 tcp 10004 mountd

Теперь используемые порты не будут меняться при перезапуске NFS. Ниже приведен список портов, которые должны быть открыты в пакетном фильтре:

Теперь вы можете открыть порты в пакетном фильтре, чтобы клиенты могли монтировать сетевые тома. Если вы используете iptables, то можно использовать нижеприведенные команды, для разрешения доступа к портам. Обратите внимание, что это лишь пример. В вашем конкретном случае, команды могут отличаться:

iptables -A INPUT -p tcp -m tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 111 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 2049 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 2049 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 10001 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 10002:10005 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 10002:10005 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -j REJECT --reject-with icmp-port-unreachable
iptables -A OUTPUT -p tcp -m tcp --dport 111 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 111 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 2049 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 2049 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 10000 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 10001 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 10002:10005 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 10002:10005 -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -j REJECT --reject-with icmp-port-unreachable

Как отключить тачпад Synaptics на время ввода с клавиатуры?

Пакет Synaptics включает в себя программу syndaemon. Она отключает тачпад на время ввода с клавиатуры. После небольшой задержки по окончанию ввода с клавиатуры, тачпад будет вновь активирован.

Для запуска демона, откройте командный интерпретатор и введите:

syndaemon -d

Эта команда запускает программу в режиме демона. Программа будет работать в фоновом режиме, пока процесс syndaemon не будет завершен или система не будет перезагружена.

За дополнительной информацией о программе syndaemon обратитесь к странице руководства syndaemon:

man syndaemon

Как определить какие RPM-пакеты и когда были установлены в системе?

Есть несколько способов определения пакетов, установленных в системе:

Однако, оба метода не выводят даты установки пакета. Чтобы получить эту информацию, нужно указать команде rpm ключ --last. Например:

rpm -qa --last | less 

Ключ --last сортирует список пакетов в порядке времени установки так, что самые свежие пакеты оказываются первыми в списке. 

Как с помощью chkconfig разрешить выполнение загрузочного скрипта, поддерживающего параметры start, stop и status?

Не все скрипты, поддерживающие параметры start/stop/status могут управляться с помощью chkconfig. Скрипт должен отвечать следующим требованиям:

  1. Первая строка определяет командный интерпретатор для данного скрипта.
  2. Вторая строка -- просто пустой комментарий.
  3. Третья строка задает уровни выполнения, на которых должен запускаться скрипт, и приоритет запуска/останова.
  4. Четвертая строка должна содержать комментарий, описывающий данный сервис. При необходимости, описание может занимать несколько (рекомендуется) строк. Для переноса строк используйте символ обратной косой черты (\).

Ниже, в качестве примера, приведен скрипт /etc/init.d/smb:

#!/bin/sh
#
# chkconfig: - 91 35
# description: Starts and stops the Samba smbd and nmbd daemons \
# used to provide SMB network services.

Приоритет запуска/останова (в примере -- 91 и 35, соответственно) является важным параметром для сервисов, которые зависят от других сервисов. Например, сервис portmap должен запускаться перед nfs. Если скрипт не зависит от других сервисов, вы можете запускать его после полной загрузки системы. В последнем случае, достаточно вызвать скрипт из файла /etc/rc.d/rc.local. Для этого, выполните команду:

echo /etc/init.d/yourscript >> /etc/rc.d/rc.local

Установите на скрипт атрибут выполнения. Для этого введите:

chmod 0755 /etc/init.d/yourscript

Как сделать так, чтобы при загрузке системы не появлялся маршрут zeroconf (169.254.0.0 / 255.255.0.0)?

Проблема:

Каждый раз при загрузке системы активируется маршрут zeroconf (169.254.0.0). Вручную его можно удалить остановив пакетный фильтр и удалив командой route маршрут 169.254.0.0 / 255.255.0.0.

Ниже приведен пример вывода команды route с активным маршрутом zeroconf:

# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.15.50.0 * 255.255.252.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0

Решение:

Чтобы запретить активацию маршрута zeroconf во время загрузки системы, откройте в редакторе файл /etc/sysconfig/network и добавьте в его конец переменную NOZEROCONF:

NETWORKING=YES
HOSTNAME=localhost.localdomain
NOZEROCONF=yes

Дополнительная информация:

Узнать больше о zeroconf можно по адресу http://www.zeroconf.org/.

Что такое процесс "зомби" (defunct или zombie) в выводе команд ps и top?

Процесс "зомби" -- это процесс, который больше не существует. Он обозначен символом "Z" (Zombie) в выводе команды ps. Такой процесс уже закончил свое выполнение с помощью системного вызова  exit(2), но по какими-либо причинам не получил вызова wait(2) от своего родителя.

Процесс "зомби" не занимает никаких системных ресурсов, кроме записи в таблице процессов, которая поддерживается операционной системой. Вы спокойно можете игнорировать такие процессы. Они будут удалены из таблицы процессов, когда их родитель закончит свое выполнение или система будет перезагружена.

Как написать скрипт, который будет запускать и останавливать сервис на разных уровнях выполнения и взаимодействовать с chkconfig?

Чтобы скрипт мог взаимодействовать с утилитой chkconfig и автоматической системой запуска/останова сервисов на разных уровнях выполнения, он должен соответствовать двум требованиям.

Первое: он должен содержать секцию в комментариях, которая позволяет утилите chkconfig управлять данным скриптом. Вот пример:

#!/bin/bash
#
# chkconfig: 345 10 90
# description: This is where you put a description of your service

Число 345 после директивы chkconfig обозначает уровни выполнения, на которых данный сервис будет выполнятся по-умолчанию. В нашем примере, это будут уровни 3, 4 и 5.

Число 10 определяет приоритет запуска. Чем меньше число, тем выше приоритет, и тем раньше сервис будет запущен. Число 90 задает приоритет останова. Чем меньше число, тем выше приоритет, и тем раньше сервис будет остановлен при смене уровней выполнения.

Второе: скрипт должен поддерживать параметры командной строки "start" и "stop". При запуске на необходимом уровне выполнения, скрипт будет вызываться с параметром "start", а при останове -- с параметром "stop". При запуске скрипт должен создавать файл-блокировку в каталоге  /var/lock/subsys/. Если это не будет сделано, скрипт будет автоматически запускаться, но не будет автоматически останавливаться. Реализовать это можно следующим образом:

start() {
...
touch /var/lock/subsys/servicename

}

stop() {
...
rm -f /var/lock/subsys/servicename
}

После того, как вы создали скрипт, который отвечает этим двум требованиям, скопируйте его в каталог /etc/init.d/ и выполните команду:

chkconfig --add servicename

Эта команда регистрирует сервис и создает необходимые ссылки в соответствующих каталогах rcX.d. Теперь вы можете администрировать этот сервис с помощью команды chkconfig.