Операционная система Linux — одна из самых стабильных и разнообразных ОС. Это также один из самых популярных серверов в мире, благодаря своей стабильности, обработке процессов и преданности разработчиков. Неважно, что вы планируете делать с Linux, вы можете поспорить, что есть вкус, который будет соответствовать вашим конкретным потребностям.
В мире разработки наиболее популярным и часто используемым дистрибутивом Linux (известным фанатам Linux как «дистрибутив») является RedHat . Другие варианты с открытым исходным кодом включают Mandrake , Debian или SuSE . В этом уроке мы будем ссылаться на дистрибутив RedHat 9.
Не выключайте свой мозг у двери!
Предупреждение! Если вы думаете, что чтение этой статьи даст вам всю информацию, необходимую для того, чтобы стать системным администратором, подумайте еще раз. В этой статье будут рассмотрены основы безопасности, но она не предназначена для замены здравого смысла или необходимого интерактивного мышления компетентного системного администратора.
Это еще не все! Хакеры и злоумышленники постоянно обновляют себя, и хороший системный администратор будет разносторонним и искусным, изобретая себя по мере необходимости. Я рекомендую эти источники, чтобы помочь вам оставаться в курсе вопросов системного администрирования и безопасности, связанных с вашим сервером Linux:
Установка
Прежде чем вы действительно сможете начать работу, вы должны установить дистрибутив Linux. Поскольку мы настраиваем сервер, мы будем работать без X-Windows (графический пользовательский интерфейс, который поставляется с Redhat). Вы можете установить X, если хотите, но мы не будем использовать его в этом руководстве.
Эмпирическое правило, с которым мы здесь работаем, заключается в том, что если что-то не нужно, мы не собираемся его включать. Причиной такого подхода является то, что чем больше сервисов и модулей вы установили, тем выше риск того, что эксплуатируемая и пропущенная служба может обеспечить шлюз для вашего устройства.
В зависимости от вашего сервера или дистрибутива, расположение файлов, которые я здесь предоставляю, может не совпадать с расположением в вашей системе. Вы можете использовать следующую команду, чтобы найти файл: find / -name filename
. Вы также можете использовать такие инструменты, как pico или vi, для редактирования файла, выполнив следующую команду:
# pico file
или
# vi file
Lockdown
Это первое, что вы хотите сделать, чтобы обезопасить свой новый Linux-блок. Существует ряд действий, которые можно предпринять, чтобы предотвратить опасную деятельность.
Changing the root Password
Самый очевидный и самый простой способ блокировки — изменить (или даже изначально настроить) свой пароль root с самого начала.
Рекомендуется менять это раз в 30 дней, а также разумно придумать пароль, который нелегко взломать. Существуют приложения, которые могут запускать список паролей для словаря и пытаться взломать пароли таким образом. Существуют также приложения, которые запускают список паролей против словаря и против написания хакером. Поэтому использование термина «d0gf00d» в качестве пароля крайне небезопасно.
Вы можете изменить свой пароль с помощью команды passwd, войдя в систему как пользователь root.
Отключить suid
Время от времени очень ценно, а также очень опасно иметь возможность запускать приложение от имени другого пользователя. Наиболее распространенное применение этого с suid. С помощью suid пользователь с ограниченными правами может запускать приложение, как если бы он был привилегированным пользователем. Например, веб-сервер Apache, который по своему дизайну работает как собственный пользователь, может выполнять команды от имени пользователя root. Таким образом, обычный пользователь мог бы получить доступ и редактировать файл /etc/passwd
, среди прочего.
Вы можете узнать, какие файлы используют suid, выполнив следующую команду. Все, что имеет «s» в столбце разрешений (слева), может работать с suid.
# ls -alF `find / -perm -4000` > /root/suid.txt
На вашем сервере вы можете получить что-то вроде этого в /root/suid.txt:
-rwsr-xr-x 1 root root 60104 Apr 1 2002 /bin/mount* -rwsr-xr-x 1 root root 35192 Apr 18 2002 /bin/ping* -rwsr-xr-x 1 root root 19116 Apr 8 2002 /bin/su* -rwsr-xr-x 1 root root 30664 Apr 1 2002 /bin/umount* -r-sr-xr-x 1 root root 120264 Apr 9 2002 /sbin/pwdb_chkpwd* -r-sr-xr-x 1 root root 16992 Apr 9 2002 /sbin/unix_chkpwd* -rwsr-xr-x 1 root root 37528 Jan 17 2002 /usr/bin/at* -rwsr-xr-x 1 root root 34296 Mar 27 2002 /usr/bin/chage* -rws--x--x 1 root root 12072 Apr 1 2002 /usr/bin/chfn* -rws--x--x 1 root root 11496 Apr 1 2002 /usr/bin/chsh* -rwsr-xr-x 1 root root 21080 Apr 15 2002 /usr/bin/crontab* -rwsr-xr-x 1 root root 36100 Mar 27 2002 /usr/bin/gpasswd* -rwsr-xr-x 1 root root 19927 Apr 17 2002 /usr/bin/lppasswd* -rws--x--x 1 root root 4764 Apr 1 2002 /usr/bin/newgrp* -rs--x--x 1 root root 15104 Mar 13 2002 /usr/bin/passwd* -rwsr-xr-x 1 root root 14588 Jul 24 2001 /usr/bin/rcp* -rwsr-xr-x 1 root root 10940 Jul 24 2001 /usr/bin/rlogin* -rwsr-xr-x 1 root root 7932 Jul 24 2001 /usr/bin/rsh* -rwsr-xr-x 1 root root 219932 Apr 4 2002 /usr/bin/ssh* ---s--x--x 1 root root 84680 Apr 18 2002 /usr/bin/sudo* -rwsr-xr-x 1 root root 32673 Apr 18 2002 /usr/sbin/ping6* -r-sr-xr-x 1 root root 451280 Apr 8 2002 /usr/sbin/sendmail.sendmail* -rwsr-xr-x 1 root root 20140 Mar 14 2002 /usr/sbin/traceroute* -rwsr-xr-x 1 root root 13994 Apr 18 2002 /usr/sbin/traceroute6* -rws--x--x 1 root root 22388 Apr 15 2002 /usr/sbin/userhelper* -rwsr-xr-x 1 root root 17461 Apr 19 2002 /usr/sbin/usernetctl*
Многие системные администраторы рекомендуют отключать такие службы, как ping и traceroute, которые не требуются. В этом конкретном выводе я собираюсь отключить /usr/bin/chage
, /usr/bin/chfn
, /usr/bins/chsh
, /bin/mount
,
/bin/umount
, /usr/bin/gpasswd
, /usr/sbin/usernetctl
, /usr/sbin/traceroute
, /usr/sbin/traceroute6
,
/usr/bin/newgrp
и /usr/sbin/ping6
, /bin/ping
.
Чтобы отключить suid
для файла, используйте следующую команду. Это делает файл исполняемым только владельцем, а также делает его неизменным (невозможно изменить, удалить или даже связать с ним):
# chmod 111 /path/to/file # chattr +I /path/to/file
Помните, эмпирическое правило: если что-то не нужно, отключите это!
/etc/securetty
— Далее вам нужно отредактировать файл / etc / securetty. Этот скрипт позволяет вам определить, какие сервисы имеют доступ к вашему устройству TTY. Устройство TTY — это причудливое обозначение для любого базового устройства ввода / вывода, и в этом случае это ваша консоль Linux.
Файл содержит список служб, с помощью которых root может получить доступ к вашей консоли. Наиболее важными пунктами здесь будет отключение (т. Е. Комментирование с использованием #
перед строкой) telnet. Причина этого заключается в том, что telnet транслирует незашифрованные пакеты. С точки зрения непрофессионала, он выкрикивает ваш жизненно важный пароль пользователя через рупор, чтобы мир мог его услышать. Очевидно, вам не нужно транслировать свой пароль root таким образом. Наша коробка имеет следующий файл / etc / securetty, прежде чем мы доберемся до него.
# pico /etc/securetty vc/1 #vc/2 #vc/3 #vc/4 #vc/5 #vc/6 #vc/7 #vc/8 #vc/9 #vc/10 #vc/11 tty1 #tty2 #tty3 #tty4 #tty5 #tty6 #tty7 #tty8 #tty9 #tty10 #tty11
Мы собираемся закомментировать (поставить #
перед соответствующей строкой) все устройства, кроме vc/1
и tty1
, эффективно предотвращая root-доступ, за исключением этих единственных консолей. Единственный способ получить доступ к root — использовать su -
.
/etc/ftpusers
— Так же, как telnet отключен для метода передачи, FTP также не должен использоваться для корневых транзакций. Как примечание, для обычного пользователя FTP также неплохо бы найти SFTP-клиента. Это позволит выполнять безопасные транзакции FTP, если хостинг-провайдер предоставляет Secure Shell Access (SSH) своим пользователям. Но вернемся к теме под рукой.
Когда вы редактируете / etc / ftpusers, убедитесь, что root
отсутствует среди перечисленных пользователей. Если это так, закомментируйте это, поставив #
в начале строки.
/etc/xinetd.conf
— в старых версиях Linux вместо этого используется /etc/inetd.conf, и у него немного другой синтаксис и использование. Файл xinetd.conf имеет решающее значение для вашей сети. Он запускает службы, которые относятся к вашим сетевым подключениям. Из него вы можете (и должны!) Отключать сервисы, которые не запущены или не нужны.
В нашей системе мы спустимся дальше, в каталог /etc/xinet.d/, где указан файл для каждой службы межсетевого взаимодействия по умолчанию. В нашей системе этот каталог включает в себя chargen
, chargen-udp
, daytime
, daytime-udp
, echo
, echo-udp
, finger
, finger-udp
, ntalk
, ntalk
, rlogin
, rsh
, rsync
, servers
, services
, talk
, telnet
, time
и time-udp
.
Содержимое этих файлов выглядит примерно так:
# default: off # description: A daytime server. This is the tcp # version. service daytime { type = INTERNAL id = daytime-stream socket_type = stream protocol = tcp user = root wait = no disable = yes }
Если вам не нужно или вы не знакомы ни с одной из перечисленных служб, перейдите в файл и установите для атрибута disable значение «Да», пока не сможете ознакомиться с использованием этой службы. Убедитесь, что всякий раз, когда вы вносите какие-либо изменения в эти файлы, вы перезапускаете daemon
inet
daemon
используя:
# /etc/rc.d/init.s/inet restart
IPCHAINS
ipchains
- это ответ Linux на брандмауэр. Есть много интересных трюков, которые можно выполнить с помощьюipchains
, и вы можете найти эти трюки в Google. Но сам модуль довольно прост в использовании, когда вы освоите его. Я надеюсь, что вы можете остаться со мной в этом вопросе, поскольку это может показаться слишком техническим. ПОЖАЛУЙСТА, БУДЬТЕ ОСТОРОЖНЫ, КАК ВЫ МОЖЕТЕ ПРОСТО ЗАБЛОКИРОВАТЬ СЕБЯ ИЗ СВОЕЙ СОБСТВЕННОЙ КОРОБКИ.Важно признать, что
ipchains
самом деле относится к трем отдельным цепям. Типичная командаipchain
состоит из нескольких частей.Во-первых, он несет одну из 3 команд.
-F
промывает цепь -P
устанавливает обработку цепочки -A
добавляет новое правило в цепочку Чтобы настроить цепочку, вы можете использовать:
# ipchains --F input # ipchains --A input REJECT
Это общая команда, которая по существу останавливает весь входящий трафик. Первая команда сбрасывает цепочку ввода, а вторая команда добавляет новое правило в цепочку ввода, которое отклоняет весь трафик.
Вы могли бы сделать это, если бы вы были полностью отключены от сети, но большая часть мира — нет. Почти каждый Linux-блок в мире подключен к сети или Интернету, поэтому использование такой общей команды нереально.
Давайте рассмотрим еще несколько доступных нам вариантов, чтобы настроить более интеллектуальную систему фильтрации. Допустим, ваш Linux-сервер является сервером разработки, доступным только в локальной сети. IP-адрес его сетевого устройства 192.168.25.4 и маска сети 255.255.255.0.
Обратите внимание, что в Linux вы можете определить сетевой IP-адрес исходного компьютера через ifconfig или в Windows, используя команду ipconfig в командной строке. Остальная сеть также находится в частном блоке 192.168.xx.
Вы можете написать правило, которое выглядит так:
# ipchains --A input --I eth0 -s 192.168.1.0/255.255.255.0 --d 192.168.25.4 --j ACCEPT
Что, черт возьми, это значит? Давайте проанализируем.
ipchains --A input
— Как упоминалось выше, это добавляет правило к цепочке ввода. -I eth0
— сообщает брандмауэру, что пакетный трафик, на котором мы хотим запустить это правило, подключен к сетевому устройству Ethernet 0 (Eth0). -s 192.168.1.0/255.255.255.0
— IP-адрес источника или отправителя: 192.168.1.0. Число после косой черты обозначает маску, которая в нашем случае равна 255.255.255.0. ACCEPT
обозначает, что весь трафик из этого источника должен быть разрешен. Вы также можете использовать REJECT для предотвращения трафика. Лучший выбор для межсетевого экрана ipchains лежит в его документации, которую можно найти здесь .
Другие хитрости
Некоторые другие приемы, которые вы можете выполнить для дополнительной защиты вашего сервера, связаны с файлами hosts * вашего сервера.
В /etc/hosts.deny и /etc/hosts.allow вы можете иметь дело с элементами, называемыми упаковщиками tcp, которые просто «оборачивают» службу в определенное правило. Ваш файл hosts.allow может выглядеть примерно так:
// Allow localhost ALL : 127.0.0.1 // Allow SSH Access to anyone except from 192.168.1.101 sshd : ALL EXCEPT 192.168.1.101 : ALLOW
Ваш файл /etc/hosts.deny может выглядеть примерно так:
// No one can connect via anything except loopback localhost ALL : ALL EXCEPT 127.0.0.1:DENY
Обнаружения вторжений
Вы можете рассмотреть возможность использования пакета, такого как Tripwire, для обнаружения вторжений. Он не поставляется с Redhat, но вы можете получить исходный код и скомпилировать его самостоятельно. Он работает так, что создает и сравнивает хэши критических файлов, чтобы определить, были ли внесены какие-либо изменения.
Эффективный хакер не просто взломает вашу систему. Он также создаст черный ход для себя, чтобы он мог получить доступ в другое время. В большинстве случаев эти бэкдоры находятся в эксплуатируемых файлах, и это один из способов защиты от этого.
Резюме
Есть много других хитростей и советов, доступных для системного администратора, который заботится о безопасности. Ключ к эффективности — всегда быть в тонусе и быть готовым мыслить нестандартно. Как правило, существует более одного способа шкурить кошку, и хакеры постоянно изобретают или открывают новые способы.
Пожалуйста, не читайте эту статью и думайте, что это главное и окончательное решение для безопасности системы. Эти советы просто царапают поверхность. Счастливой охраны!