Методы и средства защиты информации
Лабораторный практикум

4. Управление доступом в файловой системе ОС Unix. Контроль целостности файловой системы ОС Unix.

4.1.. Изменение прав доступа к файлу

Повторите подпункт В пункта 1.2 из практической работы 1 "Права на использование файла".

Для изменения прав доступа используется команда

%chmod [-R] права файл_или_каталог [файл2 ...]

Необязательный ключ -R распространяет действие команды рекурсивно на содержимое каталогов, если таковые обнаружатся в списке файлов, переданном в командной строке.

Права указываются в одной из двух нотаций: числовой и символьной.

Числовая нотация команды chmod

Набор прав разбивается на 4 тройки:

sst rwx rwx rwx
и рассматривается в виде битового поля: бит установлен, если соответствующее право имеется. Каждая тройка бит записывается десятичным числом.

Примеры

--- rwx rwx rwx 0777
--- rwx r-x r-x 0755
--- rw- r-- --- 0640
ss- rwx r-x r-x 6755
--t rwx r-x r-- 1754

Лидирующий ноль можно опускать.

Символьная нотация команды chmod

В отличие от числовой нотации символьная нотация указывает не права, а изменения прав. Нотация состоит из 3 элементов, указанных в следующей последовательности: чьи права изменять, каким образом, и какие именно права.

Чьи права изменять Каким образом Какие именно права
u (владельца)
g (группы)
o (всех остальных)
a (всех трех категорий)
+ (добавить)
- (убрать)
r
w
x
= (сделать такими же) u (как у владельца)
g (как у группы)
o (как у всех остальных)
u
g
+
-
s (SUID или SGID)
u +
-
t (Sticky bit)

Примеры:

Добавить группе право на запись:

%chmod g+w file

Убрать у прочих права на запись и исполнение:

%chmod o-wx file

Добавить владельцу и группе права на чтение и запись:

%chmod ug+rw file

Установить права прочих такими же, как у группы

%chmod o=g file

Установить права прочих и группы такими же, как у владельца

%chmod og=u file

Несколько изменений можно перечислять через запятую:

Добавить вдалеьцу право на исполнение, а у группы и прочих убрать право на запись:

%chmod u+x,go-w file

Во второй консоли зарегистрируйтесь от имени пользователя test, созданного вами на прошлой лабораторной работе и выполните следующие упражнения.


4.2. Права доступа по умолчанию. Команда umask.

Каждый вновь создаваемый файл или директория получают установленные по умолчанию права доступа. Вы можете сами установить эти права командой umask.

Замечания по команде umask:

  1. Команда umask может быть использована для задания прав доступа только для вновь создаваемых файлов/каталогов, она не переустанавливает права доступа для уже существующих файлов/каталогов.
  2. На файловой системе ОС Linux, файлы нельзя установить исполняемыми по умолчанию. Это разрешается только явным указанием в команде chmod.
  3. Umask определяет какие права НЕ разрешены; в этом смысле она противоположна команде chmod. Например, команда: umask 026 определяет, что:
    Ограничения для хозяина(user) 0 = 000 binary
    read - разрешено, write - разрешено , execute - разрешено.
    Ограничения для группы хозяина (group) 2 = 010 binary
    read - разрешено, write - НЕ разрешеноNOT, execute - разрешено.
    Ограничения для прочих (others) 6 = 110 binary
    read - НЕ разрешено, write - НЕ разрешено, execute - разрешено.
  4. Если umask установлено в 026, новый каталог имеет права доступа: rwxr-x--x
  5. Если umask установлено в 026, новый файл имеет права доступа: rw-r-----
    (право выполнения не включается автоматически для файла)

-------------------------------------------------------------------------------------
Упражнения (выполняются, как и в п. 4.1 от пользователя test):
-------------------------------------------------------------------------------------


4.3. Смена хозяина и группы файла. Команды chown и chgrp.

Каждый файл или директория имеют хозина и группу хозяина, соответствующую первичной группе создателя файла. Вы можете переназначить их используя команды chown и chgrp. Самостоятельно изучите эти команды (man chown и man chgrp).

Замечания по командам chown и chgrp:

Сразу после выполнения этих команд вы теряете права на файлы, как их первоначальный владелец. 

-------------------------------------------------------------------------------------
Упражнения (выполняются, как и в п. 4.1 от пользователя test):
-------------------------------------------------------------------------------------


4.4. Контроль целостности файловой системы ОС Unix. Утилита tripwire.

Назначение

Утилита tripwire отслеживает изменения файлов, позволяя обнаруживать порчу данных и взломы. База данных шифруется (El Gamal, 1024 бита), что предотвращает ее подделку хакерами. Не мешает держать suid-программы в /tmp или временно возвращать систему в нормальное состояние ровно к моменту ежедневной поверки , так что расслабляться не надо. С помощью редактируемого набора правил проверки пытается решить проблему с выдачей слишком большого числа предупреждений. Разработана в Purdue University в 1992, все права переданы Tripwire, Inc. Лицензия для специальной Linux-версии: GNU. Аналоги - AIDE, TAMU, ATP, Hobgoblin, sXid, L5, Gog&Magog.

Непосредственно после установки ОС tripwire, используя правила, определенные политикой безопасности (policy file), создает базу данных, содержащую информацию о всех "существенных" файлах в системе - размер, контрольная сумма и т.д. Затем эта база данных ежедневно сравнивается с текущим состоянием файловой системы, позволяя обнаружить добавленные, измененные и удаленные файлы. Получаемые при этом отчеты могут быть просмотрены с различной степенью детализации.

Файлы конфигурации и полиси защищаются от записи общим ключом, а БД и отчеты - локальным ключом. Для чтения достаточно доступного публичного ключа, для записи требуется частный ключ, защищаемый парольной фразой. Обольщаться не надо - если уж взломщик получил права суперпользователя, необходимые для модификации БД, то он также может переустановить все файлы tripwire заново и вы будете получать по почте сообщения, что все в порядке, пока не обнаружите, что ваша парольная фраза не позволяет изменить БД или полиси!

Для измененных файлов создаются резервные копии с суффиксом .bak.

Установка и настройка

В состав Linux входит пакет tripwire-2.3.1-2, включающий программы в /usr/sbin: siggen, tripwire, twadmin, twprint (собранных безо всяких глупостей типа разделяемых библиотек и имеющих размер более 2 МБ каждая); файлы конфигурации: twcfg.txt, twpol.txt, twinstall.sh (в /etc/tripwire); файл конфигурации для cron: /etc/cron.daily/tripwire-check; документация: /usr/share/doc/tripwire-2.3.0/, twconfig.4.gz, twpolicy.4.gz, twfiles.5.gz, siggen.8.gz, tripwire.8.gz, twadmin.8.gz, twintro.8.gz, twprint.8.gz; БД и отчеты: /var/lib/tripwire.

Первым делом надо отредактировать стандартные (из комплекта поставки) файлы конфигурации (/etc/tripwire/twcfg.txt) и полиси (/etc/tripwire/twpol.txt). Полиси из поставки можно рассматривать только как пример. Каждая конкретная система требует своего полиси, иначе не все важные именно для данной системы файлы будут проверяться, а также будут выдаваться излишние предупреждения.

Запустить /etc/tripwire/twinstall.sh, который запрашивает парольную фразу и создает файлы ключей (/etc/tripwire/site.key и /etc/tripwire/host-local.key), создает из текстовых файлов и подписывает файл конфигурации и полиси.

Инициализировать БД (спрашивает локальную парольную фразу, могут быть сообщения об ошибках т.к. полиси рассчитан на полную установку):
tripwire --init [--no-encription]

Выполнить пробную проверку (эта же команда выполняется из /etc/cron.daily/tripwire-check; все сообщения об ошибках повторяются; д.б. по крайней мере одно изменение - добавился файл с БД):
tripwire --check

Налюбовавшись на сообщения об отсутствующих файлах (twpol.txt из комплекта поставки рассчитан на полную установку), поменяйте /etc/tripwire/twpol.txt и запустите
tripwire --update-policy --secure-mode low /etc/tripwire/twpol.txt

Может быть придется повторить процедуру несколько раз, пока не сойдется, после чего надо зафиксировать состояние системы:
tripwire --check --interactive

Проверка работоспособности почтовой системы:
tripwire --test --email адрес

Дальнейшие проверки будут происходить ежедневно в автоматическом режиме. А если вы указали GLOBALEMAIL в конфигурационном файле и добавили ключ --email-report к команде запуска tripwire в /etc/cron.daily/tripwire-check, то отчеты будут посылаться по почте.

Общие ключи к программам

При вызове программ можно использовать дополнительные ключи:

-?
--help
--help all
--help режим
--version
--verbose (или -v)
--quiet (или -s)
--polfile полиси-файл
--cfgfile файл-конфигурации
--site-keyfile файл-общего-ключа
--local-keyfile файл-локального-ключа
--dbfile файл-БД
--local-passphrase парольная фраза (не советую использовать, т.к. ее могут увидеть с помощью команды ps)
--site-passphrase парольная фраза (не советую использовать, т.к. ее могут увидеть с помощью команды ps)

Мониторинг и разборка отчетов

Проверка целостности системы (текстовый отчет выводится на stdout, если не задан ключ --no-tty-output; создается файл с отчетом, который шифруется, если задан ключ --signed-report; БД не изменяется):
tripwire --check [--twrfile имя-файла-с-отчетом] [--email-report [--email-report-level уровень]] {объект }

Ограничить список проверок можно следующими ключами:

--severity уровень (проверять только правила с указанным уровнем серьезности или выше)
--rule-name имя (только указанное правило)
--ignore список-свойств (через запятую)

Коды возврата (могут комбинироваться):

1 - был добавлен файл(ы)
2 - был удален файл(ы)
4 - был изменен файл(ы)
8 - не удалось записать отчет

Ключ --interactive позволяет изменить БД в диалоговом режиме. Запускается текстовый редактор (ключ --visual имя-редактора, переменная EDITOR в конфигурационном файле или переменные окружения VISUAL или EDITOR) и предоставляется возможность отредактировать форму изменения БД, в которой каждый "подтвержденный" файл надо отметить крестиком в секции Object Summary. Запрашивается парольная фраза.

Просмотр файла с отчетом:
twprint --print-report --twrfile имя-файла-с-отчетом [--report-level уровень]

Просмотр БД или отдельных объектов:
twprint --print-dbfile {объект}

Изменение БД с целью отразить существующее состояние вещей в интерактивном режиме (то же самое, что и tripwire --check --interactive):
tripwire ---update --twrfile имя-файла-с-отчетом

Изменение БД с целью отразить существующее состояние вещей в автоматическом режиме:
tripwire ---update -a --twrfile имя-файла-с-отчетом

Конфигурационный файл

Конфигурационный файл: /etc/tripwire/tw.cfg, хранится в кодированной и подписанной форме. Преобразовать его в текстовый формат можно командой:


twadmin --print-cfgfile > /etc/tripwire/twcfg.txt


после чего отредактировать любым текстовым редактором, закодировать и подписать командой


twadmin --create-cfgfile [--no-encription] /etc/tripwire/twcfg.txt


а текстовый файл немедленно удалить.

Формат файла:

строки, начинающиеся с #, являются комментариями
значения переменным присваиваются командами
имя_переменной = значение
в правой части могут быть использованы ранее определенные переменные:
$(имя_переменной)
предопределена переменная HOSTNAME - простое имя хоста
предопределена переменная DATE - 20011210-113512

Обязательные переменные:

POLFILE = /etc/tripwire/tw.pol (имя файла с полиси)
DBFILE = /var/lib/tripwire/$(HOSTNAME).twd (имя файла с БД)
REPORTFILE = /var/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr (имена файлов с отчетами)
SITEKEYFILE = /etc/tripwire/site.key (общий ключ)
LOCALKEYFILE = /etc/tripwire/$(HOSTNAME)-local.key (локальный ключ)

Необязательные переменные:

EDITOR = /bin/vi (имя текстового редактора)
TEMPDIRECTORY = /tmp (лучше поменять на директорию с нормальными правами доступа)
LATEPROMPTING = false (откладывать запрос парольной фразы до последнего)
SYSLOGREPORTING = true (выдавать на syslog - user,notice - сообщения о создании БД, проверках, изменениях БД и полиси, уровень подробности - 0)
LOOSEDIRECTORYCHECKING = false (не выдавать излишние сообщения о изменениях atime и mtime для директории, в которой добавлен или удален контролируемый файл; эквивалентно добавлению -snacmblCMSH для всех директорий)
REPORTLEVEL = 3 (уровень подробности отчета по умолчанию для twprint)
GLOBALEMAIL = (добавить этот список адресов к получателям отчетов по почте)
MAILMETHOD = SMTP (или SENDMAIL)
SMTPHOST =
SMTPPORT = 25
MAILPROGRAM = /usr/sbin/sendmail -oi -t (если MAILMETHOD установлен в SENDMAIL)
EMAILREPORTLEVEL = 3 (уровень подробности отчета для почтовых извещений)
MAILNOVIOLATIONS = false (посылать ли письма при отсутствии нарушений полиси)

Полиси

Полиси: /etc/tripwire/tw.pol, хранится в кодированной и подписанной форме. Преобразовать его в текстовый формат можно командой:


twadmin --print-polfile > /etc/tripwire/twpol.txt


после чего отредактировать любым текстовым редактором, закодировать и подписать командой


twadmin --create-polfile [--no-encription] /etc/tripwire/twpol.txt


а текстовый файл немедленно удалить. После этого требуется создать БД заново.

Если полиси изменяется для уже существующей БД, то чтобы преобразовать базу данных и полиси за один шаг необходимо вместо twadmin запустить


tripware --update-policy [--secure-mode {high | low}] /etc/tripwire/twpol.txt


При этом собирается информация о текущем состоянии файловой системы и в режиме безопасности high при наличии нарушений старых правил, которые одновременно являются нарушениями новых правил выводится их список (на stderr), а БД не изменяется.

Текст за символом # до конца строки является комментарием.

Базовым элементом полиси являются правила (rule), которые задают для системных объектов (файлов или директорий, файлы внутри директории наследуют указанное правило, однако, рекурсия не пересекает границу файловой системы) наборы отслеживаемых свойств (не более одного правила для объекта):

полное-имя-объекта -> маска-свойств [(атрибуты)];
!полное-имя-игнорируемого-объекта;


Именем объекта является полное имя файла (директории). Пробелы игнорируются, если не заключить имя в кавычки. Кавычка игнорируется, если не заключена в кавычки и ей не предшествует обратная косая черта. Всякие специальные символы (!{}>(),;=$#|\+' и \n, \t) также надо заключать в кавычки.

Маска свойств задает, какие свойства объекта будут проверяться. Каждому свойству соответствует буква. Маска не может быть пустой. Знак плюс перед буквой включает проверку, знак минус - выключает. Если знака перед буквой нет, то подразумевается предыдущий в данном правиле знак или знак плюс, если знаков не было совсем. Если буква свойства отсутствует, то проверка свойства выключена. Если буква свойства встречается несколько раз, то используется последнее вхождение. Обрабатываются следующие свойства:

p - права доступа
i - inode
n - число жестких ссылок
u - uid
g - gid
t - тип файла
s - размер
d - номер устройства диска, на котором хранится соответствующий inode
r - для файлов устройств номер устройства
b - число блоков
m - время модификации
c - время создания/модификации inode
l - ожидается, что файл будет расти; если он уменьшился, то это нарушение
a - время доступа (несовместим с CMSH, т.к. для вычисления суммы необходимо прочитать файл; доступ к содержимому директории меняет время доступа к ней)
C - контрольная сумма CRC-32, POSIX 1003.2
M - контрольная сумма MD5
S - контрольная сумма SHA
H - контрольная сумма HAVAL

Атрибуты модифицируют действие правила, записываются в виде списка имя = значение через запятую и могут применяться к отдельному правилу или группе правил. Группа правил заключается в фигурные скобки. Список атрибутов для группы правил записывается в скобках перед ней. Индивидуальные атрибуты имеют больший приоритет, чем групповые, за исключением атрибута emailto - в этом случае атрибут добавляется. Обрабатываются следуюшие атрибуты:

rulename - по умолчанию, простое имя файла; используется в отчетах, для группировки правил, для проверки только части правил
emailto - чтобы указать несколько адресов, надо перечислить их через точку с запятой и заключить в кавычки
severity - от 0 до миллиона, по умолчанию - 0; чем больше, тем серьезнее; проверку можно запускать только для правил указанного уровня или выше; в командной строке могут использоваться ключи high - уровень 100, medium - уровень 66, low - уровень 33
recurse - рекурсивная проверка директорий, true (-1) по умолчанию, false (0) или натуральное число (максимальный уровень вложенности)

Директивы группируют правила и обеспечивают условное выполнение. Имя директивы не может быть получено подстановкой значения переменной. Список директив:

@@section имя - для Unix обрабатываются только правила в первой секции с именем FS; если секций нет, то обрабатываются все правила; в секции GLOBAL определяются глобальные переменные
@@ifhost имя-хоста { || имя-хоста } - использовать правила только для указанного хоста (хостов); условия могут быть вложенными
@@else
@@endif
@@print строка в кавычках - вывод на stdout
@@error строка в кавычках - вывод на stdout и завершение со статусом 1
@@end - любой дальнейший текст в файле игнорируется; не может использоваться внутри группы или условного блока

Переменные делятся на глобальные и локальные для данной секции. Локальные имеют больший приоритет. Значение переменной присваивается командой
имя_переменной = значение;
Имя переменной может включать буквы (регистр имеет значение), цифры и знаки: "_+-@:&%^.". Если значение содержит пробел или управляющие сиволы, то оно должно быть заключено в кавычки. Подстановка переменных допускается в любом месте, где по синтаксису полагается строка (в т.ч. как часть левой части правила) и выражается так:
$(имя_переменной)
Предопределенные переменные (не могут быть переопределены):

ReadOnly = +pinugsmtdbCM-raclSH (предполагается, что содержимое файлов не изменяется)
Dynamic = +pinugtd-rsacmblCMHS (предполагается частое изменение содержимого файлов, например /home)
Growing = +pinugtdl-rsacmbCMSH (например, журналы)
IgnoreAll = -pinusgamctdrblCMSH (проверять лишь наличие или отсутствие файла)
IgnoreNone = +pinusgamctdrbCMSH-l (используется для дальнейшего конструирования собственной маски: $(IGnoreNone)-ar)
Device = +pugsdr-intlbamcCMSH (для файлов, которые нельзя открывать)

Уровни подробности распечатки отчета

Уровень 0: отчет одной строкой. Появляется также в syslog и в заголовке Subject: каждого отчета, посылаемого по почте.
TWReport имя-хоста дата-и-время V:число-нарушений S:макс-уровень A:добавлено R:удалено C:изменено

Уровень 1: список имен поврежденных файлов в виде, легко разбираемом программой восстановления и т.п. Каждая строка состоит из ключевого слова (Added, Modified), двоеточия и имени файла.

Уровень 2: суммарный отчет, список нарушений с указанием имен правил, список добавленных, измененных и удаленных файлов.

Уровень 3: суммарный отчет, список нарушений с указанием имен правил, список добавленных и удаленных файлов, ожидаемые и реальные свойства измененных файлов.

Уровень 4: суммарный отчет, список нарушений с указанием имен правил, список добавленных, измененных и удаленных файлов, детальный отчет по каждому добавленному файлу (все свойства), каждому измененному файлу (все проверяемые ожидаемые и реальные свойства), каждому удаленному файлу (все проверяемые ожидаемые свойства).

Шифровка и парольная фраза

Парольная фраза меняется только одновременно со сменой ключей, поэтому чтобы сменить парольную фразу, надо дешифровать все файлы, сгенерировать новые ключи, затем зашифровать файлы. Если вы забудете парольную фразу или удалите/повредите/измените файлы с ключами, то зашифрованные файлы (конфигурация, полиси, БД (и может быть отчеты) станут недоступны). Кстати, шифровка не помешает хакеру удалить любой файл, включая БД tripwire, так что использование tripwire не отменяет обязательности резервного копирования.

Узнать какой ключ использован для шифровки файла (и использован ли вообще):

twadmin --examine имя-файла


Убрать шифровку (запрашивается парольная фраза, файл остается в двоичном формате):

twadmin --remove-encryption имя-файла


Создание нового ключа:

twadmin --generate-keys --local-keyfile имя-файла-ключей


или


twadmin --generate-keys --site-keyfile имя-файла-ключей


Шифрование файла:

twadmin --encrypt --local-keyfile имя-файла-ключей имя-файла


или


twadmin --encrypt --site-keyfile имя-файла-ключей имя-файла


Программа siggen

Вспомогательная программа, вычисляющая контрольную сумму методами CRC-32, MD5, HAVAL и SHA в реализации tripwire, что позволяет сравнить производительность различных методов. Самый быстрый (но нестойкий к подделке) - CRC32. Из устойчивых алгоритмов у меня (Pentium !!!) самым быстрым оказался HAVAL, затем SHA и самый медленный - MD5.

Ссылки

Открытый код (документация в разделе files, 119 страниц) http://sourceforge.net/projects/tripwire/

-------------------------------------------------------------------------------------
Упражнения (выполняются от имени пользователя root):
-------------------------------------------------------------------------------------