Михаил Фленов СанктПетербург бхвпетербург 2010 удк 681 06 ббк 32. 973. 26018. 2 Ф69
Скачать 3.69 Mb.
|
df Эта команда позволяет узнать свободное место на жестком диске или в раз- деле . Если устройство не указано, то на экран выводится информация о смонтированных файловых системах. Пример результата выполнения команды: Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda2 16002200 2275552 12913760 15% / none 127940 0 127940 0% /dev/shm Результирующая таблица состоит из следующих колонок: Filesystem — диск, файловая система которого смонтирована; 1k-blocks — количество логических блоков; Used — количество использованных блоков; Available — количество доступных блоков; Use% — процент использованного дискового пространства; Mounted on — как смонтирована файловая система. mount Команда предназначена для монтирования файловых систем. Она достаточно сложна , и ее используют системные администраторы. Если вы работали с ОС Windows, то скорей всего привыкли к тому, что дис- кеты , CD-диски и другие съемные носители становятся доступными сразу же, как только вы поместили их в устройство чтения. В Linux это не так, по крайней мере в текстовом режиме, и многие не могут сжиться с этой особен- ностью . Графические оболочки прекрасно научились монтировать диски Добро пожаловать в Linux 61 автоматом , но все же желательно помнить и хоть немного уметь пользоваться утилитой Итак , чтобы CD-ROM стал доступным, надо выполнить команду mount , ука- зав в качестве параметра устройство /dev/cdrom: mount /dev/cdrom После этого содержимое CD можно посмотреть в директории /mnt/cdrom. Получается , что файлы и директории диска как бы сливаются с файловой системой Почему именно в директорию /mnt/cdrom подсоединяется CD-ROM? Секрет заключается в том, что для подключения CD-ROM нужно намного больше сведений , чем просто команда mount /dev/cdrom . Эти сведения хранятся в двух файлах, уже имеющихся в ОС и описывающих основные устройства и параметры по умолчанию — в файлах fstab и mtab. Давайте по очереди раз- берем эти файлы. Для начала взглянем на fstab: # /etc/fstab: static file system information. # # /dev/hda2 / ext3 defaults,errors=remount-ro 0 1 /dev/hda1 none swap sw 0 0 proc /proc proc defaults 0 0 none /dev/shm tmpfs defaults 0 0 none /dev/pts/ devpts gid=5,mode=620 0 0 /dev/cdrom /mnt/cdrom iso9660 noauto,owner,kudzu,ro 0 0 /dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0 Файл содержит строки для основных дисков. Каждая запись состоит из 6 ко- лонок . Обратите внимание на первую строку. Здесь описывается подключе- ние диска hda2. В моей файловой системе это основной диск, поэтому второй параметр — "/". Это значит, что диск будет монтирован как корневой. Третья колонка описывает файловую систему, в данном случае это Ext3. Предпоследняя строка в файле описывает устройство CD-ROM. Посмотрите внимательно на второй параметр /mnt/cdrom. Вот откуда берется путь к со- держимому CD-диска. Четвертая колонка содержит опции монтирования, в которых можно описать параметры безопасности. Для CD-ROM-а здесь указано несколько опций: noauto,owner,kudzu,ro . Очень важным здесь яв- ляется параметр ro , который говорит о возможности только чтения CD-ROM. Вполне логично установить этот параметр для всех внешних приводов и уст- Глава 3 62 ройств , которые злоумышленник может использовать для физического пе- реписывания информации с сервера. Файл mtab имеет примерно такое же содержимое: # /dev/hda2 / ext3 rw,errors=remount-ro 0 0 proc /proc proc rw 0 0 none /dev/shm tmpfs rw 0 0 none /dev/pts devpts rw,gid=5,mode=620 0 0 none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0 /dev/cdrom /mnt/cdrom iso9660 ro,nosuid,nodev 0 0 Если вы создали какие-то разделы на отдельных дисках, то сможете настраи- вать и их. Я вам рекомендовал выделить таким образом раздел /home с поль- зовательскими директориями. Если вы так и сделали, то в файле может быть еще одна строка примерно следующего вида: /dev/hda3 /home ext3 rw,errors=remount-ro 0 0 П Р И МЕ Ч А Н И Е Mandriva 2008 при выборе разбиения дискового пространства по умолчанию создает два раздела , один основной , а на втором удобно располагается /home. Посмотрим на четвертый параметр. В нем содержатся опции монтирования, которыми можно управлять для повышения безопасности системы. Они пе- речислены через запятую. В нашем примере это rw,errors=remount-ro . Это означает , что по умолчанию диск будет смонтирован для чтения и записи ( rw ), а при возникновении ошибок перемонтирован только для чтения ( errors=remount-ro ). В качестве опций монтирования дополнительно можно использовать : noexec — запрещает выполнение файлов. Если вы уверены, что в разделе не должно быть исполняемых файлов, то можно использовать эту опцию. На- пример , в некоторых системах директория /home должна хранить только документы . Чтобы хакер не смог записать в этот раздел свои программы, с помощью которых будет происходить взлом, добавьте этот параметр. Точнее сказать, программы поместить можно будет, а запустить — нет; nosuid — запрещает использование программ с битами SUID и SGID. В разделе /home их быть не должно, поэтому можно явно запретить при- менение привилегированных программ. О SUID- и SGID-программах мы будем говорить не раз (например, в разд. 4.5), ибо это очень опасная вещь; nodev — запрещает использование файлов устройств; nosymfollow — запрещение использования мягких ссылок. Добро пожаловать в Linux 63 Опции nodev и nosymfollow не сильно влияют на безопасность, но могут пригодиться Использование параметра noexec — бесполезное занятие и абсолютно не за- щищает систему от профессионального хакера, потому что опытный взлом- щик сможет запустить программу, если для выполнения разрешен хотя бы один раздел. А таковым всегда является раздел с директорией /bin и другие каталоги , которые содержат необходимые для работы программы. Нет, пара- метр использовать можно, но не стоит считать его панацеей. Допустим , что ваш сайт разрабатывается с использованием языка Perl. Если его интерпретатор доступен для выполнения, то взломщик сможет запускать сценарии программ Perl в любом разделе, в том числе и с установленным па- раметром noexec . Если для запуска сценария использовать командную стро- ку , то вы получите сообщение о нарушении прав доступа. Но программа вы- полнится , если написать следующую команду: perl file.pl Несмотря на то, что file.pl находится в разделе, в котором запрещены ис- полняемые файлы, ошибки не будет, потому что запускается разрешенная программа perl, которая в свою очередь читает файл (дозволенная операция) и выполняет его в своем адресном пространстве. Вспомните описание файла mtab, где для CD-ROM стоит запрет на использо- вание SUID- и SGID-программ. То же самое необходимо сделать как мини- мум с разделами /home и /tmp. Тогда пользователи не смогут создавать в сво- их директориях привилегированные программы, что позволит предотвратить большое количество возможных атак. Итак , давайте попробуем смонтировать CD-ROM в другую директорию. Для этого сначала создадим ее: mkdir /mnt/cd Теперь выполним команду mount /dev/cdrom /mnt/cd Если на вашем компьютере установлено две ОС — Windows и Linux, то диск, скорее всего, содержит файловую систему FAT32 или NTFS. Следующие команды позволяют подключить FAT32 к Linux: mkdir /mnt/vfat mount -t vfat /dev/hda3 /mnt/vfat Первая команда создает директорию /mnt/vfat, куда будет подключаться диск с FAT32. Во второй команде происходит монтирование диска /dev/hda3. Будем счи- тать , что как раз этот диск принадлежит Windows (у меня именно так, поэтому Глава 3 64 мне придется так считать). Ключ -t позволяет указать тип подключаемой файловой системы. Это обязательно. Для CD-ROM мы этого не делали толь- ко потому, что вся необходимая информация есть в файле /etc/fstab. В пара- метре указана файловая система vfat . Это имя для FAT32, которое использу- ется в Linux. Более подробно о работе команды можно узнать на страницах документации ( man mount ). umount Когда вы подключили к файловой системе CD-ROM, то это устройство бло- кируется , и диск нельзя вытащить, пока он не будет размонтирован. Для это- го используется команда umount Например , следующая команда позволяет размонтировать CD-ROM: umount /dev/cdrom Вытащить смонтированный CD-ROM-диск действительно нельзя, но если была смонтирована флешка, то ее всегда можно выдернуть физически, и тут ничего не спасет. tar По ходу изложения данной книги мы иногда будем устанавливать различные программы , часть из них поставляется в виде архивов tar.gz. Чаще всего это программы , хранимые в исходных кодах. Для развертывания такого файла нужно выполнить команду: tar xzvf имяфайла.tar.gz Как правило, после выполнения команды в текущей директории будет создан каталог с таким же именем, как у архива (только без расширения). В нем вы сможете найти все распакованные файлы. К работе с архивами мы вернемся в главе 13, когда будем рассматривать ре- зервирование данных. Сейчас же нам достаточно уметь распаковывать паке- ты , чтобы устанавливать дополнительные программы и утилиты сторонних разработчиков rpm В настоящее время большинство программ поставляются уже не в исходных кодах , а в виде rpm-пакетов. Их установка намного проще, так как програм- мы в них уже скомпилированы. Если вы используете MC, то выберите rpm- пакет и нажмите клавишу директорию и увидите содержимое. Добро пожаловать в Linux 65 Каждый пакет обязательно содержит исполняемый файл install. Запустите его для установки пакета. Или запустите upgrade для обновления уже установ- ленного пакета. Если вы не используете MC, то для установки нового пакета можно выпол- нить команду: rpm -i пакет Для обновления уже установленного пакета можно выполнить команду с па- раметром -U : rpm -U пакет Для того чтобы видеть ход инсталляции, можно указать еще и ключ -v Таким образом, команда установки будет выглядеть следующим образом: rpm -iv пакет which Иногда необходимо знать каталог, в котором расположена программа. Для этого используется команда which с именем программы в качестве пара- метра , которая проверит основные директории, содержащие исполняемые файлы . Например, чтобы определить, где находится программа просмотра содержимого каталогов ls , выполните следующую команду: which ls В результате вы увидите путь /bin/ls. Если ваша ОС поддерживает псевдони- мы (alias) команд, то можно будет увидеть и его. Таким образом, при выпол- нении команды на экране выведется: alias ls='ls —color=tty' /bin/ls 3.1.2. Безопасность файлов В главе 4 мы будем подробно говорить о правах доступа. Это основа обеспе- чения безопасности, но надеяться только на них нельзя. Необходимы допол- нительные инструменты сохранения целостности системы, или, по крайней мере , отслеживание изменений основных объектов ОС — файлами. В них хранится информация, а именно она необходима взломщикам. Хакеры стре- мятся прочитать, изменить, или даже уничтожить информацию, поэтому вы должны уметь ее контролировать. Дата изменения Самый простейший способ контроля — наблюдение за датой редактирова- ния . Допустим, что взломщик проник в вашу систему в 10:30. Чтобы узнать, Глава 3 66 что было изменено злоумышленником, можно запустить поиск всех файлов, у которых дата корректировки больше этого времени. Вроде легко, но не очень эффективно, потому что дату можно изменить с помощью команды touch . В общем виде команда выглядит следующим образом: touch параметры ММДДччммГГ файл Прописными буквами показаны параметры даты, а строчными — время. Формат немного непривычный, но запомнить можно. Год указывать необяза- тельно , в этом случае будет использоваться текущий. Рассмотрим пример. Допустим, что вы хотите установить на файл /etc/passwd дату изменения 11:40 21 января. Для этого выполняем следующую команду: touch 01211140 /etc/passwd Теперь воспользуйтесь командой ls -l /etc/passwd , чтобы убедиться, что дата и время изменения установлены верно. С помощью команды touch можно и создавать файлы, сразу же указывая не- обходимую дату. Несмотря на то, что дата корректировки легко изменяется, хакер может забыть или просто не успеть сделать это, а возможно, ему просто не хватит прав. Итак , найти все файлы, дата изменения которых больше 11:40 21 января 2010 года, можно следующим образом: touch 0121114010 /tmp/tempfile find /etc \(-newer /tmp/tempfile \) -ls find /etc \(-cnewer /tmp/tempfile \) -ls find /etc \(-anewer /tmp/tempfile \) —ls В первой строке мы создаем файл во временной директории /tmp с необхо- димой датой изменения, по которой и будет происходить поиск. Следующие три строки производят поиск файлов. Каждая из них имеет сле- дующую структуру: find директория \( -сравнение файл \) -ls Рассмотрим по частям эту строку: find — программа поиска файлов; директория — директория, в которой нужно искать. В нашем случае указана системная директория /etc, в которой хранятся все настроечные файлы; параметр \( -сравнение файл \) состоит из файла для сопоставления и кри- терия поиска файлов, который может принимать различные значения: • -newer — дата изменения больше, чем у заданного файла в парамет- ре файл ; Добро пожаловать в Linux 67 • -cnewer — состояние изменено позже, чем у сопоставляемого файла в параметре файл ; • -anewer — дата последнего доступа превосходит аналогичный пара- метр сравниваемого файла; параметр -ls — отображает на экране список файлов (как при выполне- нии команды ls ). Контрольные суммы На даты изменения можно надеяться, но необходимо дополнительное сред- ство проверки. Наилучшим методом является подсчет контрольной суммы. Допустим , что вы хотите отслеживать изменения в директории /etc. Для этого выполните следующую команду: md5sum /etc/* Утилита md5sum подсчитывает контрольную сумму указанных в качестве параметра файлов. На экране вы получите результат выполнения команды примерно такого вида: 783fd8fc5250c439914e88d490090ae1 /etc/DIR_COLORS e2eb98e82a51806fe310bffdd23ca851 /etc/Muttrc e1043de2310c8dd266eb0ce007ac9088 /etc/a2ps-site.cfg 4543eebd0f473107e6e99ca3fc7b8d47 /etc/a2ps.cfg c09badb77749eecbeafd8cb21c562bd6 /etc/adjtime 70aba16e0d529c3db01a20207fd66b1f /etc/aliases c3e3a40097daed5c27144f53f37de38e /etc/aliases.db 3e5bb9f9e8616bd8a5a4d7247f4d858e /etc/anacrontab fe4aad090adcd03bf686103687d69f64 /etc/aspldr.conf Результат отображается в две колонки: первая содержит контрольную сумму, а вторая — имя файла. Контрольные суммы подсчитываются только для файлов . Для каталогов будет выведено сообщение об ошибке. В данном случае указаны все файлы каталога /etc/*. Результат расчета вы- водится на экран. Но запоминать эти данные неудобно, поэтому логично будет записать их в файл, чтобы потом использовать его содержимое для анализа изменений. Следующая команда сохраняет результат в файле /home/flenov/md: md5sum /etc/* >> /home/flenov/md Чтобы сравнить текущее состояние файлов директории /etc с содержимым файла /home/flenov/md, необходимо выполнить команду: md5sum -c /home/flenov/md Глава 3 68 На экране появится список всех файлов, и напротив каждого должна быть надпись Success (Успех). Это означает, что изменений не было. Давайте мо- дифицируем какой-нибудь файл, выполнив, например, следующую команду: groupadd test Пока не будем вдаваться в подробности команды, сейчас достаточно знать, что она изменяет файл /etc/group. Снова выполняем команду проверки кон- трольных сумм файлов: md5sum -c /home/flenov/md Теперь напротив файла /etc/group будет сообщение об ошибке, поскольку контрольная сумма изменилась. Таким образом, даже если дата корректиров- ки файла осталась прежней, по контрольной сумме легко определить наличие вмешательства Что контролировать Некоторые администраторы следят только за файлами настройки. Это боль- шая ошибка, потому что целью атаки хакеров может быть не только конфи- гурация , но и исполняемые файлы. То, что Linux является продуктом с от- крытым кодом, имеет свои преимущества и недостатки. Порок в том, что профессиональные хакеры знают программирование. Им не составляет труда взять исходный код какой-либо утилиты и изменить его по своему усмотрению, добавив в него необходимые возможности. Таким обра- зом , очень часто в системе открыты потайные двери. Вы должны контролировать изменения как конфигурационных файлов, так и всех системных программ и библиотек. Я рекомендую следить за каталога- ми /etc, /bin, /sbin и /lib. Следить за пользовательскими файлами просто не имеет смысла, потому что эти файлы изменяются часто, и в тонне изменений найти что-то важное будет проблематично . А вот конфигурационные файлы и программы в настроенной системе не изменяются и не должны изменяться, поэтому любые корректи- ровки указывают на возможную проблему или вторжение. Замечания по работе с файлами ОС Linux достаточно демократично относится к именам создаваемых фай- лов , позволяя использовать абсолютно любые символы, кроме знака / , кото- рый является разделителем каталогов, и символа с кодом 0, который опреде- ляет конец имени файла. Все остальное можно применять. Самое страшное — это возможность использовать невидимые символы, так как хакер может создать программу, у которой в имени только нечитаемые Добро пожаловать в Linux 69 знаки , и пользователь не видит такого файла. Таким образом взломщики скрывают в ОС свои творения. Рассмотрим пример с использованием перевода строки. Допустим, что хакер назвал свой файл hacker\nhosts.allow. В данном случае под "\n" подразумева- ется перевод каретки, а значит, имя состоит из двух строк: hacker hosts.allow Не все программы могут обработать такое имя правильно. Если ваш файло- вый менеджер работает неверно, то он отобразит только вторую строку — hosts.allow, и администратор не заподозрит ничего страшного в таком имени. Еще один способ спрятать файл — в качестве имени указать точку и пробел " " или две точки и пробел " ". Файл с именем в виде точки всегда указы- вает на текущую директорию. Администратор, выполнив команду ls , может не заметить, что существуют два файла с одинаковыми именами, а пробела все равно не видно. Пробелы можно вставлять в любые имена файлов, например, перед именем (" hosts.allow") или, наоборот, в конце имени, и невнимательный администра- тор ничего не заметит. Чтобы увидеть конечный пробел, можно при выводе добавлять к каждому имени символ косой черты (/). Для этого при вызове команды ls используйте ключ -F Еще один вариант спрятать файл — заменять одни символы на другие, схо- жие по начертанию. Например, посмотрим на имя файла hosts.a11ow. Ничего не замечаете подозрительного? При беглом взгляде ничего обнаружить не- возможно , но если приглядеться повнимательнее, то станет видно, что вместо букв l (L) стоит цифра 1 (единица). Хакеры могут использовать этот прием. Еще можно подменять букву b на d. И здесь трудно что-либо заподозрить, потому что если человек каждый день видит одно и то же, то, чаще всего, воспринимает желаемый текст за дейст- вительный . Получается банальный обман зрения. Внимание — главное оружие администраторов. Вы должны проявлять инте- рес к любой мелочи, и нельзя позволить обмануть ваше зрение. |