26 апреля, 2024

Основы Linux. Часть 20 (файлы устройств)

Содержание:

С возвращением, мои хакеры!

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

Для понимания принципа как использовать и администрировать жесткие диски и другие устройства в Linux, важно понимание того, как Linux определяет эти устройства в своей файловой системе.

Очень часто, если мы используем жесткий диск в хаке или при криминалистическом исследовании, нам необходимо обращаться к имени устройства. Имена файлов устройств позволяют устройству (например, жесткому диску) взаимодействовать с системным программным обеспечением и ядром Linux через системные вызовы. Эти файлы НЕ являются драйверами устройств, а являются скорее точками взаимодействия, которые используются для связи с драйверами. Linux хранит все файлы устройств для каждого устройства в системе в директории /dev.

В этой статье мы рассмотрим, как Linux называет файлы устройств и как происходит взаимодействие с файловой системой через директорию /dev и ее файлы.

Директория /dev

Директория /dev содержит файлы, которые представляют собой физические периферийные устройства, присутствующие в системе, такие как диски, терминалы и принтеры. Директория /dev находится на один уровень ниже корневой директории /. Если мы перейдем в нее, то увидим записи для всех наших устройств.

кali> cd / dev
 kali> ls -l

Блочные файлы устройств против символьных

Linux делает различие между блочными (block device) и символьными (character device) устройствами. Символьные устройства — это те, которые передают данные в машину или из нее без буферизации, напрямую. К ним относятся клавиатура, мышь и монитор. Поскольку данные не буферизуются, то обмен этими данными — это, как правило, медленный процесс.

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

Читать также:  Как взламывать Wi-Fi: начинаем с терминов и технологий

Обратите внимание на то, что в длинном списке файлов в директории /dev некоторые файлы начинаются с «c», а некоторые — с «b». Символьные устройства начинаются с «c», а блочные устройства начинаются с «b».

В третьей строке каталога /dev вы можете увидеть, что там есть целая директория с именем «block». Давайте перейдем туда и посмотрим, что в ней находится.

кali> cd /block
 kali> ls -l

Здесь мы видим список всех блочных устройств. В первой строке мы видим sr0 — это первый CD-ROM (Linux, как правило, начинает отсчет с 0, а не с 1). В нижней части sda, sda1, sda2, sda5 (у вас картинка может несколько отличаться), где sda1 представляет первый первичный раздел на диске SATA, а sda2 представляет второй первичный раздел на этом же диске.

Соглашение об именовании устройств в Linux

Первоначально жесткие диски были двух типов: IDE или SCSI. IDE (или более поздняя версия E-IDE) была разработана как недорогая альтернатива для недорогих ПК. Они были относительно медленными и разрешали иметь только четыре устройства на одной машине. Кроме того, они должны были быть настроены по принципу master и slave. У каждой комбинации master и slave устройств был один кабель и контроллер.

Более быстрая, но более дорогая альтернатива — это SCSI (Small Computer System Interface). Диски SCSI были быстрее и дороже. Помимо их скоростного преимущества, им не нужна конфигурация master/slave, и они поддерживали подключение в количестве до 15 устройств.

Linux назначает имена IDE дискам, начиная с букв hd, а SCSI-дисков — с sd. В последние годы с развитием и распространением дисков SATA мы видим, что Linux обозначает эти диски как sd, как и SCSI-диски.

Читать также:  Как удаленно вести прослушку микрофона на взломанном компьютере

Первый IDE-диск обозначается как hda, второй hdb, третий hdc и т.д. То же самое происходит с SCSI, а теперь SATA-дисками: первый обозначается sda, второй sdb, третий sdc и т. д.

Другие файлы устройств включают такие имена:

  • /dev/usb — USB-устройства
  • /dev/lp — принтер с параллельным портом (LPT)
  • /dev/tty — локальный терминал
  • /dev/fd — флоппи-дисковод (кто-нибудь все еще использует дискеты?)

Логические и физические разделы жестких дисков

Linux может распознавать четыре первичных (primary) раздела жесткого диска на одну операционную систему. Это не ограничивает нас четырьмя жесткими дисками или четырьмя разделами, так как мы также можем использовать логические (logical) или расширенные (extended) разделы. У нас может быть до 15 логических или расширенных разделов на один диск, и каждый из этих разделов действует как собственный жесткий диск и работает так же быстро, как первичный раздел.

Первым основным разделом в Linux с SATA-диском будет sda1, второй sda2, третий sda3 и четвертый sda4. Кроме этих первичных разделов мы все еще можем продолжать разбивать диск, но уже на логические разделы. Первым логическим разделом на SATA-диске будет sda5. За этим последует 14 логических дисков, если необходимо, с последним логическим диском на первом диске SATA, являющимся sda19 (4 первичных и 15 логических разделов).

В Linux обычно есть отдельный раздел для пространства подкачки. Место подкачки — это область жесткого диска, которая используется как виртуальная память. Это означает, что когда у нас заканчивается оперативная память (ОЗУ) для определенного процесса или приложения, операционная система будет использовать это пространство на жестком диске, как если бы это была оперативная память, но, очевидно, намного медленнее (примерно в 1000 раз).

Специальные устройства

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

/dev/null

Это устройство представляет собой приемник данных или так называемый «bit bucket» («корзина битов»). Эта штука заставляет данные исчезать. Если перенаправить вывод данных на это устройство, они исчезнут. Если вы начнете считывать данные из /dev/null, вы получите пустую строку. Если нам нужно стереть данные с диска и сделать его чистым, можно использовать такую команду:

dd if=/dev/null of=/dev/sda
 /dev/zero

Это устройство можно использовать в качестве входного файла, предоставляющего необходимое количество нулевых байтов (0x00). Оно часто используется для инициализации файла или жесткого диска.

/dev/full

Это устройство является специальным файлом, который всегда возвращает ошибку «device full» («диск заполнен»). Обычно он используется для проверки того, как программа реагирует на ошибку «disk full». Он также может предоставлять бесконечное количество нулевых байтов для любого процесса тестирования.

/dev/random

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

Читать также:  Основы Linux для хакеров, Часть 2 (Создание каталогов и файлов)

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

Для этого мы можем воспользоваться командой dd. Например:

dd if=/dev/random of=evidencefile bs=1 count=1024

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

Предыдущие статьи ( 1, 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19).

Добавить комментарий