Главная страница
Навигация по странице:

  • 4.7.2. Установка jail

  • 4.7.3. Работа с программой Jail

  • 4.8. Получение прав root

  • 4.9. Расширение прав

  • Михаил Фленов СанктПетербург бхвпетербург 2010 удк 681 06 ббк 32. 973. 26018. 2 Ф69


    Скачать 3.69 Mb.
    НазваниеМихаил Фленов СанктПетербург бхвпетербург 2010 удк 681 06 ббк 32. 973. 26018. 2 Ф69
    Дата13.03.2022
    Размер3.69 Mb.
    Формат файлаpdf
    Имя файлаlinux_glazami_xakera_3-e_izd.pdf
    ТипДокументы
    #394477
    страница13 из 35
    1   ...   9   10   11   12   13   14   15   16   ...   35
    4.7.1.
    Принцип
    работы
    Итак
    , давайте посмотрим, как можно увеличить безопасность служб. Для этого создается директория, которая является для программы корневой. В Linux для этого существует команда chroot
    , которая создает окружение chroot.
    /
    bin
    usr
    var
    home
    chroot
    user1
    user2
    bin
    usr
    var
    home
    user1
    user2
    Рис
    . 4.1.
    Схема работы окружения chroot
    В
    этом окружении создается директория, которая играет роль корневой.
    Выше этой директории программа, работающая в окружении chroot, попасть

    Глава
    4
    134
    не может. Получается как бы корневая файловая система внутри сущест- вующей корневой системы. Посмотрите на рис. 4.1. Здесь показана часть файловой системы Linux. Во главе всего стоит корневая директория /. В ней находятся
    /bin, /usr, /var, /home. В папке /home расположены каталоги пользо- вателей системы. Мы создаем здесь новую директорию, для примера назовем ее chroot, и она будет являться корнем для службы. В ней будут свои каталоги
    /bin, /usr и т. д., и сервис будет работать с ними, а все, что выше /home/chroot, будет недоступно.
    На рис. 4.1 в рамку обведены папки, которые будут видны службе. Именно в
    этом пространстве будет работать сервис, считая, что это и есть реальная файловая система сервера.
    Если хакер проникнет в систему через защищенную службу и захочет про- смотреть директорию /etc, то он увидит каталог /home/chroot/etc, но никак не системный
    /etc. Чтобы взломщик ничего не заподозрил, в папке /home/chroot/etc можно расположить все необходимые файлы, но содержащие некорректную информацию
    . Злоумышленник, запросив файл /etc/passwd через уязвимый сервис
    , получит доступ к /home/chroot/etc/passwd, потому что служба видит его системным.
    Так
    , например, файл /home/chroot/etc/passwd может содержать ложную ин- формацию
    . На работу системы в целом это не повлияет, потому что ОС будет брать пароли из файла /etc/passwd, а службе реальные коды доступа в систе- му не нужны, поэтому в файл /home/chroot/etc/passwd можно засунуть, что угодно
    4.7.2.
    Установка
    jail
    Встроенная в Linux-систему программа chroot для создания виртуальных пространств на сервере сложна и не очень удобна для применения. Нужно выполнить слишком много операций. Именно поэтому администраторы больше любят использовать программу Jail, которую можно найти в Интер- нете по адресу http://www.jmcresearch.com/projects/jail/. Скачайте ее и по- местите архив в свой каталог. Для того чтобы его разархивировать, нужно выполнить следующую команду: tar xzvf jail.tar.gz
    В
    текущей директории появится новый каталог jail с исходным кодом про- граммы
    . Да, именно с исходным, потому что код открыт, и программа по- ставляется в таком виде.
    Теперь нужно перейти в каталог jail/src (
    cd jail/src
    ) и отредактировать файл
    Makefile (например, встроенным редактором MC). В самом начале файла

    Управление
    доступом
    135
    идет множество комментариев, и их мы опустим. После этого вы сможете увидеть следующие параметры:
    ARCH=__LINUX__
    #ARCH=__FREEBSD__
    #ARCH=__IRIX__
    #ARCH=__SOLARIS__
    DEBUG = 0
    INSTALL_DIR = /tmp/jail
    PERL = /usr/bin/perl
    ROOTUSER = root
    ROOTGROUP = root
    Вначале задается тип ОС, по умолчанию установлен
    LINUX
    , а следующие три строки для FreeBSD, Irix и Solaris закомментированы. Оставим это как есть.
    Что нужно изменить, так это директорию для установки (параметр
    INSTALL_DIR
    ). В последней версии (на момент написания книги) по умолча- нию используется каталог /tmp/jail. Не знаю, зачем это сделали, ведь этот ка- талог предназначен для временных файлов и должен быть доступен для чте- ния абсолютно всем. Раньше по умолчанию был /usr/local, и именно его я советую здесь указать. Больше ничего менять не надо.
    Для выполнения следующих директив вам понадобятся права root, поэтому войдите в систему как администратор или получите нужные права, запустив команду su root
    Перед компиляцией и установкой убедитесь, что у файла preinstall.sh есть права на выполнение. Если нет, воспользуйтесь следующей командой: chmod 755 preinstall.sh
    Теперь все готово к установке. Находясь в директории jail/src, выполните команды
    : make make install
    Если все прошло успешно, то в каталоге /usr/local/bin должны появиться про- граммы addjailsw, addjailuser, jail и mkjailenv.
    4.7.3.
    Работа
    с
    программой
    Jail
    Для начала создадим каталог /home/chroot, который станет корневым для программы
    , на которой мы будем испытывать систему. Для этого выполним команду
    : mkdir /home/chroot

    Глава
    4
    136
    Теперь нужно подготовить окружение для нормальной работы будущего сер- виса
    . Для этого выполняем команду:
    /usr/local/bin/mkjailenv /home/chroot
    Посмотрите
    , что произошло с каталогом /home/chroot. Здесь появились две директории dev и etc. Как мы знаем, в директории dev должны быть описания устройств
    . В данном случае программа не стала делать полную копию сис- темного каталога /dev, а ограничилась созданием трех основных устройств null, urandom и zero.
    В
    директории etc можно также увидеть три файла: group, passwd и shadow.
    Это неполные копии системных файлов. Например, если взглянуть на файл passwd, то он будет содержать только следующие строки: root:x:0:0:Flenov,Admin:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin
    Больше ничего не будет, в частности, нет пользователя robert, которого мы создавали раньше (см. разд. 4.3). В файле shadow находятся теневые пароли.
    Проверьте права на этот файл, чтобы они были не более 600 (
    rw-------
    ).
    Тут есть один недостаток в безопасности — в файле /home/chroot/etc/shadow находится реальный зашифрованный пароль из /etc/shadow. Лучше удалите его
    , иначе злоумышленник, узнав пароль на сервис, сможет проникнуть на сервер через другую дверь, которая не защищена виртуальным каталогом.
    Продолжаем настройку виртуальной корневой директории. Теперь нам нуж- но выполнить следующую команду:
    /usr/local/bin/addjailsw /home/chroot
    Во время работы этой команды побежит множество информационных стро- чек о выполняемых действиях, которые заключаются в том, что в каталог
    /home/chroot копируются основные директории и программы. Например, в
    папку /home/chroot/bin будут скопированы такие программы как cat, cp, ls, rm и т. д., и сервис будет использовать именно их, а не те, что расположены в
    основном каталоге /bin.
    Программа копирует то, что считает нужным, но далеко не все из этого по- требуется будущему сервису, который будет работать в виртуальной корне- вой директории. Лишнее следует удалить, но лучше это делать после того, как убедитесь, что все работает.
    Необходимые программы перенесены, и окружение готово. Теперь сюда можно установить сервис:
    /usr/local/bin/addjailsw /home/chroot -P httpd

    Управление
    доступом
    137
    В
    данном примере в новое окружение устанавливается программа httpd и все необходимые ей библиотеки. Программа jail сама определит, что нужно.
    Теперь в новое окружение можно добавлять пользователя. Это выполняется командой
    :
    /usr/local/bin/addjailuser chroot home sh name
    Здесь chroot
    — это виртуальная корневая директория, в нашем случае долж- но быть указано
    /home/chroot
    . Параметр home
    — это домашний каталог пользователя относительно виртуальной директории. Аргумент sh
    — это ко- мандный интерпретатор, и name
    — имя пользователя, которое мы хотим до- бавить
    (оно должно уже существовать в основном окружении ОС).
    Посмотрим
    , как можно добавить пользователя robert (он у нас уже есть) в
    виртуальную систему:
    /usr/local/bin/addjailuser /home/chroot \
    /home/robert /bin/bash robert
    У
    меня команда не уместилась в одну строку, поэтому я сделал перенос с по- мощью символа \ (который обозначает, что директива не закончилась и есть продолжение в следующей строке).
    Если параметры указаны верно, то вы должны увидеть уведомление "Done", иначе будет выведено сообщение об ошибке.
    Для запуска сервера httpd (в Linux это сервер Apache) в виртуальном окруже- нии должен быть пользователь apache. В реальной оболочке он уже есть. Да- вайте посмотрим его параметры и создадим такого же:
    /usr/local/bin/addjailuser /home/chroot \
    /var/www /bin/false apache
    Как теперь попасть в новое окружение? Выполните команду: chroot /home/chroot
    И
    вы окажетесь в новом окружении. Только учтите, что большинство команд здесь не работает. Так, например, мы не установили программу MC, поэтому вы не сможете ею воспользоваться.
    Чтобы убедиться, что вы находитесь в виртуальном окружении, выполните команду
    : ls -al /etc
    Вы увидите всего несколько файлов, которые составляют малую часть того, что доступно в реальном каталоге /etc. Можете просмотреть файл /etc/passwd, и
    в нем будут только пользователи виртуального окружения. Если хакер взломает его, то он получит только эти данные и сможет уничтожить лишь

    Глава
    4
    138
    содержимое каталога /home/chroot. Вся остальная файловая система останет- ся целой и невредимой.
    Для запуска сервиса httpd нужно выполнить в виртуальном окружении команду
    /usr/sbin/httpd
    4.8.
    Получение
    прав
    root
    Теперь у нас есть достаточно информации о разграничении доступа, и мы можем рассмотреть типичный метод взломщика для получения прав root и
    способы маскировки в системе.
    Допустим
    , что злоумышленник приобрел возможность выполнять какие-либо системные команды от имени (с правами) root. Сидеть под этой учетной записью будет слишком опасно и вызывающе. К тому же изменять пароль root нельзя.
    Как же тогда входить под другим именем и в то же время использовать мак- симальные права? Давайте вспомним, как Linux работает с правами. В файле
    /etc/passwd хранятся записи пользователей в следующем виде: robert:x:501:501::/home/robert:/bin/bash
    Третий и четвертый параметры — это идентификаторы пользователя и груп- пы соответственно. Когда на объекты выделяются права, то система сохраня- ет только идентификаторы. Что это значит? Допустим, что у вас есть пользо- ватель robert с идентификатором 501. Вы создали еще одного пользователя
    Dan и дали ему такой же идентификатор. Теперь обе учетные записи с оди- наковыми
    ID будут разделять владение одними и теми же объектами.
    Что это нам дает? Посмотрите на идентификатор пользователя root — он ра- вен нулю. Именно нулевой ID, а не имя root, указывает на максимальные права
    . Давайте попробуем учетной записи robert, которую мы создали ранее, поставить вручную идентификаторы пользователя и группы, равные 0.
    В
    файле /etc/passwd должна получиться строка: robert:x:0:0::/home/robert:/bin/bash
    Теперь войдите в систему под этой учетной записью и попробуйте снова от- крыть файл /etc/passwd и внести изменения или просто добавить пользовате- ля
    . Все пройдет успешно, хотя файл /etc/passwd может изменять только root.
    Так что система проверяет наши права по идентификатору, который в дан- ном случае нулевой и соответствует максимальным правам.
    Так как имя пользователя ничего не значит, я рекомендую удалить пользова- теля root в файлах /etc/passwd и /etc/shadow, а создать новую запись с другим именем
    , но идентификатором, равным 0. Или просто переименовать root

    Управление
    доступом
    139
    во что-то более интересное. Злоумышленники, которые попытаются взломать ваш сервер, будут пытаться подобрать пароль для администратора root, но так как пользователя с таким именем нет, то их действия окажутся безуспеш- ными
    С
    другой стороны, пользователя root можно оставить, но установить ему иден- тификатор больше нуля. Я иногда создаю учетную запись root с UID=501 или выше
    . Получив доступ под этим именем, взломщик думает, что он обладает всеми правами, но в реальности оказывается простым пользователем.
    Каждая удачная попытка ввести злоумышленника в заблуждение увеличива- ет вероятность паники со стороны хакера. Даже профессиональный взлом- щик
    , находясь в системе, испытывает большую психологическую нагрузку и
    боится оказаться замеченным. Среди взломщиков немало людей с неустой- чивой психикой. Только не думайте, что это сумасшедшие, большинство ха- керов
    — вполне здоровые люди, просто в момент взлома испытывают пере- напряжение
    , и когда что-либо идет не так, как планировалось, хакер может запаниковать
    Именно высокое напряжение и адреналин заставляют многих молодых ребят заниматься взломом. Лично я предпочитаю получать адреналин другими ме- тодами
    , без нарушения закона.
    Итак
    , злоумышленник, проникнув в систему, может не пользоваться учетной записью root, а отредактировать любую другую или добавить еще одну с ну- левым идентификатором пользователя и получить максимальные права в
    системе. Если вы являетесь администратором сервера, то должны отслежи- вать подобные трансформации и останавливать любые попытки изменения идентификаторов
    Команда id позволяет узнать идентификаторы пользователя. Если она вызы- вается без параметров, то на экран будут выведены идентификаторы текуще- го пользователя. Чтобы получить информацию о конкретной учетной записи, нужно выполнить команду: id имя
    Например
    , давайте посмотрим параметры пользователя robert. Для этого вы- полним команду: id robert
    Результатом будет строка: uid=501(robert) gid=501(robert) group=501(robert)
    Таким образом можно в любой момент определить идентификатор пользова- теля и узнать, какими правами он реально обладает.

    Глава
    4
    140
    4.9.
    Расширение
    прав
    Регламентация доступа — достаточно сложный процесс. Это основная задача администратора
    , и от правильности ее выполнения зависит многое. Любая ошибка может стоить вам зарплаты и благополучия. В мире, где информация является самым дорогим продуктом, вы должны оберегать ее всеми возмож- ными методами.
    Не пожалейте времени и проверьте всю систему на правильность установ- ленных прав. Ни у кого не должно быть ничего лишнего, и в то же время не- обходимый уровень доступа должен быть у всех программ для корректной работы
    Честно сказать, права на основе "босс", "друзья босса" и "все остальные" ус- тарели и не обеспечивают необходимой безопасности. Например, у вас есть две группы: бухгалтерия и экономисты. Файлы, созданные любым бухгалте- ром
    , будут иметь права
    -rwxrwx--- и станут доступными для всех сотрудни- ков этого отдела, потому что в данных правах группа имеет все разрешения на файл, как и владелец.
    А
    что если теперь нужно, чтобы экономист просмотрел документы бухгалте- рии
    ? Причем не все пользователи группы экономистов, а только один, и не все файлы бухгалтерии, а выборочно! Правильно решить эту задачу доста- точно сложно. Если пойти простым путем и поставить на файлы бухгалтерии права
    -rwxrwxrwx
    , то любой пользователь сможет просмотреть бухгалтер- скую отчетность, а это уже очень далеко от идеала безопасности.
    Можно пытаться выйти из положения через ссылки или копии файлов с дру- гими правами, но в этом случае вы просто запутаетесь, и дальнейшее управ- ление системой станет затруднительным. Подход к распределению прав в
    Linux прост, но надежен. С другой стороны, его гибкость оставляет желать лучшего и уже долгие годы идет поиск хорошего универсального решения.
    Проблему достаточно просто решить, если ввести списки ACL (Access Con- trol List, списки контроля доступа), как это реализовано в ОС Windows.
    Сложность только с внедрением, так как ОС Linux не имеет соответствующе- го стандарта. В принципе, это ядро, на которое любой разработчик может повесить все, что угодно, и каждый производитель дистрибутива ищет свои пути выхода из ситуации (или вообще ничего не делает).
    Я
    не могу привести универсальный способ, потому что все решения даются сторонними разработчиками. А это значит, что работоспособность системы можно гарантировать только в отношении определенных версий ядра Linux, которые уже существуют. Нельзя поручиться, что при обновлении версии ядра система списков продолжит функционировать и не вызовет проблем.

    Управление
    доступом
    141
    Именно поэтому я только предложу взглянуть на проект Linux Extended
    Attributes and ACLs (http://acl.bestbits.at/). Вы можете его использовать только на свой страх и риск. К тому же, его не обновляли уже очень давно, и
    несмотря на первоначальные большие планы, мне кажется, что им уже не суждено сбыться.
    Linux Extended Attributes and ACLs — продукт, который устанавливается в
    систему и после этого требует перекомпиляции ядра. Работа его основана на хранении для каждого файла расширенных атрибутов. Это возможно не на всех файловых системах, поэтому убедитесь, что используемая вами система поддерживает списки ACL. Лучше всего, на мой взгляд, подходят системы
    ReiserFS и Ext3.
    После установки патча и дополнительных программ вам становятся доступ- ны списки ACL. С их помощью можно отдельным пользователям устанавли- вать режим доступа к файлу. Владельцем файла остается его создатель, и он имеет полные права. Остальные атрибуты доступа могут отсутствовать.
    Например
    , для файла можно установить права
    -rwx------
    . Несмотря на та- кие жесткие требования, можно указать пользователей, которые будут иметь доступ к этому файлу, помимо владельца.
    Получается
    , что кроме основных прав для каждого файла в системе будет храниться список пользователей, которые имеют доступ к нему сверх основ- ной регламентации.
    Если бы такой принцип был реализован на уровне ядра и поддерживался всеми дистрибутивами, то я назвал бы ОС Linux самой безопасной и ста- бильной в мире операционной системой.
    4.10.
    1   ...   9   10   11   12   13   14   15   16   ...   35


    написать администратору сайта