№6. Основи LINUX для хакерів (Управління процесами)

10 липня 2023 2 хвилин Автор: Lady Liberty

Ефективне управління процесами в Linux

Управління процесами є важливою частиною операційної системи Linux. Здатність ефективно керувати процесами дозволяє забезпечити стабільну та ефективну роботу системи. У нашому повному посібнику ми розглянемо ключові аспекти управління процесами в Linux та покажемо, як використовувати різні інструменти та команди для контролю та оптимізації роботи процесів. Розуміння процесів: Процеси в Linux – це робочі одиниці, які виконуються в операційній системі. Розуміння їхньої природи та взаємодії дозволяє краще керувати ними. Ми розглянемо різні типи процесів, такі як фонові процеси, демони та інтерактивні процеси, і вивчимо їх властивості та особливості. Керування процесами: Ми дослідимо різні інструменти та команди для керування процесами в Linux. Використовуючи команду ps, ми зможемо переглядати активні процеси та їх атрибути. Команда kill дозволяє зупиняти небажані або призупинені процеси. Ми також розглянемо команду top, яка надає детальну статистику процесів та їх використання системних ресурсів.

 

Керування пріоритетами: Пріоритети процесів визначають, які процеси отримують більше часу CPU та ресурсів системи. Ми покажемо, як встановити та змінювати пріоритети процесів за допомогою команди nice та renice, що дозволить вам ефективно керувати виконанням процесів та розподілом ресурсів. Моніторинг та налагодження процесів: Для оптимізації роботи системи Linux важливо вміти моніторити та налагоджувати процеси. Ми розглянемо інструменти, такі як strace та ltrace, які допомагають аналізувати взаємодію процесів з системними ресурсами та бібліотеками. Ми також розглянемо інші інструменти, такі як vmstat та iostat, які допомагають моніторити системні ресурси та продуктивність. Заключні вказівки: Ефективне управління процесами в Linux є важливою частиною оптимізації системи та забезпечення її стабільної роботи. Використовуючи наш повний посібник, ви отримаєте всю необхідну інформацію та навички, щоб ефективно керувати процесами в системі Linux та підтримувати її оптимальну продуктивність. У цьому розділі ви дізнаєтеся, як керувати цими процесами. По-перше, ви навчитеся переглядати та знаходити процеси, а також як виявити, які процеси використовують найбільше ресурсів. Потім ви навчитеся керувати процесами, запускаючи їх у фоновому режимі, розставляючи пріоритети та вбиваючи їх, якщо це необхідно (без крові). Нарешті, ви навчитеся планувати процеси, які запускатимуться у визначені дні, дати та в певний час.

Процеси перегляду

У більшості випадків першим кроком в управлінні процесами є перегляд процесів  запуску вашій системі. Основний інструмент для перегляду процесів і один з Linux.

Найкращі друзі адміністратора — це  команда PS. Запустіть його в командному рядку, щоб подивитися, які процеси активні:

kali >ps
PID TTY TIME CMD
39659 pts/0 00:00:01 bash
39665 pts/0 00:00:00 ps

Ядро Linux, внутрішнє ядро операційної системи, яке контролює майже все, призначає унікальний ідентифікатор процесу (PID) кожному процесу послідовно, коли процеси створюються. При роботі з цими процесами в Linux часто потрібно вказувати їх PID, тому набагато важливіше відзначити PID процесу, ніж назва процесу.

Сама по собі  команда ps насправді не надає вам багато інформації. Запуск  команди ps без будь-яких параметрів перераховує процеси, запущені (кажуть, що викликаються) користувачем, який зараз увійшов у систему (у нашому випадку, root), і які процеси запущені на цьому терміналі. Тут просто сказано, що оболонка bash відкрита і запущена, і що ми запустили команду ps. Ми хочемо і потребуємо набагато більше інформації, особливо про ті процеси, якими керують інші користувачі та система у фоновому режимі. Без цієї інформації ми дуже мало знаємо про те, що насправді відбувається в нашій системі.

Запуск  команди ps з параметрами aux покаже всі процеси, запущені в системі для всіх користувачів, як показано в списку 61. Зауважте, що ви не ставите префікс цих параметрів через тире (-) і що все написано в нижньому регістрі; оскільки Linux є відмінковим, використання великих параметрів woud дасть вам значно інші результати.

kali >psaux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
Root 1 0.0 0.4 202540 6396 ? Ss Apr24 0:46 /sbin/init
Root 2 0.0 0.0 0 0 ? S Apr24 0:00 [kthreadd]
Root 3 0.0 0.0 0 0 ? S Apr24 0:26 [ksoftirqd/0]
­­snip­­
root 39706 0.0 0.2 36096 3204 pts/0 R+ 15:05 0:00 ps aux
Listing 6­1: Using the auxoptions to see processes for all user

Як бачите, ця команда тепер перераховує так багато процесів, що вони, ймовірно, запускаються з нижньої частини екрана. Перший процес – це init, перерахований в останній колонці.

Process – це команда, яку ми запустили для відображення, ps aux. Багато деталей (PID, %CPU, TIME, COMMAND тощо) можуть відрізнятися у вашій системі, але повинні мати однаковий формат.

Для наших цілей ось найважливіші стовпці в цьому виході:

  • USER: Користувач, який викликав процес

  • PID: ідентифікатор процесу

  • %CPU: Відсоток процесора, який використовує цей процес

  • %MEM: Відсоток пам’яті, який використовує цей процес

  • COMMAND: Ім’я команди, яка розпочала процес

Загалом, щоб виконати будь-яку дію над процесом, ми повинні вказати його PID. Давайте подивимося, як використовувати цей ідентифікатор на свою користь.

Фільтрування за назвою процесу

Коли ми запитуємо про процеси або виконуємо певні дії з ними, ми зазвичай не хочемо, щоб усі процеси відображалися на екрані. Це просто проблема занадто великої кількості інформації. Найчастіше ми хочемо знайти інформацію по одному процесу. Для цього ми можемо використовувати команду фільтрації grep, яку я ввів у главі 1.

Щоб продемонструвати, ми скористаємося фреймворком експлуатації Metasploit, найбільш широко використовуваним фреймворком експлуатації і майже хорошим другом кожного хакера.

Це встановлено у вашій системі Kali, тому запустіть Metasploit з наступного:

kali >msfconsole

Після запуску структури експлуатації давайте подивимося, чи зможемо ми знайти її в списку процесів. Для цього скористайтеся командою ps aux, а потім передайте її (|), щоб grep шукав рядок msfconsole, як у списку 62.

kali >psaux|grepmsfconsole
root 39756 0.0 0.0 4304 716 pts/2 Ss+ 15:13 0:00 sh ­c service
postgresql start && msfdb init & msfconsole
root 39759 35.1 15.2 4304 227888 pts/2 Sl+ 15:13 1:36 ruby /usr/bin/
msfconsole
root 39892 0.0 0.0 4304 940 pts/2 S+ 15:18 0:00 grep msfconsole
Listing 6­2: Filtering a pssearch to find a particular process

З відфільтрованого виводу в цьому списку ви повинні побачити всі процеси, які відповідають терміну msfconsole. Спочатку відображається база даних PostgreSQL, яка є базою даних Metasploit, потім  сама програма msfconsole з /usr/bin/msfconsole. Нарешті, ви повинні побачити команду grep, яку ви використовували для пошуку msfconsole. Зверніть увагу, що вихідні дані не включали список заголовків стовпців з ps. Оскільки ключового слова msfconsole немає в шапці, воно не відображається. Незважаючи на це, результати відображаються в тому ж форматі.

З цього можна дізнатися деяку важливу інформацію. Якщо, наприклад, вам потрібно дізнатися, скільки ресурсів використовує Metasploit, ви можете звернутися до третього стовпця (стовпець ЦП), щоб побачити, що він використовує 35,1 відсотка вашого процесора, і звернутися до четвертого стовпця, щоб побачити, що він використовує 15,2 відсотка вашої системної пам’яті. Це зовсім небагато. Це вимогливий звір!

Пошук найжадібніших процесів з топом

Коли ви вводите команду ps , процеси відображаються в тому порядку, в якому вони були запущені, і оскільки ядро призначає PID в тому порядку, в якому вони почалися, ви бачите процеси, впорядковані за PID-номером.

У багатьох випадках ми хочемо знати, які процеси використовують найбільше ресурсів. Тут стане  в нагоді верхня команда, оскільки вона відображає процеси, впорядковані за використовуваними ресурсами, починаючи з найбільшого. На відміну від  команди ps, яка дає нам одноразовий знімок процесів, верхня  частина оновлює список динамічно — за замовчуванням, кожні 10 секунд.

Ви можете спостерігати і контролювати ці ресурсоємні процеси, як показано в списку 63.

kali >top
top ­ 15:31:17 up 2 days, ^;50, 4 users, load average: 0.00, 0.04, 0.09
Tasks: 176 total, 1 running, 175 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.3 us, 0.7 sy, ).) ni, 97.4 id, 0.0 wa, 0.0 hi 0.0 si 0.0
KiB Mem : 1491220 total, 64848 free, 488272 used, 938100 buff/cache
KiB Swap : 1046524 total, 1044356 free, 2168 used. 784476 avail MEM
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
39759 root 20 0 893180 247232 11488 S 0.7 16.6 1:47.88 ruby
39859 root 20 0 27308 16796 14272 S 0.3 1.2 1:47.88 postgres
39933 root 20 0 293936 61500 29108 S 0.7 4.1 1:47.88 Xorg
­­snip­­
Listing 6­3: Finding the greediest processes with top

Системні адміністратори часто підтримують верхню роботу терміналу, щоб контролювати використання ресурсів процесу. Як хакер, ви можете зробити те ж саме, особливо якщо у вашій системі виконується кілька завдань. Поки ви працюєте зверху , натискання клавіші H або ? викличе список інтерактивних команд, а натискання клавіші Q вийде зверху. Незабаром ви знову будете використовувати top для керування своїми процесами в розділі «Зміна пріоритету процесу з приємним» на сторінці 65 та «Вбивство процесів» на сторінці 66.

Управління процесами

Хакерам часто потрібно багатопроцесорність, і така операційна система, як Kali, ідеально підходить для цього. У хакера може бути запущений сканер портів під час одночасного запуску сканера вразливостей і експлойту. Це вимагає, щоб хакер ефективно керував цими процесами, щоб найкращим чином використовувати системні ресурси та виконати завдання. У цьому розділі я покажу вам, як керувати кількома процесами.

Зміна пріоритету процесу з приємною

Ви не часто почуєте слово приємно, яке використовується в контексті хакерів, але тут ви це зробите. Команда nice використовується для впливу на пріоритет процесу для ядра. Як ви бачили, коли ми запустили команду ps , в системі одночасно запускаються численні процеси, і всі вони змагаються за доступні ресурси. Ядро матиме останнє слово щодо пріоритету процесу, але ви можете приємно  припустити, що процес повинен бути підвищений у пріоритеті.

Ідея використання терміну nice полягає в тому, що, коли ви використовуєте його, ви визначаєте, наскільки «приємними» ви будете для інших користувачів: якщо ваш процес використовує більшість системних ресурсів, ви не дуже приємні.

Значення для Ніцци знаходяться в діапазоні від –20 до +19, при цьому нуль є значенням за замовчуванням (див. рисунок 61). Висока приємна вартість означає низький пріоритет, а низька приємна вартість означає високий пріоритет (коли ви не так добре ставитеся до інших користувачів та процесів). Коли процес запускається, він успадковує приємну цінність свого батьківського процесу. Власник процесу може знизити пріоритет процесу, але не може збільшити його пріоритет. Звичайно, суперкористувач або користувач root може довільно встановлювати приємну цінність на все, що їм заманеться.

Малюнок 61: Значення пріоритету приємності

Коли ви запускаєте процес, ви можете встановити рівень пріоритету за допомогою приємної команди,  а потім змінити пріоритет після початку процесу за допомогою  команди renice. Синтаксис цих двох команд трохи відрізняється і може ввести в оману. Команда nice вимагає, щоб ви збільшили приємне значення, тоді як  команда renice хоче абсолютне значення приємності.

Давайте розглянемо приклад, щоб продемонструвати це.

Встановлення пріоритету під час запуску процесу

Для демонстрації припустимо, що у нас є процес з  назвою slowprocess, розташований за адресою /bin/slowprocess. Якби ми хотіли, щоб він прискорив його завершення, ми могли б розпочати процес приємною командою:

kali >nice -n -10 /bin/slowprocess

Ця команда збільшить приємне значення на -10, збільшивши її пріоритет і розподіливши більше ресурсів.

З іншого боку, якщо ми хочемо бути приємними до наших колег-користувачів і процесів і надати повільному процесу нижчий пріоритет, ми могли б позитивно збільшити його приємну цінність на 10:

kali >nice -n 10 /bin/slowprocess

Спробуйте процес, який ви зараз виконуєте, а потім запустіть ps , щоб побачити, як він змінюється, якщо взагалі.

Зміна пріоритету запущеного процесу за допомогою renice

Команда renice приймає абсолютні значення від -20 до 19 і встановлює пріоритет саме цьому рівню, а не збільшувати або зменшувати від рівня, з якого вона починалася. Крім того, renice вимагає PID процесу, на який ви орієнтуєтесь, а не назви. Отже, якщо slowprocess використовує надмірну кількість ресурсів у вашій системі, і ви хочете надати їй менший пріоритет, тим самим надаючи іншим процесам вищий пріоритет і більше ресурсів, ви можете відновити  повільний процес (який має PID 6996) і надати йому набагато вище приємне значення

Наприклад:

Калі >renice 20 6996

Як і в приємному, тільки кореневий користувач може відновити процес до від’ємного значення, щоб надати йому вищий пріоритет, але будь-який користувач може бути приємним і зменшити пріоритет з renice.

Ви також можете використовувати верхню  утиліту для зміни приємного значення. Коли запущено верхню утиліту, просто натисніть клавішу R, а потім надайте PID та приємне значення. Список 64 показує верхню утиліту, що працює. Коли я натискаю клавішу R і подаю PID і приємне  значення, я отримую такий вихід:

Коли я натискаю клавішу R, мене запитують PID ➊ з текстом renice PID [значення] для значення. Потім результат повинен змінитися, щоб відобразити нові пріоритети.

Процеси вбивства

Іноді процес споживає занадто багато системних ресурсів, демонструє незвичайну поведінку або, в гіршому випадку, зависає. Процес, який демонструє такий тип поведінки, часто називають зомбі-процесом. Для вас, напевно, самим проблематичним симптомом будуть даремно використовувані зомбі ресурси, які можна було б краще розподілити на корисні процеси.

Коли ви виявите проблемний процес, ви можете зупинити його за допомогою  команди kill. Існує багато різних способів вбити програму, і кожен має свій номер вбивства.

Команда вбивства має 64 різних сигналу вбивства, і кожен робить щось трохи своє. Тут ми зосередимося на декількох, які ви, ймовірно, знайдете найбільш корисними. Синтаксис для

Команда kill – це сигнал вбивства PID, де перемикач сигналу необов’язковий. Якщо позначку сигналу не надано, за замовчуванням використовується значення SIGTERM. У таблиці 61 наведені поширені сигнали вбивства

Таблиця 61: Часто використовувані сигнали вбивства

За допомогою верхньої команди можна визначити, які процеси використовують забагато ресурсів; часто ці процеси є легітимними, але можуть бути шкідливі процеси, які забирають ресурси, які ви хочете вбити.

Якщо ви просто хочете перезапустити процес з сигналом HUP, введіть опцію -1  з kill, наприклад:

kali >kill -1 6996

У випадку зомбі або шкідливого процесу, ви, швидше за все, захочете відправити  сигнал kill -9, сигнал абсолютного вбивства, в процес. Це гарантує, що процес припинено.

kali >kill -9 6996

Якщо ви не знаєте PID процесу, ви можете скористатися командою killall, щоб вбити процес. Ця команда приймає ім’я процесу, а не PID, як аргумент.

Наприклад, ви можете припинити гіпотетичний зомбіпроцес, як це:

kali >killall -9 zombieprocess

Нарешті, ви також можете завершити процес у верхній команді. Просто натисніть клавішу K, а потім введіть PID процесу порушення.

Запуск процесів у фоновому режимі

У Linux, незалежно від того, працюєте ви з командного рядка або графічного інтерфейсу, ви працюєте в оболонці. Всі команди, які виконуються, виконуються всередині цієї оболонки, навіть якщо вони виконуються з графічного інтерфейсу. Коли ви виконуєте команду, оболонка чекає, поки команда буде завершена, перш ніж запропонувати інший командний рядок.

Іноді вам може знадобитися запуск процесу у фоновому режимі, а не чекати, поки він завершиться в цьому терміналі. Наприклад, ми хочемо працювати над сценарієм у текстовому редакторі і тому викликали наш текстовий редактор (leafpad)

Ввівши наступне:

kali >leafpad newscript

У цьому випадку оболонка bash відкриє текстовий редактор leafpad для створення newscript. Поки ми працюємо в текстовому редакторі, термінал зайнятий запуском текстового редактора. Якщо ми повернемося до терміналу, ми побачимо, що він запускає наш текстовий редактор і що у нас немає нової команди, яка дозволяє нам вводити більше команд.

Звичайно, ми могли б відкрити інший термінал для запуску більшої кількості команд, але кращим варіантом для економії ресурсів та екранної нерухомості є запуск текстового редактора, що працює у фоновому режимі. Запуск процесу у фоновому режимі просто означає, що він продовжуватиме працювати, не потребуючи терміналу. Таким способом термінал звільняється для інших обов’язків. Щоб запустити текстовий редактор у фоновому режимі, досить додати амперсанд (&) в кінець команди.

Наприклад:

kali >leafpad newscript &

Тепер, коли відкривається текстовий редактор, термінал повертає новий командний рядок, щоб ми могли вводити інші команди в нашій системі, а також редагувати наш новий сценарій. Це ефективно для будь-якого процесу, який може тривати значний проміжок часу, коли ви хочете використовувати термінал. Як хакер, ви знайдете це корисним для запуску кількох терміналів із кількома завданнями, щоб заощадити ресурси та простір на екрані.

Переміщення процесу на передній план

Якщо потрібно перемістити процес, запущений у фоновому режимі, на передній план, можна скористатися командою fg (передній план). Команда fg вимагає PID процесу, який ви хочете повернути на передній план, як показано далі.

kali >fg 1234

Якщо ви не знаєте PID, ви можете використовувати команду ps, щоб знайти його.

Процеси планування

Як системним адміністраторам Linux, так і хакерам часто потрібно планувати запуск процесів у певний час доби. Можливо, системний адміністратор захоче запланувати резервне копіювання системи щосуботи ввечері о 2 годині ночі. Хакер може захотіти встановити сценарій для запуску для регулярного виконання розвідки, знаходячи відкриті порти або вразливості. У Linux ви можете досягти цього принаймні двома способами: за допомогою at і crond.

Команда at – це демон – фоновий процес – корисний для планування завдання, яке буде виконуватися один раз у якийсь момент у майбутньому. Кронд  більше підходить для планування завдань, які виконуються щодня, тиждень або місяць, і ми детально розглянемо це в розділі 16.

Ми використовуємо  фонову службу at для планування виконання команди або набору команд у майбутньому. Синтаксис – це просто  команда at, за якою слідує час виконання процес. Аргумент часу може бути наданий у різних форматах. Таблиця 62 містить найбільш поширені в часі формати.

Таблиця 62: Формати часу, прийняті командою at

Коли ви вводите  фонову службу at із зазначеним часом, at переходить в інтерактивний режим і вас зустрічає підказка at> . Ось де ви вводите команду, яку ви хочете виконати в зазначений час:

kali >at7:20am
at >/root/myscanningscript

Цей фрагмент коду запланує виконання myscanningscript сьогодні о 7:20 ранку.

Зведення

Управління процесами в Linux є ключовою навичкою для кожного користувача та хакера Linux. Ви повинні мати можливість переглядати, знаходити, вбивати, розставляти пріоритети та планувати процеси, щоб оптимально керувати інсталяцією Linux. Хакеру часто потрібно знайти процеси на цілі, яку він хоче вбити, наприклад, антивірусне програмне забезпечення або брандмауер. Їм також потрібно буде керувати кількома процесами в атаці та визначати їх пріоритети.

Ми використовували матеріали з книгиLINUX BASICS FOR HACKERS”, які  написав William Pollock

Інші статті по темі
Для початківцівОсвіта
Читати далі
№10. Основи LINUX для хакерів (Управління файловою системою та запам’ятовувальними пристроями)
Мета управління файловою системою та запам'ятовувальними пристроями в операційній системі Linux полягає в забезпеченні ефективного організованого зберігання та доступу до даних.
1177
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.