Введение в файловую систему Linux

Введение в файловую систему Linux

Иерархия файловой системы Linux (FHS). FHS (Filesystem Hierarchy Standard).

1. Основные принципы FHS

  • Все есть файл: Устройства, процессы, конфигурация — все представлено как файлы.
  • Конфигурация: В основном хранится в ASCII-текстовых файлах, что упрощает их чтение и редактирование.
  • Чек на запись: Для быстрой проверки прав на запись в директории используй команду touch filename.

2. Критически важные директории (корень — /)

Директория
Назначение
Важность для кибербезопасности
/etc
Конфигурационные файлы. Содержит все системные настройки, включая базу данных пользователей (/etc/passwd), сетевые настройки и настройки служб.
Критически важна! Редактирование этих файлов — основа администрирования.
/home
Домашние директории обычных пользователей. Каждый пользователь имеет здесь свою поддиректорию.
Основное место для хранения личных данных. Обычный пользователь имеет право записи только в свой домашний каталог.
/var
Variable data (Изменяемые данные). Для файлов, которые часто меняются в процессе работы системы.
Содержит логи (/var/log), кэш (/var/cache) и данные веб-серверов.
/var/log
Лог-файлы системы и приложений.
Жизненно важна! Основной источник для расследования инцидентов и анализа безопасности.
/usr
Unix System Resources (Программные файлы). Содержит большую часть пользовательских программ и библиотек.
Здесь находятся все исполняемые файлы (бинарники) и библиотеки (/usr/bin, /usr/sbin, /usr/lib).
/usr/local
Для установки локально скомпилированных или нестандартных программ.
Важно для установки хакерских инструментов или скриптов, которые не входят в стандартный репозиторий.
/tmp
Временные файлы. Может быть очищена при перезагрузке.
Всем разрешена запись! Часто используется как место для временного хранения файлов или эксплойтов.

3. Директории исполняемых файлов и устройств

Директория
Назначение
Привилегии
Примечание
/bin
Binaries (Бинарные файлы). Основные команды для обычных пользователей.
Доступно всем.
Часто является символической ссылкой на /usr/bin.
/sbin
System Binaries. Команды для системного администрирования.
Требуют sudo (root-привилегии).
Часто является символической ссылкой на /usr/sbin.
/dev
Devices (Устройства). Содержит файлы устройств, которые представляют аппаратное обеспечение (например, диски, порты).
Файл /dev/sda представляет твой первый жесткий диск.
/boot
Файлы, необходимые для загрузки системы (включая ядро Linux — vmlinuz).
Критически важна для загрузки ОС.
/root
Домашняя директория пользователя root.
Доступен только root и тем, кто использует sudo.

В твоем обучении кибербезопасности понимание, что /etc содержит все настройки, /var/log — все следы, а /tmp — это общедоступная свалка, будет иметь первостепенное значение при аудите систем и тестировании на проникновение.

LS: Список файлов и директорий

Команда ls (list) используется для просмотра содержимого директории. Она является незаменимой для навигации и аудита системы.

1. Основные опции LS

Опция
Синтаксис
Назначение
Скрытые файлы
ls −a (all)
Показывает все файлы, включая скрытые (те, чьи имена начинаются с точки, например .bashrc).
Длинный формат
ls −l (long)
Предоставляет подробный список, включая права доступа, количество ссылок, владельца, группу, размер и время изменения.
Сортировка по времени
ls −t (time)
Сортирует файлы по времени последнего изменения, самые новые — вверху.
Обратный порядок
ls −r (reverse)
Меняет порядок сортировки на обратный.

2. Самая полезная комбинация

  • LS -LRT: Эта комбинация (ls −lrt) используется для вывода подробного списка, отсортированного по времени (t), в обратном порядке (r), что помещает последний измененный файл в конец списка.
Комбинация
Применение в безопасности
ls −lrt /var/log
Ключевой метод! Помогает быстро определить, какой файл журнала (log file) был изменен последним, что критически важно при расследовании инцидентов.

3. Просмотр свойств директории

Если ты используешь ls −l /etc, ты увидишь содержимое директории /etc, а не её собственные свойства.

  • Опция −d (directory):ls −ld /etc
  • Назначение: Опция −d заставляет ls выводить свойства самой директории (например, ее права доступа, владельца), а не её содержимое.
  • Важность: Это будет незаменимо при управлении правами доступа (permissions), поскольку права часто устанавливаются именно на директории, и тебе нужно видеть их текущие настройки.

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

Подстановочные знаки (Wildcards) и глоббинг

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

1. Основные подстановочные знаки

Символ
Название
Значение
Пример
*****
Звездочка (Star)
Любое количество любых символов (включая ноль).
ls a∗ (показать все файлы, начинающиеся с «a»)
?
Вопросительный знак
Один одиночный любой символ.
ls file? (показать file1, file2, но не file10)
[ ]
Квадратные скобки
Один символ, который является одним из перечисленных символов или находится в указанном диапазоне.
ls [nm]∗ (начинается с «n» или «m»)
[ — ]
Диапазон в скобках
Диапазон символов.
ls [a-e]∗ (начинается с «a», «b», «c», «d» или «e»)

Примеры глоббинга

  • ls b∗.?: Ищет файлы, начинающиеся с «b», за которыми следует любое количество символов, затем точка (.), а после точки — один любой символ. (Например, bash_completion.d)
  • ls ab???: Ищет файлы, начинающиеся с «ab», за которыми следуют ровно три любых символа. (Итого, имя из пяти символов).

3. Диапазоны и группировка ({})

Фигурные скобки позволяют указать несколько строк для создания файлов или директорий в одной команде.

Синтаксис
Назначение
Пример
Числовой диапазон
Создание файлов с последовательной нумерацией.
touch file{1..100} (создаст 100 файлов: file1,file2,…file100)
Разделение запятыми
Указание нескольких имен.
mkdir data/{sales,accounts} (создаст две директории: data/sales и data/a

ls b∗ показывает имена файлов, начинающихся с ‘b’, и содержимое директорий, начинающихся с ‘b’.

ls −d b∗ Только имена и свойства файлов и директорий, начинающихся с ‘b’.

Команда cp (Copy): Копирование файлов и директорий

Команда cp используется для копирования файлов и директорий. Базовый синтаксис: cp source destination.

1. Основной синтаксис и логика

Синтаксис
Назначение
cp file .
Копирует file в текущую директорию (.).
cp /etc/passwd mydir
Опасно: Если mydir не существует, cp создаст файл с именем mydir и скопирует в него содержимое passwd.
cp /etc/passwd mydir/
Безопасно: Слэш (/) в конце обязательно требует, чтобы mydir была директорией. Если mydir не существует или является файлом, команда завершится с ошибкой.

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

2. Копирование директорий (рекурсия)

Для копирования директории и всего ее содержимого (включая все поддиректории и файлы) необходимо использовать рекурсивную опцию:

cp −R source_dir destination_dir

  • −R (Recurse): Копирует рекурсивно (включая поддиректории).
  • На заметку: В некоторых системах может использоваться строчная -r.

3. Копирование скрытых файлов

Копирование скрытых файлов (начинающихся с точки, например, .bashrc) требует особой внимательности:

Команда
Что копирует
cp ∗ /tmp
Копирует все видимые файлы и директории. Пропускает скрытые файлы.
cp .∗ /tmp
Копирует все, что начинается с точки, включая специальные ссылки . (текущая директория) и .. (родительская директория), что обычно приводит к ошибке или нежелательному поведению.
cp .∗ /tmp (с исключением)
Наиболее корректный способ: Обычно используется cp .∗ target с последующим игнорированием ошибки о копировании . и …
  • Опция −a (archive): Используется для сохранения исходных свойств файлов (разрешений, владельца, временных меток) при копировании. *Сама по себе -a не решает проблему скрытых файлов с помощью .

Альтернатива для архивирования: Если тебе нужно полностью и безопасно скопировать всё содержимое директории (включая скрытые файлы, ссылки и права), лучше использовать утилиту tar (tape archiver), которая специально предназначена для архивации и копирования полных структур.

4. Права доступа

  • Чтение источника: Ты можешь скопировать файл, только если у тебя есть права на чтение исходного файла. Попытка скопировать /etc/shadow (который читается только root) обычным пользователем приведет к Permission denied.
  • Запись в назначение: У тебя должны быть права на запись в директорию назначения.

Основные команды для работы с директориями

1. Перемещение: cd и pwd

Команда
Назначение
pwd
Print Working Directory. Показывает текущий абсолютный путь.
cd
Change Directory. Используется для смены текущей директории.
cd /tmp
Переход в директорию /tmp (использование абсолютного пути).
cd data
Переход в директорию data, находящуюся внутри текущей (использование относительного пути).

2. Создание директорий: mkdir

Команда mkdir (make directory) используется для создания новых директорий.

Важные особенности:

  • Права доступа (Permissions):
    • Попытка создать директорию в корневой ФС (например, /files) без sudo приведет к Permission denied, так как обычный пользователь не имеет прав на запись в корень (/).
    • Абсолютный путь (/files) vs. Относительный путь (data) — всегда следи, в какой части ФС ты пытаешься работать.
  • Создание вложенных путей (−p):
    • Если ты пытаешься создать директорию files/data, но директория files еще не существует, команда mkdir завершится ошибкой.
    • Решение: Используй опцию −p (parents), чтобы автоматически создать все недостающие родительские директории в пути.mkdir −p files/data
  • Проверка свойств директории:
    • После создания используй ls −ld files (вместо ls -l files) для просмотра свойств самой директории (разрешений, владельца), а не её содержимого.

3. Удаление директорий: rmdir

Команда rmdir (remove directory) используется для удаления директорий.

Важные особенности:

  • Только пустые директории: rmdir работает только в том случае, если директория полностью пуста.
  • Удаление пути (−p): Ты можешь использовать −p для удаления родительских директорий, если они становятся пустыми после удаления их дочерних элементов:rmdir −p files/dataЭта команда сначала удалит data. Если после этого files станет пустой, она удалит и files.
  • Удаление непустых директорий: Для удаления директории, которая не является пустой, используется команда rm −r (которую вы, вероятно, рассмотрите позже). rmdir безопаснее, так как предотвращает случайное удаление данных.

Пути к файлам (Pathnames)

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

1. Абсолютный путь (Absolute Path)

Описание
Обозначение
Пример
Путь, который всегда начинается от корневой директории (/).
Всегда начинается со слэша (/).
/var/log/messages
Плюсы:
Однозначность. Всегда ясно, на какой файл ты ссылаешься, независимо от того, в какой директории ты находишься.
Совет:
Рекомендуется использовать для важных операций (например, в скриптах), чтобы избежать путаницы и ошибок.

2. Относительный путь (Relative Path)

Описание
Обозначение
Пример
Путь, который отсчитывается от текущей рабочей директории (pwd).
Не начинается со слэша (/).
log/messages (сработает, если текущая директория — /var)
Плюсы:
Удобство и краткость. Требуется меньше набора текста.
Совет:
Используется для быстрой навигации и работы с файлами в непосредственной близости от текущего местоположения.

3. Специальные обозначения в относительных путях

Обозначение
Что Означает
Пример (если pwd — /var/cache)
. (точка)
Текущая директория.
cp file.txt . (копировать в текущую директорию)
.. (две точки)
Родительская директория (на один уровень выше).
cp passwd .. (копировать файл на уровень /var)
/ (тильда)
Домашняя директория текущего пользователя.
cd  /documents (переход в /home/oxana/documents)

4. Визуализация относительного пути

Предположим, ты находишься в директории: /var/cache/data

  1. .. переведет тебя в /var/cache
  2. ../log/messages
    • .. переводит в /var/cache.
    • ../ переводит из /var/cache в /var.
    • log/messages ищет файл в /var/log/messages.

Команда mv (Move)

Команда mv используется для перемещения или переименования файлов и директорий.

1. Основное назначение

Действие
Синтаксис
Описание
Переименование
mv oldname newname
Если директория назначения совпадает с исходной, mv просто переименовывает файл/директорию.
Перемещение
mv file destination/
Перемещает файл из текущего местоположения в destination/ (удаляет из старого и создает в новом).

Ключевая особенность: Перемещение и переименование — это, по сути, одна и та же операция в рамках одной файловой системы.

2. Привилегии и логика перемещения

Перемещение файла — это не просто его копирование, а изменение его местоположения в файловой системе. Это требует определенных прав:

  • Право на запись в директорию-источник: Чтобы забрать файл из исходной директории, тебе нужны права на запись (write permissions) в эту исходную директорию.
    • Пример: Попытка mv /etc/passwd file завершится ошибкой Permission denied, потому что у обычного пользователя нет права на запись в директорию /etc, а следовательно, он не может удалить оттуда файл.
  • Право на запись в директорию-назначение: Тебе также нужны права на запись в директорию, куда ты перемещаешь файл.

Удаление файлов и директорий (rm)

1. Удаление пустых директорий

  • rmdir (remove directory): Используется только для удаления пустых директорий. Если директория содержит файлы или другие директории, rmdir выдаст ошибку.

2. Универсальное удаление (rm)

Команда rm (remove) используется для удаления файлов и директорий, которые не являются пустыми.

Команда
Опция
Назначение
rm filename
(Нет)
Удаляет указанный файл.
rm −i filename
-i (interactive)
Запрашивает подтверждение перед удалением каждого файла. Повышает защиту от случайного удаления.
rm −f filename
-f (force)
Форсирует удаление, не запрашивая подтверждения. Используй осторожно!
rm −r directory
-r (recursive)
Удаляет директорию вместе со всем ее содержимым (вложенными файлами и поддиректориями). Обязательно для непустых директорий.

3. Самая опасная команда: rm −rf

Комбинация rm −rf является самой сильной командой для удаления, так как она рекурсивно удаляет все содержимое (-r) и делает это без запроса подтверждения (-f).

  • Применение: Используется, когда ты абсолютно уверена в том, что удаляешь, и тебе нужно удалить непустую директорию.rm −rf target_dir
  • Легендарная команда-убийца:sudo rm −rf / −−no−preserve−rootЭто команда, которую нельзя запускать.
    • sudo дает права root.
    • rm −rf удаляет рекурсивно и без подтверждения.
    • / (слэш) указывает на корневую директорию — то есть всю файловую систему.
    • −−no−preserve−root отключает встроенную защиту Linux, которая по умолчанию блокирует rm -rf /.
    • Результат: Необратимое уничтожение всей операционной системы.

4. Полезные советы по работе в терминале

  • Ctrl C: Универсальное сочетание клавиш для прерывания запущенной команды (например, для остановки rm -i file*).
  • Ctrl U: Удаляет всю строку ввода, на которой находится курсор. Очень удобно, если ты вдруг начала набирать опасную команду вроде вышеуказанной.

Данный материал был переведён с английского в рамках курса Linux Foundation Certified System Administrator (LFCS): Unit 1

Комментарии

Комментариев пока нет. Почему бы ’Вам не начать обсуждение?

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *