Флаги файлов


На сайте Зуб ру: поликлиника стоматологическая на Автозаводской.

Все UNIX-подобные операционные системы обладают одними и теми же наборами прав доступа к файлам в файловой системе, такими как права на запись, на чтение и на исполнение файла для владельца файла, для группы и для всех остальных. Система FreeBSD расширяет схему прав, вводя флаги файлов. Вместе с правами доступа эти флаги усиливают защиту системы. Некоторые флаги используются для функций, которые не связаны с безопасностью, однако здесь будут рассматриваться флаги, имеющие к ней отношение. Полный список флагов файлов вы найдете в странице руководства chflags(1).

Многие флаги оказывают различное влияние в зависимости от уровня безопасности системы, кратко рассмотренного в следующем разделе. Для понимания уровней безопасности необходимо понимать флаги файлов, и при этом флаги файлов опираются на уровни безопасности. Пока кивайте головой и улыбайтесь при упоминании об этих уровнях; все станет ясно через несколько страниц.

Ниже представлены флаги, относящиеся к безопасности:

  • sappnd
    Системный флаг «только добавление», который может устанавливать только root. В файл с этим флагом можно добавлять записи, однако удалять или редактировать этот файл нельзя (это особенно удобно для файлов протоколов). Если учетная запись каким-то образом «скомпрометирована», то установка флага sappnd файла .history может принести пользу. Тактика типичного злоумышленника состоит в том, чтобы удалить .history или сделать из него символическую ссылку на /dev/null, чтобы администратор не узнал о предпринятых действиях. Благодаря установке флага sappnd малыши со скриптами не смогут замести следы таким образом. Забавно наблюдать за кем-либо, кто пытается удалить файл с флагом sappnd. Можно увидеть, как растет разочарование взломщика с каждой новой попыткой.* Этот флаг нельзя изменить, когда система работает на уровне безопасности 1 и выше.
  • schg
    Системный флаг «неизменяемости», который может устанавливать только root. Файлы с установленным флагом schg нельзя изменять вообще: редактировать, перемещать, заменять. Сама файловая система пресекает все попытки коснуться этого файла каким-либо образом. Этот флаг нельзя изменить, когда система работает на уровне безопасности 1 и выше.
  • sunlnk
    Системный флаг «запрет на удаление», который может устанавливать только root. Файл можно редактировать или изменять, но нельзя удалить. Этот флаг не настолько безопасен, как предыдущие два: если файл можно редактировать, то его можно очистить. Впрочем, это удобно при определенных обстоятельствах. Я использовал эту возможность, когда программа настаивала на удалении собственного файла протокола в случае аварии. Обычно установка любых стандартных флагов не приносит пользы. Этот флаг нельзя изменить, когда система работает на уровне безопасности 1 и выше.
  • uappnd
    Пользовательский флаг «только добавление», который может устанавливать только владелец файла или root. Как в случае с установленным системным флагом sappnd, в файл с флагом uappnd можно добавлять записи, однако этот файл нельзя удалять или редактировать. Такая возможность наиболее полезна для протоколов, которые ведут личные программы пользователя. Установка такого файла предохраняет пользователей от их собственных ошибок. Владелец файла и root могут удалить этот флаг в любое время.
  • uchg
    Пользовательский флаг «неизменяемости», который может устанавливать только владелец файла или root. Как в случае с флагом schg, описанным ранее, флаг «неизменяемости» защищает пользователя от изменения файла. Как и в предыдущих случаях, root может преодолеть действие этого флага. Кроме того, сам пользователь может убрать его, на каком бы уровне безопасности ни работала система. Этот флаг помогает предотвратить ошибки, но не обеспечивает безопасность системы.
  • uunlnk
    Пользовательский флаг «запрет на удаление», который может установить только владелец файла или root. Файл с установленным флагом uunlnk владелец удалить не может, a root может. Пользователь может снять этот флаг в любой нужный момент.

Просмотр и установка флагов файлов

Флаги можно устанавливать командой chflags(1). Например, чтобы защитить ядро от подмены, можно сделать следующее:

# chflags schg /boot/kernel/kernel

Теперь никто не заменит ядро: ни злоумышленник, ни вы.

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

# chflags -R schg /bin

Ура! Базовые исполняемые файлы теперь нельзя изменить.

Флаги файла можно увидеть с помощью команды ls -lo:

# ls -lo log
-rw-r--r-- 1 mwlucas mwlucas sappnd 0 Nov 12 12:37 log

Символы sappnd здесь говорят о том, что флаг «только добавление» установлен на этот файл протокола. Для сравнения приведем строку в случае, когда у файла не установлены флаги:

# ls -lo log
-rw-r--r-- 1 mwlucas mwlucas - 0 Nov 12 12:37 log

Дефис вместо имени флага говорит о том, что флаги файловой системы не были установлены.

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

Для снятия флага надо в команде chflags предварить имя флага словом no. Например, чтобы снять флаг schg, установленный на ядро, введите следующую команду:

# chflags noschg /boot/kernel/kernel

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

Комментарии запрещены.