Home    Решения    Услуги    Download    Публикации    Работа    Продукти    Документи
 

 

 
Print this page/Отпечатай тази страница  

Магическият клавиш

от Владимир Джувинов <[email protected]

Материалът описва действието и начина за активиране на "магическите" SysRq команди в Linux. Представени са и три аварийни сценария, при които командите могат да бъдат използвани.

Магията

Ако разгърнем огромния (2.2MB) хакерски "Жаргонен Речник" поддържан от Eric Raymond ще забележим, че думата "magic" (магия или магически) е често срещана там. Но думата "магия" в хакерския жаргон не се отнася до свръхестествени сили, а по-скоро до програмни изпълнения, които поради своята сложност трудно биха били обяснени или просто такива програми, които биха имали подобен "магически" ефект.

В речника са описани такива термини като автомагия, черна и дълбока магия, магически бисквити (не стават за ядене), магическо число и магически дим. Към тях може да прибавим и магическия клавиш на Linux.
 
 

Магическият клавиш SysRq

В Linux е въведена специална аварийна опция, която позволява директно извикване на определени системни команди в случаи на необходимост - например при спиране на X сървъра или при нужда от синхронизиране на дисковете.

Тази опция се задейства от конзолната клавиатура чрез "магическата" комбинация от Alt+SysRq+<допълнителен клавиш>. На x86 архитектурата за магически клавиш се използва SysRq (System Request Key), докато при други архитектури като SPARC и PowerPC за магическата комбинация се използва друг клавиш.

Системното извикване чрез магическия клавиш SysRq има висок приоритет и ядрото реагира веднага и независимо каква друга функция изпълнява в този момент. Изключение правят случаите когато се касае за пълно блокиране на Linux. Това качество на SysRq дава шанс за сигурно спиране на системата в такива критични ситуации, когато единствена друга алтернатива остава хардуереният reset.

За написването на този материал е използвано описание на SysRq от Linux документацията (виж /usr/src/linux-2.*.*/Documentation/sysrq.txt) както и няколко newsgroup postings.
 
 
 

Изисквания и активиране на SysRq

Магическият клавиш е въведен за пръв път в Linux 2.1.*. За неговата поддръжка е нужно ядрото да бъде компилирано с опцията CONFIG_MAGIC_SYSRQ. Тъй като SysRq засяга пряко сигурността на системата, много често след стартирането на Linux той трябва да бъде допълнително активиран чрез /proc интерфейса.

Файлът, който показва и променя статуса на SysRq е /proc/sys/kernel/sysrq. Когато файлът съдържа '0' SysRq е деактивиран, а при '1' (или всяко друго цяло число различно от '0') обратното.

Проверката на статуса на магическия клавиш и неговата активация могат да бъде извършени от root по следния начин:
 

[root@steamboat]# cat /proc/sys/kernel/sysrq
0
[root@steamboat]# echo 1 > /proc/sys/kernel/sysrq
[root@steamboat]# cat /proc/sys/kernel/sysrq
1
Отново, активирането чрез /proc може да стане само тогава, когато в ядрото има компилирана поддръжка на SysRq.
 
 
 

Работа с магическия клавиш

След активирането на SysRq всеки ползвател може да извика магическата кобинация Alt+SysRq+<допълнителен клавиш>. Извикването е възможно само от локална виртуална конзола и по принцип не може да стане от отдалечен telnet клиент. Допълнителният клавиш в комбинацията определя съответната команда. За да разберем кои са възможните SysRq команди можем да използваме комбинацията Alt+SysRq+<интервал> или всеки друг невалиден <допълнителен клавиш>:
 
[vd298@steamboat]$ SysRq: unRaw saK Boot Sync Unmount showPc showTasks showMem loglevel0-8 tErm kIll killalL


Главните букви бележат допълнителния клавиш за съответната комбинация.

Гаранция за успешното изпълнение на SysRq команда се дава от Linux само тогава, когато на конзолата се изпише съответното потвърждение. Например съобщението
 

[vd298@steamboat]$ SysRq: Emergency Sync


дава потвърждение за извършено аварийно синхронизиране на дисковете.

Понякога след използване на SysRq комбинация се наблюдава засичане на клавиатурата. В този случай се касае за положение, при което SysRq не връща контрола обратно на shell програмата. За излизане от SysRq тогава може да се използва натискане на двата Alt, Shift или Control клавиша и след това <Enter>. Повторно извикване на SysRq или превключване на виртуалните конзоли също би помогнало. Очаква се в Linux 2.4 да бъде внесена корекция срещу засичането на SysRq.
 
 
 

Команди

В следната таблица са описани възможните комбинации с Alt+SysRq+<допълнителен клавиш> и какво е действието на съответните команди. Комбинациите се отнасят до Linux 2.2.
 
 
SysRq команди
доп.
клавиш
кратко 
наименование
описание
R unraw Превключва клавиатурата в състояние XLATE. Може да се използва за отнемане контрола на X сървъра върху клавиатурата и мишката.
K sack Изпраща SIGKILL на всички процеси от същата конзола, включително и login shell.
B reboot Веднага рестартира компютъра. Действа като reset.
S sync Синхронизира дисковете, т.е. записва съдържанието на дисковия кеш от работната памет върху самите дискове.
U umount Извършва read-only remount на всички монтирани дискове.
P show regs Показва съдържанието на CPU регистрите.
T show tasks Показва състоянието на всички текущи процеси.
M show memory Показва състоянието на работната памет и DMA.
0-8 change loglevel Филтрира kernel log съобщенията според техния приоритет. '0' най-висок приоритет.
E terminate Изпраща SIGTERM на всички текущи процеси с изключение на init.
I kill Изпраща SIGKILL на всички текущи процеси с изключение на init.
L kill all Изпраща SIGKILL на абсолютно всички процеси, включително и init. Системата става нефункционална след това.

 
 

Сценарии

Магическият SysRq клавиш би могъл да се окаже много полезен при някои от следните критични ситуации:

[1] Увисване на X сървъра

Когато комбинацията Ctrl+Alt+<Backspace> за аварийно спиране на X сървъра не бъде прихваната от него поради цялостно блокиране, потребителят не е в състояние да превключи виртуалните конзоли поради това, че X все още държи контрола над клавиатурата и мишката. Тогава с магическата SysRq команда "unraw" (комбинация Alt+SysRq+R) клавиатурата може отново да бъде "освободена" и след това да се превключи на друга конзола, откъдето да бъде спрян X.

Не се препоръчва ползването на командата sack (комбинация Alt+SysRq+K), защото "убивайки" всички програми на текущата виртуална конзола би довело до "замръзване" на дисплейната графика на X и съответно възможност само за писане на "сляпо".
 

[2] Нужда от аварийно спиране на системата

Следният сценарий може да бъде използван, когато ядрото на Linux е в критично положение и се очаква цялостно блокиране, т.е. когато управлението е извън контрол :-(

Командите са представени в тяхната последователност:

  • командата terminate (комбинация Alt+SysRq+E) изпраща сигнал TERM до всички текущи процеси без init, давайки им шанс да запишат отворените от тян файлове и да приключат по един сравнително обичаен начин
  • командата sync (комбинация Alt+SysRq+S) изчиства дисковия кеш, така че всички файлове да бъдат правилно записани върху диска
  • командата unmount (комбинация Alt+SysRq+U) ре-монтира всички дискове в read-only състояние, така че върху тях да не може да се записва повече информация
  • командата kill (комбинация Alt+SysRq+I) изпраща SIGKILL на всички останали процеси, които не са изпълнили предишната команда за затваряне
  • след това с командата reboot (комбинация Alt+SysRq+B) компютърът може да бъде рестартиран


[3] Заливане на конзолата със системни съобщения

Наводнението със системни съобщения може да бъде много неприятно, защото затруднава работата на конзолата. Ето как може да се достигне до такова положение:

  • PANIC или Oops при зареждане на модул към ядрото
  • опит за четене или писане върху дефектен диск
  • прекъсване на кабела към дадено устройство (IDE диск или принтерен кабел) или спиране на елетрическото захранване към част от системата


Тогава за филтриране на системните съобщения може да се използва командата loglevel0-8 (комбинация Alt+SysRq+<1 до 8>). По-малките числа означават предаване само на по-важните системни съобщения.
 
 
 

Сигурност

При активирането на магическия клавиш трябва да се има предвид, че той може да представлява мощен способ за контрол над системата, и то от всеки, който има достъп до конзолата. SysRq командите могат да бъдат изпълнени дори при заключена с vlock конзола.

Затова, където е възможно, е добре да се потърсят алтернативи на SysRq. Например при блокиране на X сървъра може да се отвори telnet сесия от съседен компютър и оттам да се затвори X.
 
 

Владимир Джувинов
[email protected] 

27.09.2000