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 получает технические вопросы со всего мира. Специалисты Red Hat ежедневно добавляют полученные вопросы и ответы на них в базу знаний Red Hat Knowledgebase. Доступ к ней возможен при наличии учетной записи на сайте redhat.com. Каждый месяц Red Hat Magazine знакомит читателей с Red Hat Knowledgebase, публикуя несколько самых свежих вопросов и ответов.
Этот выпуск содержит статьи по безопасности, в частности, рассматриваются вопросы внутренней безопасности Red Hat Enterprise Linux 4. Мы понимаем, что невозможно дать ответы на все ваши вопросы по безопасности в одном выпуске, но мы постарались сделать это хотя бы для некоторых из них.
Screen
-- это полезная утилита, которую я
открыл для себя
несколько лет назад, и которой продолжаю пользоваться по сей день.
Она представляет собой
терминальный мультиплексор, который работает как полноэкранный
менеджер окон для текстовых терминалов. Проще говоря, screen
позволяет открывать несколько терминалов в пределах одного соединения.
Вы можете удивиться: что в этом полезного, если в Red
Hat по-умолчанию настроено шесть консолей? В качестве примера, представьте,
что доступна лишь одна консоль, как в однопользовательском режиме.
Другим примером может служить подключение к удаленной системе
по SSH или модему. Вместо того, чтобы открывать много
соединений,
можно запустить screen
.
Screen
может наблюдать за терминалами и
выдавать сообщение
в случае обнаружения активности. Вы можете использовать общий буфер
обмена между сессиями. Кроме того, вы можете прокручивать назад окно с выводом каждой сессии.
Думаю, что вы не раз запускали на работе длительные процессы, например, компиляцию ядра. Если вы запустите такой процесс в screen
, то потом вы можете выйти из screen
,
отправиться домой, соединиться по ssh со своей офисной машиной и опять переподключится к screen
.
А запущенный еще на работе процесс, будет все также непрерывно
выполняться. Вы можете по желанию подключаться и отключаться от screen
, но запущенные в нем процессе будут беспрерывно выполняться.
Утилита screen
устанавливается из rpm-пакета screen
. В вашей системе Red Hat Enterprise Linux вы можете установить эту утилиту, введя команду up2date
.
Несколько важных клавиатурных комбинаций, которые стоит запомнить: Ctrl-A является управляющим символом для screen
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, откройте в редакторе файл /etc/ssh/sshd_config
и найдите
строку :
#PermitRootLogin yes
Замените yes на no и уберите символ комментария в начале строки:
PermitRootLogin no
Перезапустите сервис sshd:
service sshd restart
Также рекомендуется защитить систему, ограничив доступ
пользователей к команде su
.
Обратитесь к статьям Red
Hat Knowledgebase
по ограничению доступа к команде su
.
Сервис 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 пользователям возможность использования команд shutdown/reboot/halt:
В файле /etc/X11/gdm/gdm.conf
замените строку:
SystemMenu=true
на
SystemMenu=false
В файле /etc/inittab
замените строку:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
на
ca::ctrlaltdel:echo <Сообщение, что перезагрузка невозможна>
В каталоге /etc/security/console.apps/
удалите
файлы reboot
, poweroff
и halt
.
Удалите файл /usr/bin/poweroff
.
Для удаления файлов вы можете пользоваться командой rm
. Например: rm /usr/bin/poweroff
.
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) всегда и при приеме, и при передаче почты.
Одним из преимуществ 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
.
Опции имеют следующие значения:
onerr=fail
— этот параметр не даст успешно пройти тест, если произойдет
ошибка (указанный файл не найден или в файле обнаружена некорректная
строка). В результате пользователю будет отказано в регистрации через sshd
.
Другим возможным значением параметра onerr
является succeed
.item=user
— означает, что мы проверяем имя пользователя.sense=allow
— если
пользователь найден в заданном файле, пройти этот тест. Это разрешит
регистрацию пользователя, если пройдут также все другие тесты. Другим
возможным значением параметра sense
является deny
.
file=/etc/sshd_users
—
задает файл, содержащий список имен пользователей (по одному имени
на строку), которым разрешена регистрация через sshd
.С указанной строкой, файл /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) вам нужно разрешить входящий и исходящий трафик на порту 123 для всех клиентов и серверов, с которыми общается ваша система. Скрипт запуска сервиса NTP должен автоматически модифицировать настройки фаервола. Вам остается лишь убедится, что все промежуточные точки между клиентом и сервером пропускают трафик на 123 порту.