Основы локальной безопасности OS Linux.
ub1k
11.12.2005
ub1k@kodsweb.ru
# IN
На сегодняшний день Linux - одна из самых успешных OS, которая занимает все больше и больше мест как на
серверах, так и на десктопах. Одна из отличительных особенностей данной системы связана с ее открытостью
и мощными средствами по увеличению безопасности вашей системы. Сама OS не может быть защищенной больше или
меньше в той или иной степени. Заметьте - плохо настроенная OS Linux может уступать в уровне безопасности
"голому" Windows 9x :) Поэтому уровень безопасности напрямую зависит от уровня ваших знаний (квалификации)
и желания обезопасить вашу систему. Надеюсь, вы поняли главное - OS может только обладать/поддерживаться
средствами для обеспечения требуемого уровня безопасности и только от вас зависит как вы ими распорядитесь.
Локальная безопасность - защита от локальных пользователей (сюда же входит и защита от попыток взлома системы,
путем использования удаленными пользователями локальных учетных записей вашей системы). Если вы рассчитываете
серьезно затруднить возможность проникновения в вашу систему, то вы должны тщательно анализировать меры
защиты от локальных пользователей. Прежде всего необходимо понимать, что не существует абсолютно защищенной
системы - в ваших силах только создать дополнительные препятствия...
# Что такое "Open Source" и в чем плюс открытости кода Linux?
"Open Source" переводится с английского как "открытый исходный код". В настоящее время - это не просто
понятие, а уже и движение. Linux - это бесплатная и распространяемая в исходных кодах OS
(GNU General Public License). Любой желающий может исследовать и модифицировать исходный код OS Linux.
В создании Linux принимали участие тысячи энтузиазистов по всему миру. По сей день система непрерывно
совершенствуется, и если вдруг находятся какие-либо ошибки, то они устраняются немедленно. После чего
выпускаются специальные патчи, устраняющие найденную ошибку (уязвимость, если мы говорим о безопасности),
которые выкладываются во всемирной сети и тут же становятся доступными любому желающему. В данном случае
программисты не преследуют целей ускорения процесса проверки или обхода каких-либо нерешенных проблем.
(идеология и стабильность выше финансовых ценностей). В этом и заключаются основные прелести "Open Source"...
# Linux - многопользовательская OS
Я не думаю, что вас удивит то, что Linux - многопользовательская OS. Реализация возможности обслуживания
сразу нескольких пользователей является одним из ключевых моментов многопользовательских OS. В OS Linux
существует два типа пользователей: одни из них относятся к специальным учетным записям, а другие к обычным
учетным записям.
Специальные учетные записи:
Суперпользователь - root. Данный пользователь обладает неограниченными правами в системе. Вы можете без проблем
клонировать эту учетную запись, но обычно хватает одной учетной записи с правами суперпользователя. Остальные
специальные записи (bin, daemon, sync, shutdown...) являются системными. Они не имеют привилегий пользователя root.
Для избежания потенциальных проблем, связанных с защитой системы, определенные приложения запускаются от имени
данных пользователей. root, единственный пользователь в системе, обладающий неограниченными правами. Не
рекомендуется использовать учетную запись суперпользователя при ежедневной работе в системе - желательно
использование ее для действий, которые возможны только для учетной записи root.
Обычные учетные записи:
Учетные записи данных пользователей не имеют каких-либо отличий между собой, кроме
различий в отношении предоставления прав доступа. В идеале для каждого пользователя создается индивидуальная
учетная запись.
Советы по контролированию учетных записей:
1) При возможности проверяйте, когда и откуда происходит регистрация того или иного пользователя.
например, кто-то добавляет пользователя somebody и входит в систему под именем данного пользователя:
# useradd somebody
# su somebody
данные действия регистрируются в журнале событий /var/log/secure, в чем можно легко убедиться:
# cat /var/log/secure
если вам нужно проверить систему просто на наличие добавления новых пользователей:
# cat /var/log/secure | grep useradd
но существует и другой способ добавления новых пользователей. это легко делается простым редактированием
файла /etc/passwd. например, с помощью текстового редактора vi.
# vi /etc/passwd
выбираем режим ввода (Insert) и добавляем строчку типа
newuser:*:100:100::/home:/bin/sh
сохраняем файл и выходим. (:wq)
# su newuser
# whoami
newuser
#
в данном случае в системном журнале останется только запись использования команды su (смена пользователя).
сверяйте полученные данные из журналов по времени. например, я присоединился к своей системе по протоколу ssh.
и создал пользователя somebody. теперь в журнале /var/log/messages будет находится информация о соединение с
с демоном sshd, а в файле /var/log/secure информация о создании пользователя somebody. при корректной настройке
демонов регистрации событий вы легко можете сопоставить данные в этих журналах по дате и времени.
2) Не допускайте использование слишком простых паролей своим пользователям. Особенно пользователям, которые
обладают большими привилегиями.
простейшие требования к "трудному" паролю:
пароль не должен совпадать с именем учетной записи.
пароль не должен представлять собой слова, выражения, словосочетания.
пароль не должен содержать в себе информацию, как-либо связанную с пользователем.
пароль должен содержать буквы верхнего и нижнего регистра.
пароль должен содержать цифры и, желательно, служебные символы.
пароль должен быть длиннее 10 символов.
3) Следует давать минимально необходимый уровень привилегий.
Ключевым файлом конфигурации пользователей является файл /etc/passwd. Этот файл содержит примерно следующую
информацию:
----------------------[/etc/passwd]----------------------
root:x:0:0::/root:/bin/sh
bin:x:1:1:bin:/bin:
daemon:x:2:2:daemon::/sbin:
...
---------------------------[EOF]---------------------------
Каждая строка в данном файле представлена следующим образом:
> 1:2:3:4:5:6:7
1 - уникальный идентификатор учетной записи (имя пользователя).
2 - поле пароля (символ "x" указывает на использование в системе теневых паролей, пустое поле указывает
на отсутствие пароля.
3 - UID. Число, используемое для идентификации учетной записи.
4 - GID. Число, указывающее на идентификатор группы.
5 - поле для комментариев.
6 - рабочий каталог данной учетной записи.
7 - оболочка (shell) по умолчанию.
Содержимое файла /etc/passwd доступно для чтения любому пользователю системы. Это представляет собой
определенную проблему, так как любой пользователь может увидеть зашифрованный пароль. (В OS Linux ключом
при шифровании пароля служит сам пароль. Большая часть версий Linux использует для шифрования паролей
алгоритм MD5 (раньше использовался DES), но сегодня все большее распространение получают PAM-модули. Для
разрешения данной потенциальной угрозы была разработана концепция теневых паролей. В этом случае зашифрованные
пароли хранятся в отдельном файле /etc/shadow (доступ только для суперпользователя). Содержимое файла /etc/shadow
примерно следующее:
----------------------[/etc/shadow]----------------------
root:fD3e9d:12920:0:-1:7:7:-1:
bin:*:9797:0:::::
daemon:*:9797:0:::::
...
---------------------------[EOF]---------------------------
Каждая строка в данном файле представлена следующим образом:
> 1:2:3:4:5:6:7:8:9
1 - уникальный идентификатор учетной записи (имя пользователя).
2 - поле, содержащее зашифрованный пароль.
3 - количество дней, прошедших с начала эпохи, когда пароль менялся в последний раз.
4 - количество дней, которое должно пройти до того как пароль будет изменен.
5 - колисчество дней, после которых пароль должен быть изменен.
6 - количество дней, оставшихся до завершения действия пароля.
7 - количество дней после окончания срока пароля, в течение которых учетная запись будет блокирована,
если пароль не будет успешно изменен.
8 - количество дней, прошедших с начала эпохи, после которого учетная записаь будет заблокирована.
9 - зарезервированное поле.
(начало эпохи - 1 января 1970 года - дата создания OS UNIX)
Также в OS Linux существует концепция групп. Группа может состоять из одного или нескольких пользователей.
Технология использования групп полезна, когда необходимо делить ресурсы между определенными группами лиц.
Появляется возможность удобного контролирования доступа к ресурсам для большого количества пользователей.
Ключевым файлом конфигурации групп является файл /etc/group. Содержимое файла /etc/group примерно следующее:
-----------------------[/etc/group]-----------------------
root::0:root
bin::1:bin,root,daemon
sys::3:root,bin,adm
...
---------------------------[EOF]---------------------------
Каждая строка в данном файле представлена следующим образом:
> 1:2:3:4
1 - уникальный идентификатор группы (имя группы).
2 - поле пароля. Если это поле пусто - значит пароль не нужен; а если установлено значение x, то значит
зашифрованный пароль содержится в файле /etc/gshadow.
3 - уникальный идентификатор группы.
4 - список имен пользователей - членов группы (каждый пользователь указывается через запятую).
# Права доступа к файлам и регистрация в системе
Регистрация в системе может осуществляться тремя способами: через консоль, с помощью последовательного
соединения или с помощью сетевого соединения (telnet, ssh, rlogin...). Под регистрацией понимается процесс
опознавания пользователя и выделение в его распоряжение представленного системным администратором набора
ресурсов. init порождает одну из программ семейства getty (agetty, mgetty, uugetty...), каждая из
которых выдает на ваш терминал строку потдверждения ввода имени пользователя и вызывает команду /bin/login -
так происходит опознавание в системе. В случае успешной аутентификации и отсутствия файла /etc/nologin вы будете
допущены в систему. При наличии файла /etc/nologin (содержание файла не имеет значения) регистрация в системе
будет запрещена. Создается этот файл обычно программой shutdown или ее аналогами. При запуске системы этот файл
должен автоматически ликвидироваться. Данная процедура служит для запрета внесения изменений в систему после
завершения выгрузки.
Для файлов и каталогов в Linux существуют три уровня прав доступа:
- Владелец
- Группа
- Остальные
Для того, чтобы просмотреть текущия права доступа к файлу используют команду ls с ключом -l. Каждый уровень
имеет свои собственные привилегии на права доступа: чтение, запись и выполнение. У каждого файла и каталога
должен быть/есть владелец и группа, в которую входит владелец. Для изменения прав доступа к файлам
используется команда chmod. Команда chmod имеет следующий формат:
# chmod {a,u,g,o} {-|+} {r,w,x} <имя_файла>
Первая группа кодов указывает на уровень пользователей (a - все, u - владелец файла, g - группа, к
которой принадлежит владелец, o - остальные). -|+ отменяет или устанавливает атрибут (r,w и/или x).
Также chmod поддерживает формат установки прав с помощью одного восьмеричного числа.
# chmod <режим_доступа> <имя_файла>
Режим доступа берется из полученного двоичного числа, представленного как три восьмеричных числа:
* * * * * * * * * // символ * - это число 0 (нет) или 1 (да).
- r w x r w x r w x // r - чтение (read), w - запись (write), x - выполнение (execute)
[u] [g] [o] // [u] - владелец, [g] - группа владельца, [o] - остальные
Каждая группа чисел (как видно выше, всего их 3) представляет собой двоичное число. Формат ключа
<режим_доступа> является восьмеричным числом, поэтому каждое из трех полученных двоичных чисел следует
перевести в восьмеричный формат. Например, для того чтобы разрешить владельцу файла и его группе производить
с файлом любые действия, а остальным пользователям запретить любые действия с данным файлом можно так:
# chmod 770 <имя_файла>
770 представляет из себя три двоичных числа (111/111/000).
Также у команды chmod существуют еще два атрибута прав доступа: s (suid bit. При выполнении файла
переустанавливает действующий идентификатор пользователя или группы на владельца и группу каталога, в
котором расположен файл ) и t (sticky bit. Этот бит используется только вместе с другими битами для установки прав
доступа для каталога. Если этот бит установлен, то в этом каталоге только владелец файла может удалить свой
файл)
Кроме изменения прав доступа, пользователь может также изменять атрибуты файлов. Команда lsattr служит для
просмотра атрибутов файла, а chattr для их изменения. Атрибуты означают следующее:
A - блокировка изменения atime.
S - надежное удаление.
a - разрешено только добавление в конец файла.
c - сжатый.
d - пропускать при архивировании утилитой dump.
i - не подлежит модификации.
s - синхронное обновление.
u - установлено восстановление.
# Средства защиты загрузчика OS
Обычно в качестве загрузчика вашей OS используется какой-нибудь Loader (LiLo, Grub, Loadlin...). Для
обеспечения безопасности на данном уровне входа в систему в них специально интегрирована возможность
установки пароля на подтверждение загрузки системы. Таким образом, вы можете остановить незаконные действия
злоумышленника еще до загрузки OS.
# Блокировщик доступа к дисплею
Если вам время от времени приходится отлучаться от своего компьютера, то для надежности в защите от
проникновения во время вашего отсутствия стоит использовать программы xlock/vlock.
xlock - блокировщик доступа к X-дисплею. Данная программа (как и vlock) включена в состав почти каждого
дистрибутива Linux. Вам просто следует запустить программу из любого окна X-терминала в консоли, в результате
чего программа заблокирует доступ к дисплею и потребует ввод регистрационного пароля для возобновления доступа.
vlock - позволяет заблокировать работу отдельных и/или всех виртуальных консолей вашей машины.
# Аудит и регистрация событий
Существуют различные демоны регистрации событий: syslogd, klogd, metalog (современная замена демонам syslogd и klogd).
Основной демон - syslogd. Он несет на себе всю ответственность за регистрацию событий в системе. syslogd начинает свою
работу во время инициализации системы и принимает все сообщения о событиях от выполняющихся программ, которые
затем в зависимости от содержания конфигурационных файлов будут занесены в журнал регистрации или
проигнорированы. Конфигурация этого демона находится в файле /etc/syslog.conf. По умолчанию, журналы
регистрации располагаются в каталоге /var/log. Данные, представленные в этих файлах - первый путь к выяснению
причины ошибки, возникшей в системе. Журналы регистрации вызывают большой интерес не только у владельца
системы, но и у злоумышленника, так как в этих файлах остаются его следы после проникновения в систему. Разрешение
на чтение/запись самым важным журналам (secure, syslog, messages...) должно предоставляться только суперпользователю.
Существует специальный класс программ для различных OS - логклинеры (logcleaners), которые служат для скрытия за
собой следов путем модифицирования данных журналов регистрации (например, vanish для Linux-систем).
# Tripwire
Данная программа позволяет обнаружить деятельность злоумышленника еще до того, как вы успеете узнать о
его действиях на вашей системе. Tripwire вычисляет контрольные суммы всех ваших основных двоичных и
конфигурационных файлов, после чего сравнивает их с эталонными значениями. В результате вы всегда будете в
курсе всех изменений внутри вашей системы. Правда опять же, помимо действий, направленных на обход безопасности
вашей системы, Tripwire выявляет и "безобидные" изменения в системе. Поэтому вам следует выбрать критические
области, которым надо уделить особое внимание.
# OUT
1) Почаще проверяйте системный журнал вашей системы ( /var/log/* ) и следите за ее деятельностью.
2) Не забывайте почаще посещать secure/bug-traq порталы, следить за выходом новых уязвимостей и вовремя
устанавливать новые обновления и патчи.
Прорепорт. Обзор и анализ рынка растительного масла в России. . системы безопасности