1. Что такое inode (Индексный дескриптор)
- Определение: inode — это внутренняя структура данных файловой системы Linux, которая хранит всю административную информацию о файле.
- Содержимое: В inode хранятся:
- Права доступа (permissions).
- Владелец и группа.
- Размер файла.
- Временные метки (timestamps).
- Адреса блоков данных на диске, где физически находится содержимое файла.
- Чего нет: inode не содержит имя файла. Имя файла хранится в директории.
Простыми словами: представь, что каждый файл на диске имеет свой паспорт, который называется (индексный дескриптор).
- Что это? Это внутренняя структура данных, которая хранит всю информацию о файле, кроме его имени: кто владелец, какие права доступа (), когда был изменен, и где физически на диске лежат его данные.
- Главное: У каждого файла есть уникальный . — это данные, а имя файла — это просто ярлык, который хранится в папке (директории) и указывает на этот .
2. Жесткие ссылки (Hardlinks)
- Принцип: Жесткая ссылка — это дополнительное имя файла, которое напрямую указывает на тот же самый inode.
- Свойство: Один файл может иметь несколько имен (hardlinks). Все эти имена находятся на одном и том же уровне; ни одно из них не является «оригинальным» или «главным».
- Поведение: Если ты удаляешь один из жестких ссылок (имя), файл остается доступным через другие ссылки до тех пор, пока не будет удалена последняя ссылка. Только тогда inode освобождается, и данные удаляются с диска.
- Ограничения:
- Не могут ссылаться на директории.
- Не могут работать между разными файловыми системами (cross-device).
Простыми словами: жесткая ссылка — это просто второе имя для того же самого файла.
- Как работает? Ты создаешь новую запись в директории, которая указывает на тот же самый .
- Аналогия: Как если бы один человек получил два разных имени (например, официальное и домашнее прозвище), но паспорт () у него остался один.
- Особенности:
- Они равноценны. Нет «оригинала» и «копии».
- Данные удаляются, только когда ты удаляешь последнюю ссылку. Если ты удалишь «первое» имя, файл останется доступен через «второе» имя, потому что остается на месте.
- Ограничение: Работает только в рамках одной файловой системы.
3. Символические Ссылки (Symbolic Links / Symlinks)
- Символическая ссылка — это отдельный, независимый файл, который содержит текстовый путь к другому файлу. Это похоже на ярлык Windows.
- Как работает? имеет свой собственный . Внутри этого записано: «Я веду к файлу по имени «.
- Аналогия: Как записка с адресом. Записка () — это отдельный объект.
- Особенности:
- Зависимость: Если ты удалишь или переименуешь целевой файл, записка () останется, но будет вести в никуда. Она станет «битой» (broken).
- Гибкость: Может указывать на директории и на файлы, расположенные на других дисках (в других файловых системах).
4. Сравнение и применение (важность для кибербезопасности)
Свойство |
Жесткая Ссылка (Hardlink) |
Символическая Ссылка (Symlink) |
|---|---|---|
Указывает на |
inode |
Имя файла/путь |
Удаление цели |
Не приводит к поломке |
Делает ссылку недействительной |
Кросс-ФС |
Нет (только в рамках одной ФС) |
Да |
На директории |
Нет |
Да |
Создание и особенности ссылок
1. Жесткие ссылки (Hardlinks)
Жесткая ссылка — это дополнительное имя для уже существующего файла, указывающее непосредственно на тот же inode.
Создание:
ln target_file link_name
Ключевые особенности (на примере hosts и hardhosts):
- Один inode: Команда ls −i (где −i показывает номер inode) доказывает, что обе записи имеют одинаковый номер inode.
- Счетчик ссылок: В выводе ls -l второй столбец показывает счетчик жестких ссылок (hardlink counter). Он увеличивается при создании новой hardlink и уменьшается при ее удалении. Файл удаляется с диска только когда счетчик достигает нуля.
- Редактирование: Изменение содержимого любой из ссылок (hosts или hardhosts) немедленно отражается на другой, потому что они обращаются к одним и тем же блокам данных.
- Восстановление: Если ты удалишь «оригинальный» файл (hosts), но останется hardhosts, ты можешь использовать hardhosts для восстановления файла (например, ln hardhosts hosts), так как они равноценны и содержат все данные.
2. Символические ссылки (Symlinks / Softlinks)
Символическая ссылка — это отдельный файл, который просто хранит текстовый путь к файлу-цели.
Создание:
**ln −s target_file link_name**
- Опция −s обязательна (S — symbolic).
Ключевые особенности (на примере simhosts):
- Отдельный inode: Symlink имеет свой собственный, уникальный inode и небольшой размер (равный длине текстового пути к цели).
- Зависимость: Если файл-цель (hosts) удален, symlink становится битой (broken) и обычно отображается красным цветом в ls.
- Лучшая практика (Best Practice):
- Всегда используй абсолютные пути при создании symlinks!
- Если ты создаешь symlink с относительным путем (ln -s hosts simhosts2) и затем перемещаешь саму ссылку (mv simhosts2 /tmp), ссылка становится недействительной, поскольку ищет hosts относительно нового местоположения (/tmp/hosts).
Что такое атаки с символическими ссылками
Атака с символической ссылкой — это тип атаки на права доступа, при которой злоумышленник использует символическую ссылку (), чтобы обмануть привилегированную программу (которая обычно работает с правами ), заставив её выполнить операцию (запись, удаление, изменение) не над тем файлом, который был задуман, а над важным системным файлом.
1. Как работает
Как ты помнишь, символическая ссылка — это просто текстовый указатель на имя другого файла. Программа, которая следует по этой ссылке, фактически не знает, что ее «обманывают», пока не дойдет до конечного файла.
2. Сценарий атаки (Race Condition)
Наиболее распространенный и опасный вид — это атака гонки (), которая эксплуатирует короткий промежуток времени между двумя действиями программы:
Шаг |
Что делает программа (например, -служба) |
Что делает злоумышленник |
1. Проверка |
Программа проверяет права доступа к временному файлу (например, ). Проверка проходит успешно. |
Злоумышленник ждет. |
2. Манипуляция (гонка) |
В этот короткий момент после проверки и до записи данных… |
Злоумышленник быстро удаляет временный файл () и на его место создает , который указывает на системный файл, который он хочет повредить (например, или ). |
3. Действие |
Программа думает, что работает с безопасным временным файлом, и записывает данные (например, логи) в путь, который теперь ведет в системный файл. |
Злоумышленник получает желаемое: системный файл изменен/поврежден с правами . |
3. Цели атаки
Злоумышленники обычно нацелены на:
- Перезапись важного файла: Заставить программу записать свой вывод (например, логи, отчет об ошибке или конфигурационные данные) в файл типа или .
- Удаление системного файла: Использовать для того, чтобы -программа удалила важный файл.
- Повышение привилегий: Иногда, заставляя -процесс писать в конкретное место, можно создать условия для повышения прав.
4. Защита от атак
Для защиты от этого типа атак системные администраторы и разработчики используют несколько методов:
- Не следовать ‘ам: Использование флагов, таких как в системных вызовах, чтобы гарантировать, что привилегированные программы не следуют символическим ссылкам при работе с файлами во временных директориях ().
- Проверка прав: Программа должна проверять не только права доступа, но и то, что файл является обычным файлом, а не .
- Безопасные директории: Запуск привилегированных программ в специальных безопасных окружениях ( или ), где они не имеют доступа к важным системным директориям.
—
Данный материал был переведён с английского в рамках курса Linux Foundation Certified System Administrator (LFCS): Unit 1

