У світі операційних систем Linux стиснення та архівація є важливими процесами, які дозволяють користувачам ефективно керувати своїми файлами і зберігати простір на диску. Ці два поняття спрощують зберігання, передачу та резервне копіювання даних в Linux-середовищі, зменшуючи обсяг файлів і полегшуючи їх обробку. Давайте розглянемо їхню важливість та як вони впливають на повсякденну роботу в Linux. Стиснення Файлів: Стиснення – це процес зменшення обсягу файлу або каталогу з метою зменшення вимог до дискового простору. Це дозволяє економити місце на диску і прискорює передачу файлів через мережу. Стиснення може бути як втратним, так і безвтратним, в залежності від того, чи втрачається якість даних під час стиснення.
Архівація Файлів: Архівація – це процес об’єднання кількох файлів та каталогів в один архівний файл, який може бути легко збережений, переданий та розпакований. Архіви дозволяють створювати компактні пакети даних, що полегшує організацію та зберігання інформації. Заощадження Простору: Стиснення та архівація допомагають користувачам зберігати значно більше даних на обмеженому дисковому просторі. Це особливо важливо для серверів та систем з обмеженим простором на жорсткому диску. Забезпечення Цілісності Даних: Під час архівації та стиснення даних, система може перевіряти цілісність даних, що допомагає виявляти та виправляти пошкоджені файли. Ефективний Обмін Файлами: Стиснені та архівні файли займають менше місця і швидше передаються через мережу, що робить їх ідеальними для обміну даними. Резервне Копіювання: Архіви дозволяють легко створювати резервні копії важливих даних та відновлювати їх у разі втрати або пошкодження. У Linux існують багато утиліт та команд для стиснення та архівації файлів, і знання цих процесів є важливим для ефективного управління даними. Розуміння стиснення та архівації допомагає користувачам максимально використовувати ресурси та забезпечує безпеку та доступність даних в Linux-середовищі.
ЩО ТАКЕ СТИСНЕННЯ?
Цікава тема стиснення могла б заповнити всю книгу сама по собі, але для цієї книги нам потрібно лише елементарне розуміння процесу. Стиснення, як випливає з назви, робить дані меншими, тим самим вимагаючи меншої ємності для зберігання та полегшуючи передачу даних. Для ваших цілей, як початківця хакера, буде достатньо класифікувати стиснення як з втратами або без втрат. Стиснення з втратами дуже ефективно зменшує розмір файлів, але цілісність інформації втрачається. Іншими словами, файл після стиснення не зовсім такий, як оригінал.
Цей тип стиснення чудово підходить для графічних, відео- та аудіофайлів, де невелика різниця у файлі малопомітна (.mp3, .mp4, .png .jpg тощо всі алгоритми стиснення з втратами. Якщо піксель у файлі .png або одна нота у файлі .mp3 змінено, ваше око або вухо навряд чи помітять різницю, хоча, звичайно, шанувальники музики скажуть, що вони точно можуть відрізнити .mp3 від нестисненого файлу .flac. Сильними сторонами стиснення з втратами є його ефективність та результативність. Ступінь стиснення дуже висока, а це означає, що отриманий файл значно менше оригіналу.
Однак стиснення з втратами є неприйнятним, коли ви надсилаєте файли або програмне забезпечення, і цілісність даних має вирішальне значення. Наприклад, якщо ви надсилаєте сценарій або документ, цілісність вихідного файлу повинна зберігатися під час його розпакування. У цій главі мова піде про цей тип стиснення без втрат, який доступний з ряду утиліт і алгоритмів. На жаль, стиснення без втрат не таке ефективне, як стиснення з втратами, як ви можете собі уявити, але для хакера цілісність часто набагато важливіша, ніж ступінь стиснення.
Зазвичай, перше, що ви робите при стисненні файлів – це об’єднуєте їх в архів. У більшості випадків під час архівації файлів використовується команда tar. Tar розшифровується як магнітофонний архів, посилання на доісторичні часи обчислювальної техніки, коли системи використовували стрічку для зберігання даних. Команда tar створює один файл з багатьох файлів, який потім називається архівом, файлом tar або tarball.
Наприклад, скажімо, у вас було три файли скриптів, подібні до тих, які ми використовували в розділі 8, з назвами hackersarise1, hackersarise2 і hackersarise3. Якщо ви перейдете до каталогу, який їх містить, і виконаєте довгий список, ви зможете чітко побачити файли та деталі, які ви очікуєте, включаючи розмір файлів, як показано тут:
kali >ls-l rwxrxrx 1 root root 22311 Nov 27 2018 13:00 hackersarise1.sh rwxrxrx 1 root root 8791 Nov 27 2018 13:00 hackersarise2.sh rwxrxrx 1 root root 3992 Nov 27 2018 13:00 hackersarise3.sh
Скажімо, ви хочете надіслати всі ці три файли іншому хакеру, з яким ви працюєте над проектом. Ви можете об’єднати їх і створити єдиний файл архіву за допомогою команди в Listing 91.
kali >tar-cvfHackersArise.tarhackersarise1hackersarise2hackersarise3 hackersarise1 hackersarise2 hackersarise3 Listing 91: Creating a tarball of three files
Давайте розберемо цю команду, щоб краще зрозуміти її. Команда архівування – tar, і ми використовуємо її тут з трьома варіантами. Параметр c означає створити, v (що означає багатослівний і необов’язковий) перераховує файли, з якими має справу tar, а f означає запис до наступного файлу. Цей останній варіант підійде і для читання з файлів. Потім ми даємо новому архіву ім’я файлу, яке ви хочете створити з трьох скриптів: HackersArise.tar.
У повному обсязі ця команда візьме всі три файли і створить з них єдиний файл HackersArise.tar. Коли ви зробите ще один довгий список каталогу, ви побачите, що він також містить новий файл .tar, як показано далі:
kali >ls-l snip rwrr 1 root root 40960 Nov 27 2018 13:32 HackersArise.tar snip kali >
Зверніть увагу на розмір тарболу тут: 40 960 байт. Коли три файли архівуються, tar використовує значні накладні витрати для виконання цієї операції: тоді як сума трьох файлів до архівування становила 35 094 байти, після архівування tarball зросла до 40 960 байтів. Іншими словами, процес архівації додав понад 5000 байтів. Хоча ці накладні витрати можуть бути значними для невеликих файлів, вони стають все менш значними для великих і великих файлів.
Ми можемо відобразити ці файли з tarball, не витягуючи їх, використовуючи команду tar з перемикачем списку вмісту -t , як показано далі:
kali >tar-tvfHackersArise.tar rwxrxrx 1 root root 22311 Nov 27 2018 13:00 hackersarise1.sh rwxrxrx 1 root root 8791 Nov 27 2018 13:00 hackersarise2.sh rwxrxrx 1 root root 3992 Nov 27 2018 13:00 hackersarise3.sh
Тут ми бачимо наші три оригінальні файли та їх оригінальні розміри. Потім ви можете витягти ці файли з tarball за допомогою команди tar за допомогою перемикача -x (вилучення), як показано далі:
kali >tar-xvfHackersArise.tar hackersarise1.sh hackersarise2.sh hackersarise3.sh
Оскільки ви все ще використовуєте перемикач –v, ця команда покаже, які файли видобуваються у виводі. Якщо ви хочете витягти файли і зробити це “мовчки”, тобто без показу будь-яких результатів, ви можете просто видалити перемикач -v (багатослівний), як показано тут:
kali >tar -xf HackersArise.tar
Файли були розпаковані в поточний каталог; ви можете зробити довгий список у каталозі, щоб перевірити ще раз. Зауважте, що за замовчуванням, якщо витягнутий файл вже існує, tar видалить існуючий файл та замінить його видобутим файлом.
Тепер у нас є один архівний файл, але цей файл більший, ніж сума оригінальних файлів. Що робити, якщо ви хочете стиснути ці файли для зручності транспортування? Linux має кілька команд, здатних створювати стислі файли. Ми розглянемо такі:
gzip, which uses the extension .tar.gz or .tgz
bzip2, which uses the extension .tar.bz2
compress, which uses the extension .tar.z
Всі вони здатні стискати наші файли, але вони використовують різні алгоритми стиснення та мають різні коефіцієнти стиснення. Тому ми розглянемо кожен з них і на що він здатний.
Загалом, стиснення є найшвидшим, але отримані файли більші; bzip2 є найповільнішим, але результуючі файли є найменшими; і gzip знаходиться десь посередині. Основна причина, по якій ви, як хакер-початківець, повинні знати всі три методи, полягає в тому, що при доступі до інших інструментів ви зіткнетеся з різними типами стиснення. Тому в цьому розділі показано, як боротися з основними методами стиснення.
Давайте спочатку спробуємо gzip (GNU zip), оскільки це найбільш часто використовувана утиліта стиснення в Linux. Ви можете стиснути файл HackersArise.tar ввівши наступне (переконайтеся, що ви перебуваєте в каталозі, в якому зберігається заархівований файл):
kali >gzip HackersArise.*
Зверніть увагу, що ми використовували символ підстановки * для розширення файлу; це повідомляє Linux, що команда повинна застосовуватися до будь-якого файлу, який починається з HackersArise з будь-яким розширенням файлу. Ви будете використовувати подібні позначення для наступних прикладів. Коли ми робимо довгий список у каталозі, ми бачимо, що HackersArise.tar був замінений на HackersArise.tar.gz, а розмір файлу стиснуто всього до 3,299 байт!
kali >ls-l snip rwrr 1 root root 3299 Nov 27 2018 13:32 HackersArise.tar.gz snip
Потім ми можемо розпакувати той самий файл за допомогою команди gunzip, скороченої від GNU unzip.
kali >gunzip HackersArise.*
Після розпакування файл більше не зберігається з розширенням .tar.gz, а з розширенням .tar. Також зверніть увагу, що він повернувся до свого початкового розміру в 40 960 байт. Спробуйте зробити довгий список, щоб підтвердити це. Варто зазначити, що gzip також можна використовувати для вилучення файлів .zip.
Іншою іншою широко використовуваною утилітою стиснення в Linux є bzip2, яка працює аналогічно gzip, але має кращі ступені стиснення, а це означає, що отриманий файл буде ще меншим. Ви можете стиснути файл HackersArise.tar, ввівши наступне:
kali >bzip2 HackersArise.*
Коли ви робите довгий список, ви можете побачити, що bzip2 стиснув файл лише до 2,081 байт! Також зверніть увагу, що розширення файлу тепер .tar.bz2.
Щоб розпакувати стиснутий файл, використовуйте bunzip2, наприклад:
kali >bunzip2 HackersArise.* kali >
Після цього файл повернеться до початкового розміру, а його розширення повернеться до .tar.
Нарешті, ви можете використовувати команду стиснути, щоб стиснути файл. Це, мабуть, найменш часто використовувана утиліта стиснення, але її легко запам’ятати. Щоб скористатися ним, просто введіть команду стиснути, а потім ім’я файлу, наприклад:
kali >compressHackersArise.* kali >ls-l snip rwrr 1 root root 5476 Nov 27 2018 13:32 HackersArise.tar.Z
Зверніть увагу, що утиліта стиснення зменшила розмір файлу до 5 476 байт, що більш ніж удвічі перевищує розмір bzip2. Також зверніть увагу, що розширення файлу тепер .tar. Z (з великої літери Z).
Щоб розпакувати той самий файл, скористайтеся розпакуванням:
kali >uncompressHackersArise.*
Також можна використовувати команду gunzip з файлами, стиснутими за допомогою стиснення.
У світі інформаційної безпеки та злому одна команда архівування Linux стоїть вище за інші за своєю корисністю. Команда dd робить бітбібітну копію файлу, файлової системи або навіть цілого жорсткого диска. Це означає, що навіть видалені файли копіюються (так, важливо знати, що видалені файли можна відновити), що полегшує виявлення та відновлення. Видалені файли не будуть скопійовані за допомогою більшості утиліт логічного копіювання, таких як cp.
Після того, як хакер володіє цільовою системою, команда dd дозволить їм скопіювати весь жорсткий диск або запам’ятовуючий пристрій у свою систему. Крім того, ті люди, чия робота полягає в тому, щоб ловити хакерів, а саме криміналісти, швидше за все, будуть використовувати цю команду, щоб зробити фізичну копію жорсткого диска з видаленими файлами та іншими артефактами, які можуть бути корисні для пошуку доказів проти хакера.
Важливо відзначити, що команда dd не повинна використовуватися для звичайного сьогоднішнього копіювання файлів і запам’ятовуючих пристроїв, оскільки вона дуже повільна; інші команди виконують роботу швидше і ефективніше. Це, однак, чудово, коли вам потрібна копія запам’ятовувального пристрою без файлової системи або інших логічних структур, наприклад, під час криміналістичного розслідування.
Основний синтаксис команди dd виглядає наступним чином:
dd if=inputfile of=outputfile
Отже, якщо ви хочете зробити фізичну копію своєї флешки, припускаючи, що флеш-накопичувач є sdb (ми обговоримо це позначення докладніше в главі 10), ви б ввели наступне:
kali >ddif=/dev/sdbof=/root/flashcopy 1257441=0 records in 1257440+0 records out 7643809280 bytes (7.6 GB) copied, 1220.729 s, 5.2 MB/s
Давайте розберемо цю команду: dd – це ваша фізична команда “copy”; якщо позначає ваш вхідний файл, з /dev/SDB, що представляє ваш флеш-накопичувач у каталозі /dev; позначає ваш вихідний файл; а /root/flashcopy — це ім’я файлу, до якого потрібно скопіювати фізичну копію.
Численні варіанти доступні для використання з командою dd, і ви можете трохи дослідити їх, але серед найбільш корисних є опція noerror та опція bs (розмір блоку). Як випливає з назви, опція noerror продовжує копіювати, навіть якщо трапляються помилки. Опція bs дозволяє визначити розмір блоку (кількість байт читання/запису на блок) копіюваних даних. За замовчуванням встановлено значення 512 байт, але його можна змінити, щоб прискорити процес. Зазвичай це встановлюється на розмір сектора пристрою, найчастіше 4 КБ (4,096 байт). За допомогою цих параметрів ваша команда матиме такий вигляд:
kali >ddif=/dev/mediaof=/root/flashcopybs=4096conv:noerror
Як уже згадувалося, варто провести трохи більше досліджень самостійно, але це хороший вступ до команди та її поширених застосувань.
Linux має ряд команд, які дозволяють об’єднувати та стискати файли для легшої передачі. Для об’єднання файлів tar є командою вибору, і у вас є принаймні три утиліти для стиснення файлів — gzip, bzip2 та стиснення — усі з різними ступенями стиснення. Команда dd виходить вище і далі. Це дозволяє створювати фізичну копію запам’ятовувальних пристроїв без логічних структур, таких як файлова система, що дозволяє відновити такі артефакти, як видалені файли.
Ми використовували матеріали з книги “LINUX BASICS FOR HACKERS”, які написав William Pollock