31 марта, 2023

Основы Linux. Часть 19 (создание ссылок на файлы)

Содержание:

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

Как вы, наверняка, уже знаете, файловая система в Linux структурирована несколько иначе, чем в Windows. Здесь нет физических дисков — есть просто логическое дерево файловой системы с корнем наверху (да, мы знаем, что корни должны быть внизу, но это перевернутое дерево).

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

Иногда мы хотим упростить имя файла или иногда нужно связать файл в одной директории с файлом в другой директории. И в Linux есть, по крайней мере, два способа сделать это — символические («мягкие») ссылки и «жесткие» ссылки. Чтобы понять, как эти способы работают и чем они друг от друга отличаются, нам придется немножко углубиться в основные сведения о внутренней структуре файловой системы Linux.

Файловая структура в Linux

Мы знаем, что иерархическая структура файловой системы Linux отличается от структуры в Windows, но изнутри файловые системы ext2, ext3, ext4 (наиболее популярные файловые системы для Linux) сильно отличаются от NTFS в Windows. На структурном уровне Linux хранит все файлы в трех основных разделах:

  • Суперблок (Superblock)
  • Таблица индексных дескрипторов (Inode Table)
  • Блоки данных (Data Block)

Давайте кратко пробежимся по каждому из них.

Суперблоки

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

Читать также:  Хакеры угрожают Apple о взломе миллионов аккаунтов iCloud

Таблица индексных дескрипторов (Inode Table)

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

Всегда важно помнить, что при удалении файла удаляется только индексный дескриптор (inode).

Блоки данных

Блоки данных содержат данные, хранящиеся в самих файлах, а также имя файла.

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

Жесткие ссылки

Файлы, связанные между собой «жесткой» ссылкой идентичны. Они имеют одинаковый размер и один и тот же индексный узел (inode). Когда один из жестко связанных файлов изменяется, то и связанный с ним файл-ссылка также меняется. Вы можете сделать «жесткую» ссылку на файл столько раз, сколько нужно, но такая ссылка не может выходить за рамки одной файловой системы. Они должны находиться в одной файловой системе, так как они совместно используют один и тот же индексный дескриптор (inode).

«Мягкие» или символические ссылки

Символические или мягкие ссылки отличаются от жестких тем, что они не используют один и тот же индексный узел (inode). Символическая ссылка — это просто указатель на другой файл. Это похоже на ярлыки в системе Windows, и у них также разные размеры файлов. В отличие от жестких ссылок, символическим ссылкам нет необходимости находиться в одной и той же файловой системе с файлом, на который они ссылаются.

Шаг 1. Просмотр ссылок

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

кali> cd /bin

Посмотрим на файлы в директории bin.

кali> ls -l

Обратите внимание, что несколько файлов здесь показывают стрелку (->), указывающую на другой файл. Это и есть символические ссылки. Также обратите внимание, насколько мал их размер. Каждая из них занимает всего 6 байт. Это потому, что они являются всего лишь указателями, показывающими на другой файл. Блок данных такой ссылки просто содержит информацию о пути к файлу, на который она ссылается.

Читать также:  Основы Linux. Часть 24 (Философия Linux)

Когда вы редактируете символически связанный файл, то фактически вы редактируете целевой (тот на который указывает ссылка) файл, так как символический файл — это всего лишь путь к целевому файлу. Надеемся, что это понятно.

Шаг 2. Создание символических ссылок

Давайте создадим несколько ссылок. Начнем с символических, поскольку они наиболее распространены в большинстве систем. Хотя символические ссылки могут быть созданы где угодно, мы создадим их в каталоге metasploit-framework, чтобы облегчить себе запуск msfconsole.

Для начала перейдите в каталог /usr/share/metasploit-framework.

кali > cd /usr/share/metasploit-console

Посмотрим на содержимое этой директории.

кali> ls -l

Чтобы создать символическую или мягкую ссылку, мы воспользуемся командой ln (от слова «link») с ключом -s (символическая) и укажем имя файла, на который хотим сослаться (целевой файл). Затем зададим имя для ссылки, которую хотим создать. Вы можете использовать как относительные пути, так и абсолютные пути для связывания двух файлов.

Обычно, когда мы хотим войти в консоль Metasploit, мы вводим msfconsole, помните? Теперь давайте предположим, что мы хотим изменить это так, чтобы мы могли просто набрать в консоли metasploit и войти в консоль, вместо того чтобы постоянно помнить это неудобное слово — «msfconsole». Можно связать новый файл metasploit со старым файлом msfconsole (т.е. сделать ссылку), чтобы всякий раз, когда мы вводим в консоль metasploit, он переадресовывался на msfconsole.

Вот как можно это сделать

kali> ln -s msfconsole metasploit

Обратите внимание, насколько маленький размер у символического файла-ссылки metasploit. Всего лишь 12 байт, потому что это только указатель, путь к файлу, к которому он привязан.

Теперь, для того чтобы войти в msfconsole, мы можем просто ввести либо metasploit, либо msfconsole, и оба приведут к одному и тому же месту — консоли Metasploit Framework.

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

Шаг 3. Создание жестких ссылок

Для создания жесткой ссылки используется практически такой же синтаксис, за исключением того, что мы используем команду ln (link) без параметра -s, а затем указываем существующий файл, на который хотим поставить жесткую ссылку. И, наконец, определяем имя целевого файла, который и будет создан как ссылка для существующего файла.

Вернемся к нашему примеру с msfconsole. Давайте создадим еще и жесткую ссылку между msfconsole и более простой командой, скажем, msf. Мы можем сделать это, набрав в консоли такую команду:

kali> ln msfconsole msf

Как видно на скриншоте выше, мы создали жесткую ссылку под названием msf. Помните, что жесткие ссылки совместно используют один и тот же inode со связанным файлом, именно поэтому они имеют одинаковый размер. Также обратите внимание, что наш новый файл msf имеет тот же размер, что и msfconsole в 4103 байта. Теперь, когда мы захотим вызвать (запустить) msfconsole, у нас есть возможность ввести как metasploit, msf, так и исходный вариант запуска msfconsole. Все они будут работать одинаково хорошо.

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

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