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/006apr05/departments/tips_tricks/

Red Hat Magazine, выпуск 6, апрель 2005

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

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

Этот выпуск содержит статьи по безопасности, в частности, рассматриваются вопросы внутренней безопасности Red Hat Enterprise Linux 4. Мы понимаем, что невозможно дать ответы на все ваши вопросы по безопасности в одном выпуске, но мы постарались сделать это хотя бы для некоторых из них.

Советы от RHCE

Создание терминалов с помощью screen

Screen -- это полезная утилита, которую я открыл для себя несколько лет назад, и которой продолжаю пользоваться по сей день. Она представляет собой терминальный мультиплексор, который работает как полноэкранный менеджер окон для текстовых терминалов. Проще говоря, screen позволяет открывать несколько терминалов в пределах одного соединения.

Вы можете удивиться: что в этом полезного, если в Red Hat по-умолчанию настроено шесть консолей? В качестве примера, представьте, что доступна лишь одна консоль, как в однопользовательском режиме. Другим примером может служить подключение к удаленной системе по SSH или модему. Вместо того, чтобы открывать много соединений, можно запустить screen.

Screen может наблюдать за терминалами и выдавать сообщение в случае обнаружения активности. Вы можете использовать общий буфер обмена между сессиями. Кроме того, вы можете прокручивать назад окно с выводом каждой сессии.

Думаю, что вы не раз запускали на работе длительные процессы, например, компиляцию ядра. Если вы запустите такой процесс в screen, то потом вы можете выйти из screen, отправиться домой, соединиться по ssh со своей офисной машиной и опять переподключится к screen. А запущенный еще на работе процесс, будет все также непрерывно выполняться. Вы можете по желанию подключаться и отключаться от screen, но запущенные в нем процессе будут беспрерывно выполняться.

Утилита screen устанавливается из rpm-пакета screen. В вашей системе Red Hat Enterprise Linux вы можете установить эту утилиту, введя команду up2date screen. Несколько важных клавиатурных комбинаций, которые стоит запомнить: Ctrl-A является управляющим символом для screen. После нажатия Ctrl-A вы должны нажать клавишу, соответствующую необходимой функции. Для того, чтобы отобразить список доступных клавиатурных комбинаций, нажмите Ctrl-A, затем ?. Не забудьте просмотреть страницу руководства для получения детальной информации.

В следующий раз, когда вам понадобятся несколько сессий на одном соединении, не забывайте об этой ценной утилите!

Как мне проверить какие из портов прослушиваются?

После настройки сетевых сервисов важно обратить внимание, какие из портов действительно прослушиваются на системных сетевых интерфейсах. Любой открытый порт может свидетельствовать о вторжении.

Есть два основных подхода к получению информации о прослушиваемых портах. Менее надежный способ заключается в опросе сетевого стека, например командами netstat -an и lsof -i. Эти программы не подключаются к машине по сети, а опрашивают систему на предмет процессов, прослушивающих порты. Потому, нападающие часто стараются подменить их, чтобы они не выводили информацию о некоторых процессах, которые несанкционировано запущены и прослушивают какой-либо порт.

Более надежный способ проверки открытых портов -- применение сканера, например nmap.

Следующая команда определяет открытые TCP-порты:

nmap -sT -O localhost

Вывод команды выглядит приблизительно так:

Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
Interesting ports on localhost.localdomain (127.0.0.1):
(The 1596 ports scanned but not shown below are in state: closed)
Port State Service
22/tcp open ssh
111/tcp open sunrpc
515/tcp open printer
834/tcp open unknown
6000/tcp open X11
Remote OS guesses: Linux Kernel 2.4.0 or Gentoo 1.2 Linux 2.4.19 rc1-rc7)
Nmap run completed -- 1 IP address (1 host up) scanned in 5 seconds

Мы видим, что в системе запущен portmap, из-за сервиса sunrpc. Но еще мы видим непонятный сервис на порту 834. Чтобы проверить, есть ли данный порт в списке стандартных сервисов, вводим:

cat /etc/services | grep 834

Команда не возвращает никаких результатов, то есть, не смотря на то, что порт находится в зарезервированном диапазоне (от 0 до 1023) и требует для открытия привилегий пользователя root, он не связан ни с каким стандартным сервисом.

Следующим действием будет получение информации от команд netstat и lsof. Для проверки порта 834 командой netstat введите:

netstat -anp | grep 834

Команда выдала следующую информацию:

tcp 0 0 0.0.0.0:834 0.0.0.0:* LISTEN 653/ypbind

Наличие открытого порта в выводе команды netstat успокаивает, поскольку злоумышленник, тайно открывающий порт на взломанной системе, скорее всего не даст обнаружить это такой командой. Параметр -p включает в вывод идентификатор процесса (PID), который открыл порт. В данном случае, это процесс ypbind (NIS) -- сервис RPC, управляемый portmap.

Команда lsof выдаст аналогичную информацию, поскольку умеет связывать открытые порты с процессами:

lsof -i | grep 834

Ниже приведен соответствующий вывод команды:

ypbind 653 0 7u IPv4 1319 TCP *:834 (LISTEN)
ypbind 655 0 7u IPv4 1319 TCP *:834 (LISTEN)
ypbind 656 0 7u IPv4 1319 TCP *:834 (LISTEN)
ypbind 657 0 7u IPv4 1319 TCP *:834 (LISTEN)

Рассмотренные утилиты позволяют получить много данных о состоянии выполняемых в системе сервисов. Они гибки и предоставляют ценную информацию о сетевых сервисах и конфигурации. Потому крайне рекомендуется ознакомиться с руководствами по командам lsof, netstat, nmap и аналогичным.

Как мне запретить непосредственную регистрацию пользователя root по SSH?

Вишал Гайквад (Vishal Gaikwad)

Чтобы запретить непосредственную регистрацию пользователя root, откройте в редакторе файл /etc/ssh/sshd_config и найдите строку :

 
#PermitRootLogin yes

Замените yes на no и уберите символ комментария в начале строки:

 
PermitRootLogin no

Перезапустите сервис sshd:

service sshd restart

Также рекомендуется защитить систему, ограничив доступ пользователей к команде su. Обратитесь к статьям Red Hat Knowledgebase по ограничению доступа к команде su.

Доступ к каким сайтам и к каким портам я должен открыть в фаерволле для работы сервисов Red Hat Update Agent (up2date) и Red Hat Network (RHN)?

Майкл Кэрей (Michael Kearey)

Сервис Red Hat Network (RHN) хостится по адресу xmlrpc.rhn.redhat.com. Это конфигурация по-умолчанию, и вам не нужно ничего менять, если только вы не используете Red Hat Network Satellite.

Чтобы проверить, какой сервер ваша система настроена использовать, введите в командной строке:

 up2date-nox --configure

Ниже приведен пример вывода команды:

0. debug No
1. useRhn Yes
2. rhnuuid 578918ea-cb1c-11d8-8f02-814df2323483
3. isatty Yes
4. showAvailablePacka No
5. networkSetup Yes
6. retrieveOnly No
7. enableRollbacks No
8. noSSLServerURL http://xmlrpc.rhn.redhat.com/XMLRPC
9. pkgSkipList ['kernel*']
10. storageDir /var/spool/up2date
11. adminAddress ['root@localhost']
12. noBootLoader No
13. serverURL https://xmlrpc.rhn.redhat.com/XMLRPC
14. fileSkipList []
15. versionOverride
16. sslCACert /usr/share/rhn/RHNS-CA-CERT
17. noReplaceConfig Yes
18. useNoSSLForPackage No
19. systemIdPath /etc/sysconfig/rhn/systemid
20. enableProxyAuth No
21. retrieveSource No
22. disallowConfChange ['noReboot', 'sslCACert', 'useNoSSLForPackages', 'noSSLSe
23. headerFetchCount 10
24. networkRetries 5
25. pkgsToInstallNotUp ['kernel', 'kernel-modules']
26. enableProxy No
27. proxyPassword
28. updateUp2date Yes
29. keepAfterInstall No
30. proxyUser
31. removeSkipList ['kernel*']
32. useGPG Yes
33. gpgKeyRing /etc/sysconfig/rhn/up2date-keyring.gpg
34. httpProxy
35. headerCacheSize 40
36. forceInstall No
37. noReboot No

Enter number of item to edit :

Позиции под номерами 8 и 13 — noSSLServerURL и serverURL — определяют сервера, используемые up2date.

Можно узнать сервера и другим способом. Откройте файл /etc/sysconfig/rhn/up2date и найдите строки, содержащие noSSLServerURL и serverURL:

 
...
noSSLServerURL=http://xmlrpc.rhn.redhat.com/XMLRPC
...
serverURL=https://xmlrpc.rhn.redhat.com/XMLRPC
...

Для корректного функционирования RHN и up2date фаерволл должен разрешать доступ к:

Кроме того, чтобы иметь доступ к веб-сайту Red Hat Network (RHN), должны быть разрешены соединения к:

Как запретить возможности завершения и перезагрузки системы не-root пользователям?

Мэризол Мартинез (Marizol Martinez)

Чтобы запретить не-root пользователям возможность использования команд shutdown/reboot/halt:

  1. В файле /etc/X11/gdm/gdm.conf замените строку:

    SystemMenu=true

    на

    SystemMenu=false
  2. В файле /etc/inittab замените строку:

    ca::ctrlaltdel:/sbin/shutdown -t3 -r now

    на

    ca::ctrlaltdel:echo <Сообщение, что перезагрузка невозможна>
  3. В каталоге /etc/security/console.apps/ удалите файлы reboot, poweroff и halt.

  4. Удалите файл /usr/bin/poweroff.

Для удаления файлов вы можете пользоваться командой rm. Например: rm /usr/bin/poweroff.

Как мне настроить Sendmail использовать шифрование SSL при отправлении/получении почты?

Брэдфорд Хинсон (Bradford Hinson)

Sendmail может быть настроен на шифрование почты с помощью SSL при отправлении и получении сообщений. Ниже описаны необходимые для этого изменения в конфигурации Sendmail.

Во-первых, SSL требует наличия сертификата на сервере. Он может быть получен от компаний, которые выдают цифровые сертификаты, либо создан локально. Для создания SSL-сертификата, выполните команды:

cd /usr/share/ssl/certs
make sendmail.pem

В ответ на предложение введите соответствующую информацию об имени компании, стране, и т.п. Далее, раскомментируйте в файле /etc/mail/sendmail.mc, удалив dnl, следующие строки:

...
define(`confCACERT_PATH',`/usr/share/ssl/certs')
define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')
define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem')
define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem') ...
DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')

Перезапустите Sendmail командой:

service sendmail restart

После этого безопасный SMTP будет доступен для приема и отправки почты на порту 465 с помощью SSL. Чтобы активировать безопасные сервисы IMAP/POP3, выполните:

chkconfig pop3s on
chkconfig imaps on

Безопасный сервис POP3 работает на порту 995, а IMAP -- на 993. Сервер теперь настроен на использование SSL при отправки и приеме электронной почты. При конфигурировании клиента электронной почты, укажите необходимость использования безопасного соединения (SSL) всегда и при приеме, и при передаче почты.

Как мне задать список пользователей, которым разрешена регистрация по SSH?

Майкл Нэполис (Michael Napolis)

Одним из преимуществ PAM (Pluggable Authentication Module) является возможность ограничения числа сетевых пользователей, имеющих доступ к определенному сервису, на основе списка. Например, с помощью PAM можно задать ограничения на SSH-подключения.

Добавьте в файл /etc/pam.d/sshd строку:

auth required /lib/security/pam_listfile.so onerr=fail item=user sense=allow file=/etc/sshd_users

Эта директива разрешает регистрацию пользователя через sshd, если его имя присутствует в файле /etc/sshd_users. Опции имеют следующие значения:

С указанной строкой, файл /etc/pam.d/sshd будет выглядеть приблизительно так:

#%PAM-1.0
auth required pam_stack.so service=system-auth
auth required pam_nologin.so
auth required pam_listfile.so onerr=fail item=user
sense=allow file=/etc/sshd_users
account required pam_stack.so service=system-auth
password required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth
session required pam_limits.so
session optional pam_console.so

Теперь вы можете добавить в файл /etc/sshd_users необходимых пользователей. Каждое имя пользователя должно быть указано отдельной строкой.

Как должен быть настроен фаерволл, чтобы я мог использовать NTP (Network Time Protocol)?

Джошуа Вулф (Joshua Wulf)

Для использования клиента или сервера NTP (Network Time Protocol) вам нужно разрешить входящий и исходящий трафик на порту 123 для всех клиентов и серверов, с которыми общается ваша система. Скрипт запуска сервиса NTP должен автоматически модифицировать настройки фаервола. Вам остается лишь убедится, что все промежуточные точки между клиентом и сервером пропускают трафик на 123 порту.