Супер сервер (super server) - сервер, прослушивающий сетевые соединения вместо другого сервера, и передающий ему управление, если соединение устанавливается. Использование супер севрера может быть удобно, если он управляет несколькими серверами, т.к. это уменьшает нагрузку на управляемые серверы и позволяет централизованно управлять настройками безопасности. Наиболее популярные супер серверы inetd и xinetd.
Настройки inet.d в файле /etc/inetd.conf и директории /etc/inetd.d
Пример настройки для ftp сервера:
ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.ftpd -l
Данная строка состоит из следующих полей:
-имя службы
-тип сокета: stream - надежная двунаправленная передача, dgram - менее надежная передача с меньшим количеством служебной информации, raw - сырой сокет
-протокол - как правило tcp или udp
-wait/no wait - для сокетов типа dgram эта запись определяет поведение сервера: подключиться к клиенту и освободить сокет (no wait) или обработать все пакеты и отключиться по таймауту (wait). Для других типов сокетов следует указывать nowait.
-пользователь - пользователь от имени которого запускается сервер. Всегда, когда это возможно, серверы следует запускать от имени непривилегированного пользователя.
-имя сервера - в примере это /usr/sbin/tcpd то есть исполняемый файл tcp-wrapper'а
-параметры - все значения указанные после имени сервера являются параметрами, передаваемыми серверу. Если используется tcp-wrapper ему в качестве параметра передается имя реального сервера, в примере это /usr/sbin/in.ftpd
Чтобы закомментировать строку следует использовать символ "#".
После вненесиня настроек в /etc/inetd.conf следует перезапустить inetd: /etc/init.d/inetd restart (reload)
Следует отключить в настройках inetd все серверы, кроме необходимых.
inetd вместо того, чтобы напрямую вызывать сервер, вызывает tcpd, который проверяет разрешено ли клиенту подключаться к серверу, и, если разрешено, вызывает сервер. TCP wrapper настроаивается с помощью файлов /etc/hosts.allow и /etc/hosts.deny
/etc/hosts.allow - доступ разрешен всем перечисленным хостам и запрещен всем остальным
/etc/hosts.deny - доступ запрещен всем перечисленным хостам и разрешен всем остальным
Если хост указан в обоих файлах, возможность доступа определяет /etc/hosts.allow
Синтаксис:
daemon-list : client-list
Для списка клиентов можно использовать: точку(.), чтобы обозначить сеть, например 192.168.7. обозначает 192.168.7/24, имена хостов, доменов (например: luna.edu), а также ключевые слова ALL и EXCEPT. Больше информации в man.
xinetd предоставляет функционал inetd плюс функциональ безопасности, схожий с функционалом tcp-wrapper'ов.
Настроки: /etc/xinetd.conf /etc/xinetd.d
Настройки безопасности: /etc/xinetd.conf :
-сетевой интерфейс: опция bind определяет какие интерфейсы xinetd прослушивает для определенной службы (если сервер должен быть доступен только локально, следует указать 127.0.0.1)
-разрешенные адресе: опция only_from разрешеает соединения только с указанных адресов.
-запрещенные адреса: опция no_access запрещает соединения с указанных адресов.
-время доступа: опция access_times разрешает доступ только в указанное время
Для того, чтобы найти и отключить неиспользуемые серисы, следует воспользоваться командой netstat -ap
Также можно воспользоваться утилитой lsof. Данная утилита показывает открытые файлы, но с опцией -i может отобразить используемые серверы.
(также можно воспользоваться lsof -i | grep LISTEN)
Для того, чтобы просмотреть открытые порты можно использовать сканеры, например nmap/
Если система использует SySV, то в файле /etc/inittab находятся настройки доступа к консоли (getty или его вариации).
Неиспользуемой службе можно запретить принимать соединения средствами inetd или xinetd либо полностью ее удалить
Следует хранить пароли в зашифрованном виде (/etc/shadow)
su (switch user) позволяет сменить пользователя от имени которого запущена сессия. Если ввести команду без аргументов пользователь меняется на root. В отличие от su, команда sudo позволяет выполнить от имени другого пользователя (в частности root) отдельную команду. Разрешить отдельным пользователям или группам выполнять только конкретные команды от имени root можно отредактировав файл /etc/sudoers
Чтобы назначить лимиты по числу входов в систему, используемой памяти и ресурсам процессора следует отредактировать файл /etc/security/limits.conf Каждая строка состоит из 4 полей:
-domain - сущность, к которой применяется лимит. Может быть имя пользователя, группы или * (все)
-type - мягкий (soft) или жесткий (hard) лимит. Жесткий не может превышаться ни при каких обстоятельствах, мягкий допускает временное превышение.
-item - что ограничивается данным лимитом. Например: data, nofile, rss, stack, cpu и тд.
-valut - размер лимита
Ту же задачу можно выполнить с помощью утилиты ulimit.
Если в системе присутствует файл /etc/nologin подключиться к ней может только рут. Другием пользователи будут отображаться в содержимом файла при попытке входа.
Для того, чтобы найти программы с SUID или SGID root, следует воспользоваться утилитой find: find / -perm +6000 -type f
Настройки sshd хранятся в файле /etc/ssh/sshd_config:
-protocol - версия ssh. следует использовать версию 2
-permitrootlogin - возможность логиниться непосредественно с учетной записью рута (безопаснее отключить)
-x11forwarding - включить или отключить туннелирование X программ
Другие опции можно посмотреть в man sshs_config
Для взаимной идентификации ssh клиент и сервер использую публичные и частные ключи. Как правило, они хранятся в /etc/ssh и имеют имена ssh_hos_rsa_key и ssh_host_dsa_key для частных ключей. Для публичных ключей добавляется расширение .pub Если по какой-то причине ключи отсутствуют, их можно сгененировать командой:
# ssh-keygen -q -t rsa1 -f /etc/ssh/ssh_host_key -C '' -N ''
# ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C '' -N ''
# ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C '' -N ''
Не следует генерировать ключи, если они уже существуют, т.к. это может привести к проблемам с подключением у ранее подключенных пользователей. Частные ключи имеют своим владельцем рута и разрешения -rw------- Публичные ключи должны иметь разрешение на чтение для всех пользователей.
На клиентских компьютерах ssh хранит список ключей хостов, к которым производилось подключение в файле ~/.ssh/known-hosts Можно скопировать список из пользовательского профиля чтобы создать глобальный (для всех пользователей) кэш:
cp /home/ecernan/.ssh/known_hosts /etc/ssh/ssh_known_hosts
Контролировать доступ по SSH можно средствами tcp-wrapper'ов, брандмауэра, либо создав файл /etc/nologin
С помощью ssh можно скопировать файлы. Команда scp
scp masterpiece.c lisa@leonardo.example.com:~/art/mona.c
При входе на сервер по ssh openssh может выполнять собственные логоy-скрипты. Текст скрипта следует располагать в файле sshrc. Как правило, он находится в директории /etc или /etc/ssh
SSH помимо шифрования позволяет передавать файлы и туннелировать другие сетевые протоколы. Так, например, с помощью SSH можно устанавливать защищенное X или IMAP соединение по сети.Создание ssh-туннеля: ssh -N -f -L 142:mail.luna.edu:143 benf@mail.luna.edu (-N, -f - не выполнять команд на удаленном сервере и работать в фоновом режиме, -L -локальный порт, удаленный компьютер и порт на удаленном компьютере). Для портов с номером менее 1024 следует запускать от имени рута, для остальных можно запускать со стандартными привилегиями.
Для шифрования почтовых сообщений можно использовать GPG. Это открытая реализация проприетарной технологии PGP. Помимо шифрования сообщений
GPG может добавлять к письмам электронную подпись. Такие сообщения могут быть прочитаны получателями не использующими GPG, те же получатели, которые используют GPG смогут удостовериться, что сообщение не было изменено.
Генерация ключей: gpg --gen-key
Экспорт публичных ключей: gpg --export name > gpg.pub
Публичные ключи (т.е. ключи которыми любой пользователь может зашифровать данные, но расшифрованы они могут быть только соответсвующим частным ключом) можно хранить на сервере ключей, чтобы облегчить доступ к ним.
Для того, чтобы зашифровать отправляемые сообщения, следует импортировать ключи. gpg --import filename
Следует убедиться, что используемый публичный ключ получен из надежного источника и является подлинным (так как, например, злоумышленники могут подменять публичные ключи).
Для того, чтобы отозвать публичный ключ (например, в случае компрометации частного ключа) используется команда gpg --gen-revoke jennie@luna.edu
Затем отзыв импортируется в keyring: gpg --import revocation.gpg
Если публичный ключ хранился на сервер ключей, отзыв следует отправить также и туда. gpg --keyserver pgp.mit.edu --send-keys jennie@luna.edu
Roderick W. Smith - LPIC study guide, 3d edtition
Комментариев нет:
Отправить комментарий