|
1.
Apache
Apache поставляется с достаточно полным конфигурационным файлом по умолчанию,
но опять же необходимо улучшить некоторые аспекты, например, использовать для
Apache только один адрес. Ниже приведены параметры, которые вы должны внести в
конфигурационный файл.
Если вы не отключали поддержку ssl в /etc/make.conf перед
установкой Apache, то теперь вы должны иметь доступ к серверу с включенным SSL.
Чтобы включить ее, просто добавьте следующую строку.
Листинг 1.1: /etc/conf.d/apache |
HTTPD_OPTS="-D SSL"
|
Листинг 1.1: /etc/apache/conf/apache.conf |
#Добавьте свой IP для прослушивания
Listen 127.0.0.1
BindAddress 127.0.0.1
#Не следует использовать nobody или nogroup для каждого сервиса, запущенного
#без административных привелегий
#(просто добавляем пользователя apache с группой apache)
User apache
Group apache
#Не сообщать информацию о версии сервера
ServerSignature Off
ServerTokens Prod
|
Apache собран с параметрами --enable-shared=max и
--enable-module=all. По умолчанию это включает все модули, поэтому вы
должны закомментировать все неиспользуемые модули в разделе LoadModule
(LoadModule и AddModule). Затем перезапустите сервис, выполнив
/etc/init.d/apache restart.
Документация доступна по адресу http://www.apache.org.
1.
Bind
Документацию можно найти на сайте Internet Software
Consortium. Руководство администратора BIND 9 также доступно каталоге
doc/arm.
Новые сборочные файлы BIND поддерживают изменение корневого каталога из
коробки. После установки bind следуйте этим простым инструкциям:
Листинг 1.1: Изолирование среды BIND |
# emerge --config bind
|
1.
Djbdns
Djbdns — это реализация DNS, за обнаружение уязвимостей в которой автор
готов выплачивать деньги. Принцип работы
сильно отличается от Bind 9, однако он работает. Дополнительная информация
может быть получена на сайте http://www.djbdns.org.
1.
FTP
В общем случае использование FTP (File Transfer Protocol, протокол передачи
файлов) является плохой идеей. Этот протокол отправляет данные незашифрованными
(в том числе и пароли), прослушивает 2 порта (обычно это порты 20 и 21), и
часто злоумышленники ищут анонимный доступ для обмена варезом. Так как протокол
содержит ряд проблем безопасности, то следует использовать sftp или
HTTP. Если это невозможно, то максимально обезопасьте свои сервисы и будьте
готовы.
1.
Mysql
Если вам необходимо предоставить доступ к базе данных mysql локальным
приложениям, раскомментируйте следующую строку в /etc/mysql/my.cnf.
Листинг 1.1: Отключение доступа к сети |
skip-networking
|
Затем мы отключаем использование команды LOAD DATA LOCAL INFILE. Это
предотвратит несанкционированное чтение локальных файлов. Это также подходит
против SQL-инъекций в PHP-сценариях.
Листинг 1.1: Отключение LOAD DATA LOCAL INFILE в разделе [mysqld] |
set-variable=local-infile=0
|
Затем необходимо удалить тестовую базу данных (test) и все учетные записи за
исключением root.
Листинг 1.1: Удаление тестовой базы данных и всех ненужных пользователей |
mysql> drop database test;
mysql> use mysql;
mysql> delete from db;
mysql> delete from user where not (host="localhost" and user="root");
mysql> flush privileges;
|
Предупреждение:
Если вас уже есть настроенные учетные записи, то будьте осторожны с этими
командами.
|
Примечание:
Если вы изменяли пароли в командной строке MySQL, то всегда очищайте
~/.mysql_history и /var/log/mysql/mysql.log, так как
они сохраняют список выполненных SQL-команд с открытыми паролями.
|
1.
Proftpd
У proftpd было несколько проблем с безопасностью, но большинство из них было
исправлено. Тем не менее, неплохо внести некоторые улучшения:
Листинг 1.1: /etc/proftpd/proftpd.conf |
ServerName "My ftp daemon"
# Не показывать ident сервера
ServerIdent on "Go away"
# Упрощаем создание виртуальных пользователей
RequireValidShell off
# Использовать альтернативные файлы паролей и групп (в формате passwd)
AuthUserFile "/etc/proftpd/passwd"
AuthGroupFile "/etc/proftpd/group"
# Разрешения
Umask 077
# Таймауты и ограничения
MaxInstances 30
MaxClients 10 "Only 10 connections allowed"
MaxClientsPerHost 1 "You have already logged on once"
MaxClientsPerUser 1 "You have already logged on once"
TimeoutStalled 10
TimeoutNoTransfer 20
TimeoutLogin 20
# Все входят в изолированную оболочку
DefaultRoot ~
# Не запускать с правами администратора
User nobody
Group nogroup
# Регистрировать любые передачи
TransferLog /var/log/transferlog
# Проблемы с универсализацией имен файлов
DenyFilter \*.*/
|
Дополнительная информация может быть найдена на
http://www.proftpd.org.
1.
Pure-ftpd
Pure-ftpd является ответвлением оригинального trollftpd с модификациями
Фрэнка Денниса по части безопасности и функциональности.
Используйте виртуальных пользователей (и никогда не применяйте системные
учетные записи), включив параметр AUTH. Установите его для
-lpuredb:/etc/pureftpd.pdb и создайте пользователей при помощи команды
/usr/bin/pure-pw.
Листинг 1.1: /etc/conf.d/pure-ftpd |
AUTH="-lpuredb:/etc/pureftpd.pdb"
## Misc. Others ##
MISC_OTHER="-A -E -X -U 177:077 -d -4 -L100:5 -I 15"
|
Добавьте к переменной MISC_OTHER параметры запрета на подключение
анонимных пользователей (-E), изменения корневого каталога для всех
(-A), запрета записи и чтения файлов, начинающихся с точки
(-X), максимального периода бездействия (-I), ограничения
рекурсии (-L) и подходящего umask.
Предупреждение:
Не используйте параметры -w или -W! Если же вы хотите,
чтобы у вас был сайт с варезом, то перестаньте читать это руководство!
|
Дополнительная информация может быть найдена на
http://www.pureftpd.org.
1.
Vsftpd
Vsftpd (сокращение от very secure ftp) — это небольшой FTP-демон,
который может запускаться с настройками по умолчанию. Он прост и не имеет
множества возможностей, присущих pureftp и proftp.
Листинг 1.1: /etc/vsftpd |
anonymous_enable=NO
local_enable=YES
#read only
write_enable=NO
#enable logging of transfers
xferlog_std_format=YES
idle_session_timeout=20
data_connection_timeout=20
nopriv_user=nobody
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chrootlist
ls_recurse_enable=NO
|
Как вы можете видеть, нет возможности установить для данного сервиса
индивидуальные разрешения, но если используется настройки для анонимного
доступа, то это он не так уж плох. Иногда неплохо иметь анонимный FTP-сервер
(для доступа к открытому ПО), и vsftpd неплохо подходит для этой работы.
1.
Netqmail
Netqmail часто признается наиболее безопасным почтовым сервером. Он написан с
прицелом на безопасность (и паранойю). По умолчанию он не разрешает релей и,
начиная с 1996 года, не имеет никаких уязвимостей безопасности. Просто
наберите emerge netqmail и настройте его!
1.
Samba
Samba — это протокол, предоставляющий файлы в сетях Microsoft/Novell,
и он не должен использоваться в интернете. Его необходимо обезопасить.
Листинг 1.1: /etc/samba/smb.conf |
[global]
#Прослушивать определенный интерфейс
interfaces = eth0 10.0.0.1/32
#Использовать зашифрованные пароли
encrypt passwords = yes
directory security mask = 0700
#Разрешить трафик из подсети 10.0.0.*
hosts allow = 10.0.0.
#Включить аутентификацию
#(не используйте режим share)
security = user
#Запретить привелигерованные учетные записи
invalid users = root @wheel
#Максимальный отображаемый размер ресурса (не является ограничителем)
max disk size = 102400
#Ужесточить политики паролей
min password length = 8
null passwords = no
#Использовать PAM (если была добавлена поддержка)
obey pam restrictions = yes
pam password change = yes
|
Проверьте, что для каждого ресурса выставлены правильные разрешения и не
забудьте прочитать документацию.
Теперь перезапустите сервер и добавьте пользователей, которым необходим доступ
к этому сервису. Это можно сделать с помощью команды
/usr/bin/smbpasswd с параметром -a.
1.
ssh
Для OpenSSH необходимо лишь одно улучшение — использование более
надежного механизма аутентификации, основанного на шифровании с использованием
открытого ключа. Очень много сайтов (например,
http://www.sourceforge.net, http://www.php.net и
http://www.apache.org) было подвержено несанкционированному доступу
из-за пустых или слабых паролей.
Листинг 1.1: /etc/ssh/sshd_config |
#Включаем только версию 2
Protocol 2
#Отключаем вход администратора. Пользователи могут использовать su для входа
PermitRootLogin no
#Включаем аутентификацию по открытому ключу
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
#Отключаем .rhost и обычную аутентификацию по паролю
HostbasedAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no
#Разрешаем подключаться только пользователям из групп wheel или admin
AllowGroups wheel admin
#Из этих групп разрешаем подключаться только следующим пользователям
#@<domainname> не обязательна, но заменяет старую директиву
#AllowHosts
AllowUsers kn@gentoo.org bs@gentoo.org
#Вход в систему
SyslogFacility AUTH
LogLevel INFO
ListenAddress 127.0.0.1
|
Также проверьте, что в конфигурационном файле нет параметра UsePAM yes,
который перекрывает механизм аутентификации с помощью открытого ключа.
Теперь создайте для каждого пользователя ключ (на компьютере, с которого они
будут регистрироваться) с помощью следующей команды:
Листинг 1.1: Создание пар ключей DSA |
# /usr/bin/ssh-keygen -t dsa
|
И введите пароль.
Листинг 1.1: Вывод ssh-keygen |
Generating public/private dsa key pair.
Enter file in which to save the key (/home/kn/.ssh/id_dsa):[Press enter]
Created directory '/home/kn/.ssh'.
Enter passphrase (empty for no passphrase): [Enter passphrase]
Enter same passphrase again: [Enter passphrase again]
Your identification has been saved in /home/kn/.ssh/id_dsa.
Your public key has been saved in /home/kn/.ssh/id_dsa.pub.
The key fingerprint is:
07:24:a9:12:7f:83:7e:af:b8:1f:89:a3:48:29:e2:a4 kn@knielsen
|
После этого в каталоге ~/.ssh/ появятся два файла с названием
id_dsa и id_dsa.pub. Файл id_dsa
является секретным ключом и должен оберегаться от других. Другой файл,
id_dsa.pub, должен быть размещен на каждом сервере, к которому
необходим доступ. Добавьте этот ключ в каталог
~/.ssh/authorized_keys в домашнем каталоге пользователя. Теперь
пользователь должен иметь доступ к подключению:
Листинг 1.1: Adding the id_dsa.pub file to the authorized_keys file |
$ scp id_dsa.pub other-host:/var/tmp/currenthostname.pub
$ ssh other-host
password:
$ cat /var/tmp/currenthostname.pub >> ~/.ssh/authorized_keys
|
Теперь ваши пользователи должны тщательно оберегать свои секретные ключи.
Поместите их на сменный носитель, который они будут всегда носить с собой, или
спрячьте их на рабочих станциях пользователей (поместите их под правила
(паролей)).
Для дальнейшей информации посетите веб-сайт OpenSSH.
1.
Использование xinetd
xinetd является заменой inetd (которого в Gentoo нет), демона сетевых
сервисов. Он поддерживает контроль доступа, основанный на адресе удаленного
узла и времени доступа. Он также предоставляет расширенные возможности
регистрации событий, включая время запуска сервера, адрес удаленного узла, имя
удаленного пользователя, время работы сервера и выполненные запросы.
Как в случае с другими сервисами, важно создать хорошую конфигурацию по
умолчанию. Но так как xinetd запускается с правами администратора и
поддерживает протоколы, о работе которых вы можете не знать, рекомендуется не
использовать его. Но если вы все равно хотите использовать его, то вы можете
укрепить его безопасность:
Листинг 1.1: Установка xinetd |
# emerge xinetd tcp-wrappers
|
И отредактируйте конфигурационный файл:
Листинг 1.1: /etc/xinetd.conf |
defaults
{
only_from = localhost
instances = 10
log_type = SYSLOG authpriv info
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
}
# Это установит работу pserver (cvs) через xinetd со следующими:
# настройками:
# максимум 10 обработчиков (10 подключений одновременно)
# использовать только TCP
# использовать пользователя cvs для запуска сервиса
# использовать только 1 IP
# разрешать доступ с 10.0.0.*
# разработчики могут пользоваться cvs только с 8 до 17 часов
# использовать упаковщики tpcd (контроль доступа через
# /etc/hosts.allow и /etc/hosts.deny)
# max_load для компьютера 1.0
# Отключающий флаг для настроек по умолчанию, я предпочитаю,
# чтобы он был отключен
service cvspserver
{
socket_type = stream
protocol = tcp
instances = 10
protocol = tcp
wait = no
user = cvs
bind = 10.0.0.2
only_from = 10.0.0.0
access_times = 8:00-17:00
server = /usr/sbin/tcpd
server_args = /usr/bin/cvs --allow-root=/mnt/cvsdisk/cvsroot pserver
max_load = 1.0
log_on_failure += RECORD
disable = no
}
|
Для большей информации см. man 5 xinetd.conf.
1.
X
По умолчанию Xorg настроен функционировать к качестве Xserver. Это может быть
опасным, так как X использует незашифрованные TCP-соединения и прослушивает
подключения xclient.
Важно:
Если вам не нужен этот сервис, отключите его!
|
Но если вам требуется использовать рабочую станцию в качестве X-сервера,
используйте команду /usr/X11R6/bin/xhost с большой осторожностью. Эта
команда позволит клиентам других узлов подключаться к вашему экрану. Это может
быть полезно при необходимости запуска приложения X с другого компьютера, и это
возможно лишь через сеть, но это может быть использовано и злоумышленником.
Синтаксис этой команды — /usr/X11R6/bin/xhost +hostname.
Предупреждение:
Не используйте возможность xhost +! Эта возможность позволит любому
клиенту подключиться к X-серверу и взять контроль над ним. Если злоумышленник
может получить доступ к X, то сможет регистрировать нажатия на клавиши, что
позволит ему взять контроль над вашим компьютером. Если вы все же используете
ее, то всегда указывайте узел.
|
Более безопасным решением является полное отключение этой возможности при
старте X-сервера с помощью startx -- -nolisten tcp или отключение ее
навсегда в файлах конфигурации.
Листинг 1.1: /usr/X11R6/bin/startx |
defaultserverargs="-nolisten tcp"
|
Вы должны защитить startx, чтобы не допустить его перезаписи при
установке новой версии Xorg. Добавьте следующую строку в
/etc/make.conf:
Листинг 1.1: /etc/make.conf |
CONFIG_PROTECT_MASK="/usr/X11R6/bin/startx"
|
Если вы используете графический диспетчер входа в систему, вам понадобится
другой подход.
Для gdm (Gnome Display Manager)
Листинг 1.1: /etc/X11/gdm/gdm.conf |
[server-Standard]
command=/usr/X11R6/bin/X -nolisten tcp
|
Для xdm (X Display Manager) и kdm (Kde Display Manager)
Листинг 1.1: /etc/X11/xdm/Xservers |
:0 local /usr/bin/X11/X -nolisten tcp
|
|