Next Previous Contents

5. Безопасность файлов и файловой системы

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

5.1 Установки umask

Команду umask можно использовать для определения режима создания файлов в вашей системе, принимаемого по умолчанию. Она представляет битовое дополнение до желаемого значения режима файла. Если файлы создаются без какого-либо специального набора прав доступа, то можно случайно разрешить чтение или запись тому, кто не должен иметь таких прав. Типично принятыми umask являются 022, 027 и 077, которые наиболее ограничивающие. Нормальным будет установить значение umask в /etc/profile, так чтобы оно применялось ко всем пользователям в системе. Например, вы можете иметь строку подобную следующей:

                # Значение umask по умолчанию для всех пользователей
                umask 033
Убедитесь, что значение umask для администратора составляет 077, что запрещает чтение, запись и выполнения для остальных пользователей, до тех пор, пока это не будет изменено явно командой chmod(1).

Если вы используете Red Hat и придерживаетесь их схемы создания ID пользователя и группы (собственная группа пользователя), то для значения umask необходимо использовать только 002. Это из-за того, что настройки по умолчанию определяют одного пользователя на группу.

5.2 Права доступа файла

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

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

Быстрое объяснение прав доступа в unix:

Собственность - Какой пользователь(ли) и группа(ы) удерживает контроль установок прав вершины (node) и родителя вершины.

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

Чтение:

Запись:

Выполнение:

Save Text Attribute: (Для каталогов)

sticky бит также имеет отличное значение применимо к каталогам. Если sticky бит установлен для каталога, то пользователь может удалять только те файлы, владельцем которых он является, или к которым ему явно заданы права записи, несмотря на то, что ему разрешена запись в этот каталог. Это сделано для каталогов подобных /tmp, в которые разрешена запись всем, но в которых нежелательно разрешать любому пользователю удалять файлы от нечего делать. sticky бит видно как 't' в полном режиме отображения содержимого каталога. (long listing).

SUID Attribute: (Для файлов)

Описывает set-user-id права на файл. Если права доступа set-user-id установлены во "владелец" и файл исполняемый, то процесс, который запускает его, получает доступ к системным ресурсам основываясь на правах пользователя, который создал этот процесс. Во многих случаях это является причиной возникновения 'buffer overflow'.

SGID Attribute: (Для файлов)

Если установлен в правах доступа "группы", этот бит контролирует "set group id" статус файла. При этом он работает также как и SUID, только задействована при этом группа, а не отдельный пользователь.

SGID Attribute: (Для каталогов)

Если вы установите SGID бит для каталога (командой "chmod g+s directory"), то файлы содержащиеся в этом каталоге будут иметь установки группы такие, как у каталога.

Вы - Владелец файла

Группа - Группа, к которой вы принадлежите

Остальные - Любой в системе, кто не является владельцем либо членом группы

Пример файла:

        -rw-r--r--  1 kevin  users         114 Aug 28  1997 .zlogin
        1й бит - каталог?                               (нет)
         2й бит - чтение владельцем?                    (да, для kevin)
          3й бит - запись владельцем?                   (да, для kevin)
           4й бит - выполнение владельцем?              (нет)
            5й бит - чтение группой?                    (да, для users)
             6й бит - запись группой?                   (нет)
              7й бит - выполнение группой?              (нет)
               8й бит - чтение остальными?              (да, для остальных)
                9й бит - запись остальными?             (нет)
                 10й бит - выполнение остальными?       (нет)

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


-r--------  Разрешают чтение файла владельцем
--w-------  Разрешают владельцу изменение или удаление файла
---x------  Владелец может выполнять эту программу, но не скрипты
            командного интерпретатора, которые еще нуждаются в правах
            на чтение 
---s------  Будет выполняться с эффективным пользовательским ID = владелец
-------s--  Будет выполняться с эффективным пользовательским ID = группа
-rw------T  Не обновлять "последнего времени изменения". Обычно используется
            для swap файлов 
---t------  Не действует.  (прежде sticky бит)
Пример каталога:

        drwxr-xr-x  3 kevin  users         512 Sep 19 13:47 .public_html/
        1й бит - каталог?                               (да, содержит много файлов)
         2й бит - чтение владельцем?                    (да, для kevin)
          3й бит - запись владельцем?                   (да, для kevin)
           4й бит - выполнение владельцем?              (да, для kevin)
            5й бит - чтение группой?                    (да, для users)
             6й бит - запись группой?                   (нет)
              7й бит - выполнение группой?              (да, для users)
               8й бит - чтение остальными?              (да, для остальных)
                9й бит - запись остальными?             (нет)
                 10й бит - выполнение остальными?       (да, для остальных)

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


dr--------  Можно просмотреть содержание, но нельзя прочесть атрибуты файла
d--x------  Можно войти в каталог, а также использовать его в полной записи
            файла (т.е. с путем к нему)
dr-x------  Владелец может теперь просмотреть атрибуты файла
d-wx------  Файлы теперь можно создавать/удалять, даже если каталог
            не текущий
d------x-t  Предотвращает файлы от удаления остальными с правами записи.
            Используется для /tmp
d---s--s--  Никаких действий

Системные конфигурационные файлы (обычно в /etc) имеют обычно режим 640 (что означает -rw-r-----) и являются собственностью администратора. В зависимости от требований безопасности в вашей системе, вы можете изменить эти установки. Никогда не предоставляйте возможности записи в системные файлы для "группы" или "остальных". Некоторые конфигурационные файлы, включая /etc/shadow, должны разрешать чтение только администратору, а каталоги в /etc должны по крайней мере быть недоступны другим.

SUID Shell Scripts

SUID скрипты командного интерпретаторa являются также риском безопасности, по этой причине ядро не обслуживает их. Независимо от вашего мнения о том насколько безопасным является скрипт, он может быть переделан для выдачи взломщику оболочки администратора.

5.3 Проверка целостности с помощью Tripwire

Другим хорошим способом обнаружить локальные (а также сетевые) атаки на вашу систему является использование тестеров целестности (integrity checkers) подобных Tripwire. Tripwire вычисляет контрольные суммы для всех важных бинарных и конфигурационных файлов в вашей системе и сравнивает их с предыдущими, хорошо известными, из базы данных. Таким образом любые изменения в файлах будут замечены.

Хорошей идеей будет записать tripwire на дискету, а затем установить на нее защиту от записи. Таким образом взломщик не сможет подделать tripwire или изменить базу данных. Как только вы установили tripwire будет неплохо включить в свои обязанности администратора безопасности проверку с помощью него на предмет каких-либо изменений.

Вы можете даже добавить в список задач crontab запуск tripwire c вашей дискеты каждую ночь и посылку результатов вам по почте утром. Что-то наподобие этого:

                # установить получателя
                MAILTO=kevin
                # запустить tripwire
                15 05 * * * root /usr/local/adm/tcheck/tripwire 
будет отсылать вам по почте отчет каждое утро в 5:15.

Tripwire может быть всевышним в обнаружении взломщиков еще до того, как вы заметите их. Как только в системе появится некоторое количество измененных файлов, вы должны понимать, что имеет место деятельность взломщика, и знать, что делать вам самим.

5.4 "Троянские кони"

Термин "Троянский Конь" взят из великого творения Гомера. Идея состоит в том, что вы создаете программу, который чем-либо привлекателен, и каким-либо способом заставляете других людей скачать ее и запустить как администратор. Затем, пока они не разобрались, вы можете разрушить их систему. Пока они думают, что программа, которую они только-что вытянули, делает одну вещь (и может даже очень хорошо), она также разрушает их систему безопасности.

Вы должны быть очень внимательны при установке новых программ на вашу машину. RedHat предоставляет MD5 контрольные суммы и PGP ключи для RPM файлов, так что вы можете проверить действительно ли вы инсталируете реальные продукты. Другие дистрибутивы имеют подобные методы. Вы никогда не должны запускать из под администратора бинарники, для которых у вас нет исходников, или о которых вы ничего не слышали! Немногие взломщики имеют желание выложить на всеобщее обозрение исходный код.

Также может быть общим совет брать исходники некоторых программ с их реальных дистрибутивных серверов. Если программу нужно запускать из под администратора, проверьте исходный код сами или дайте на проверку тому, кому вы доверяете.


Next Previous Contents