Када програми који раде на Линук-у желе да користе ресурсе којима управља оперативни систем (читање датотека, креирање процеса, итд.), они упућују системске позиве ОС-у. Системски позиви раде на нивоу кернела и изводе неопходне операције, остављајући контролу назад позивајућем програму. Алат за праћење пружа могућност праћења ових системских позива на Линук-у.

Типична употреба команде страце

Да бисте надгледали системске позиве за апликацију, само позовите команду са страце у следећем формату:

страце лс /тмп

Међутим, често постоје процеси који почињу много раније и настављају да раде у позадини. Због било каквих проблема, можда ћете желети да прикупите додатне информације повезане са таквим процесима. Можете приложити страце било којој покренутој апликацији давањем ИД процеса процеса -п параметар:

страце -п 2759

Излаз:

Пратите нити и виле апликације

Са страце, можете проверити све нити и друге подређене процесе који су виљушка апликације користећи застава.

страце -ф -п 2759

Излаз:

Проверите одређене системске позиве са страце

instagram viewer

Подразумевани страце излаз може понекад бити прилично препун да би се пратио. Ако желите да пратите само одређене системске позиве, то можете учинити помоћу параметар:

страце -ф -е траг=отвори, упиши, затвори, повежи,изаберите -п 19770

Да бисте пратили само системске позиве који се односе на операције са датотекама, користите -е траг=датотека:

страце -е траг=датотека -п 19770

Да бисте филтрирали само системске позиве који се односе на мрежу, наведите -е траг=мрежа у команди:

страце -е траг=мрежа -п 19770

Добијте информације о времену у секундама

Када шаљете системске позиве, можете користити параметар за добијање информација о времену са прецизношћу у секундама. Већину времена прецизност неће бити довољна за ваше потребе. У таквим ситуацијама можете користити -тт параметар за добијање информација о времену са микросекундном прецизношћу:

страце -тт лс /тмп

Прикупите статистику о системским позивима

Са параметар, можете прикупљати статистику о системским позивима колико год желите:

страце -ф -ц -п 19770

Сачувајте евиденцију у датотеку

Ако дуго покрећете страце и касније желите детаљније да испитате резултујуће евиденције, мораћете да сачувате евиденцију. Са параметар можете одредити датотеку у којој страце треба да сачува евиденцију:

страце -ф -о /тмп/страце.лог -е траце=филе лс /тмп

птраце процес блокирања

Користећи системски позив прцтл, било која апликација под Линуком може спречити да је контролишу корисници који нису роот користећи птраце. Ако апликација обрише ПР_СЕТ_ДУМПАБЛЕ флаг за себе преко прцтл-а, корисници који нису роот неће моћи да контролишу ову апликацију помоћу птраце-а, чак и ако имају право да сигнализирају апликацију.

Једна од најтипичнијих употреба ове функције се види у софтверу агента за аутентификацију ОпенССХ. Дакле, контрола апликације од стране друге апликације са птраце је спречен при аутентификацији корисника.

птраце анд Сецурити

Због могућности птраце постављене у традиционалном Линук моделу процеса, сваки софтвер који покренете на свом систему са својим корисником има овлашћење да у њега убаци злонамерни код. Од најједноставнијег ктерм алата до напредне апликације веб претраживача, такав злонамерни софтвер може да преузме контролу над свим вашим другим покренутим апликацијама—захваљујући системском позиву птраце—и копира важне информације а да ви то не приметите.

Као одговор на ову ситуацију, за коју многи корисници нису свесни, развијен је заштитни механизам са безбедносним модулом који се зове Иама у Линук кернелу.

Можете контролисати одговор на системски позив птраце преко /proc/sys/kernel/yama/ptrace_scope фајл. Ова датотека подразумевано уписује вредност 0.

Следеће вредности су прихватљиве:

Валуе Значење
0 Конвенционално понашање: Све апликације које имају право на птраце може се проверити.
1 Ограничено птраце: Само директни родитељ апликације или апликације за отклањање грешака које апликација дозвољава са ПР_СЕТ_ПТРАЦЕР опција има контролу. Дакле, употреба од гдб име_програма и страце име_програма ће наставити да ради, али касније нећете моћи да приложите покренуту апликацију.
2 Птраце до администратора система: Само апликације са дефинисаним ЦАП_СИС_ПТРАЦЕ својства или подређени процеси који дефинишу ПТРАЦЕ_ТРАЦЕМЕ опција са прцтл може се контролисати.
3 Потпуно онемогућен: Не птраце је дозвољено под било којим околностима. Ако је ово својство дефинисано једном, не можете га поново променити током извршавања.

Многи програмери не знају да апликације могу сами да онемогуће птраце путем прцтл-а, осим за роот корисника. Иако софтвер који се односи на безбедност, као што је ОпенССХ агент, обавља ове операције, не би било исправно очекивати исто понашање од свих софтвера који раде на систему.

Недавно, неке Линук дистрибуције су почели да постављају подразумевану вредност птраце_сцопе фајл, описан горе, да 1. Дакле, са ограниченим операцијама птраце, безбедније радно окружење је обезбеђено у целом систему.

Користећи пример страце

Региструјте узорак апликације испод са именом министраце.ц. Затим га можете компајлирати следећом командом:

гццминистрацеминистраце

код:

#инцлуде <сис/птраце.х>
#инцлуде <сис/рег.х>
#инцлуде <сис/ваит.х>
#инцлуде <сис/типови.х>
#инцлуде <унистд.х>
#инцлуде <стдлиб.х>
#инцлуде <стдио.х>
#инцлуде <еррно.х>
#инцлуде <стринг.х>
интчекај_за_сисцалл(пид_т дете)
{
инт статус;
док (1) {
птраце (ПТРАЦЕ_СИСЦАЛЛ, дете, 0, 0);
чекај (дете, &статус, 0);
ако (ВИФСТОППЕД(статус) && ВСТОПСИГ(статус) & 0к80)
повратак0;
ако (ВИФЕКСИТЕД(статус))
повратак1;
}
}

интдо_цхилд(инт аргц, цхар **аргв)
{
цхар *аргс [аргц+1];
мемцпи (аргс, аргв, аргц * сизеоф(цхар*));
аргс[аргц] = НУЛА;
птраце (ПТРАЦЕ_ТРАЦЕМЕ);
убити(гетпид(), СИГСТОП);
повратак екецвп (аргс[0], аргс);
}

интдо_траце(пид_т дете)
{
инт статус, сисцалл, ретвал;
чекај (дете, &статус, 0);
птраце (ПТРАЦЕ_СЕТОПТИОНС, дете, 0, ПТРАЦЕ_О_ТРАЦЕСИСГООД);
док(1) {
ако (ваит_фор_сисцалл (дете) != 0) пауза;

сисцалл = птраце (ПТРАЦЕ_ПЕЕКУСЕР, дете, сизеоф(дугачак)*ОРИГ_РАКС);
фпринтф (стдерр, "системски позив(%д) = ", системски позив);

ако (ваит_фор_сисцалл (дете) != 0) пауза;

ретвал = птраце (ПТРАЦЕ_ПЕЕКУСЕР, дете, сизеоф(дугачак)*РАКС);
фпринтф (стдерр, "
", ретвал);
}
повратак0;
}
интглавни(инт аргц, цхар **аргв)
{
ако (аргц < 2) {
фпринтф (стдерр, "Употреба: %с прог аргс
", аргв[0]);
излаз(1);
}
пид_т дете = форк();
ако (дете == 0) {
повратак до_цхилд (аргц-1, аргв+1);
} друго {
повратак до_траце (дете);
}
}

Након компајлирања апликације, можете покренути било коју команду са министраце и испитати излаз:

Можете користити страце за многе сврхе

страце може помоћи у проналажењу грешака у програмима који непотребно користе системске ресурсе. Слично томе, карактеристика коју програм показује док користи ресурсе оперативног система такође се може открити помоћу страце-а.

Пошто страце директно слуша системске позиве, може открити динамику времена извршавања без обзира да ли је код програма који се покреће отворен/затворен. Могуће је стећи идеју зашто програми испуштају грешку када почну да користе страце.

Слично, страце вам помаже да разумете зашто се програм неочекивано прекида. Због тога је познавање страце-а веома важно у развоју Линук кернела и системској администрацији.

Креирајте свој сопствени оперативни систем са Линуком од нуле [Линук]

Реад Нект

ОбјавиТвеетОбјавиЕмаил

Повезане теме

  • Линук
  • Линук команде
  • Линук Кернел

О аутору

Фатих Куцуккаракурт (Објављено 6 чланака)

Инжењер и програмер софтвера који је љубитељ математике и технологије. Одувек је волео компјутере, математику и физику. Развио је пројекте мотора за игре, као и машинско учење, вештачке неуронске мреже и библиотеке линеарне алгебре. Штавише, наставља да ради на машинском учењу и линеарним матрицама.

Више од Фатих Куцуккаракурт

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, рецензије, бесплатне е-књиге и ексклузивне понуде!

Кликните овде да бисте се претплатили