Analýza protokolov pomocou dmesg. Zistite informácie o „hardvéri“ v Terminal General Utilities

Diagnostika zariadenia je pomerne dôležitá záležitosť, ktorá by sa nemala prehliadať. Preto nemôžem pomôcť pridať článok o spôsoboch získavania informácií o zariadeniach do série "Cheat Sheet správcu systému" pre Debian. Tentoraz sa pokúsim stručne porozprávať o hlavných nástrojoch na diagnostiku určitých komponentov servera. Samozrejme začnem nástrojmi štandardne zabudovanými v systéme, keďže každý správca systému by ich mal poznať a vedieť ich používať. Nasleduje prehľad balíkov so všeobecným účelom. Na záver sa poďme zoznámiť s ďalšími pokročilými nástrojmi, ktoré si každý môže dodať podľa ľubovôle.

Informácie o procesore môžete zistiť pomocou príkazu:
[e-mail chránený]:~# cat / proc / cpuinfo

Alebo nejaké iné údaje:
[e-mail chránený]:~# lscpu

RAM

Stručné informácie o využití pamäte:
[e-mail chránený]:~# voľný -m

Pomôcka tiež zobrazuje informácie o využití swapu. Namiesto prepínača -m môže byť ešte lepšie použiť -h - získať údaje so zápisom veľkosti.

Rozšírené informácie:
[e-mail chránený]:~# cat / proc / meminfo

Pevné disky

Zobraziť zoznam existujúcich sekcií:
[e-mail chránený]:~# fdisk -l

Je potrebné poznamenať, že hlavným účelom nástroja fdisk je správa diskových oddielov.

UUID a typ systému súborov pre každý oddiel môžete zobraziť pomocou príkazu:
[e-mail chránený]:~# blkid

Informácie o oddieloch, bodoch pripojenia a niektorých ďalších údajoch je možné získať pomocou pomôcky lsblk
[e-mail chránený]:~# lsblk

Príkaz zobrazí všetky blokové zariadenia v stromovej štruktúre.

sieť

Informácie o rozhraní:
[e-mail chránený]:~# ifconfig

Podrobnosti o sieťovej karte
[e-mail chránený]:~# mii-tool -v

Na kontrolu dostupnosti uzlov použite známy nástroj ping.

Všeobecné služby

top

Špičkový nástroj slúži na zobrazenie informácií o procesoch a zdrojoch, ktoré spotrebúvajú. Informácie sú aktualizované v pravidelných intervaloch. Dáta je možné triediť napríklad podľa využitia výkonu procesora alebo RAM (štandardne sa triedi podľa CPU).
[e-mail chránený]:~# top

dmidecode

Podrobné informácie o hardvéri môžete získať pomocou dmidecode. Pomôcka poskytuje údaje prijaté z BIOSu. Popis balíka obsahuje nasledujúcu pomoc:

Tieto informácie zvyčajne zahŕňajú výrobcu systému, názov modelu, sériové číslo, verziu systému BIOS, identifikačný štítok a ďalšie informácie dodané výrobcom s rôznou úrovňou záujmu a spoľahlivosti. Často obsahuje stav obsadených pätíc procesora, rozširujúcich slotov (napr. AGP, PCI, ISA), pamäťových slotov a zoznam I/O portov (napr. sériové a paralelné porty, USB).

Pamätajte, že údaje poskytované DMI nie sú dostatočne spoľahlivé, aby sa im dalo slepo dôverovať. Dmidecode nekontroluje hardvér, len vydáva to, čo mu poskytuje BIOS.

[e-mail chránený]:~# dmidecode

Výstup príkazu bez argumentov je príliš veľký, je lepšie použiť prepínač -type a získať iba potrebné sekcie, napríklad:
[e-mail chránený]:~# dmidecode – typ 5.6

Príkaz zobrazí typ pamäťového radiča a použité moduly RAM.

dmesg

Príkaz sa používa na zobrazenie vyrovnávacej pamäte správ jadra. Z hardvérového hľadiska môže byť výstup užitočný na analýzu hardvérových problémov a skutočne na kompletnú reprezentáciu dostupného hardvéru. Výstup príkazu je príliš veľký a možno budete potrebovať iné nástroje na jeho analýzu, napríklad môžete použiť výstup do súboru, môžete výstup presmerovať na príkaz less, alebo môžete použiť grep na nájdenie hardvérových komponentov. potrebuješ.
[e-mail chránený]:~# dmesg | procesor grep

Príkaz zobrazí iba riadky obsahujúce textový procesor.

lspci

Utilitu je vhodné použiť na výpis všetkých zariadení pripojených k zbernici pci-bus. Informácie možno použiť na diagnostické účely, ako aj na identifikáciu nainštalovaných zariadení.
[e-mail chránený]:~# lspci

Pomocou prepínača -t zobrazíte informácie v stromovom prehľade so všetkými zbernicami a zariadeniami, ktoré sú k nim pripojené. Prepínače -v, -vv, -vvv zobrazujú dodatočné informácie pre každé zariadenie; čím väčšie je "v", tým podrobnejšie sú údaje zobrazené.

Vo všeobecnosti je tento nástroj mimoriadne užitočný pri práci s hardvérovým komponentom a umožňuje vám získať maximum údajov.

vmstat

Zobrazuje súhrn stavu virtuálnej pamäte, ako aj informácie o výmene.
[e-mail chránený]:~# vmstat 2

Vyššie uvedený príkaz vydá aktualizované údaje každé 2 sekundy (namiesto 2 môžete zadať akékoľvek iné číslo).

sysctl

Hoci je pomôcka primárne navrhnutá na správu parametrov jadra za behu, analýza nastavených hodnôt môže pomôcť diagnostikovať problémy.
[e-mail chránený]:~# sysctl -a

Príkaz zobrazí všetky premenné a ich hodnoty.

Ďalšie inžinierske siete

Všetky nástroje popísané nižšie nie sú zahrnuté v štandardnej konfigurácii Debianu, budete si ich musieť nainštalovať samostatne.

htop

Silnejšia náhrada za bežný špičkový nástroj. Nie je dodávaný so systémom v štandardnej konfigurácii. Poskytuje užívateľsky prívetivé interaktívne rozhranie so vstavanou pomocou a aktualizáciami údajov v reálnom čase.
[e-mail chránený]:~# htop -d 10

Prepínač -d nastavuje hodnotu v desatinách sekundy na aktualizáciu údajov. Prepínač -c prepne program do monochromatického režimu.

lshw

Pomôcka je navrhnutá tak, aby zobrazovala podrobné informácie o hardvéri. Najpohodlnejšie je exportovať dáta do .html-view a zobraziť ich v prehliadači. Táto metóda je samozrejme vylúčená pri práci v režime konzoly, s výnimkou prípadov, keď si prezeráte údaje na inom systéme.
[e-mail chránený]:~# sieť lshw -C

Príkaz zobrazí iba informácie o sieťovej karte.

smartmontools

Balík pozostáva z dvoch utilít (smartctl a smartd), ktoré monitorujú indikátory S.M.A.R.T pevných diskov. Ak chcete spustiť démona, musíte vykonať niekoľko nastavení:

Odkomentujte riadky a v zátvorkách uveďte, oddelené medzerou, všetky zariadenia, na ktorých sa má stav monitorovať.

enable_smart = "/ dev / sda / dev / sdb / dev / sdc / dev / sdd / dev / sde"
start_smartd = áno
smartd_opts = "- interval = 1800 ″

Pri spustení služby na virtuálnom stroji s Debianom 7.7 som však dostal chybu (musím povedať, že sledovanie S.M.A.R.T na virtuálnych pevných diskoch je dosť šialený nápad, urobil som to len za účelom testovania):

Stav disku môžete zobraziť príkazom:
[e-mail chránený]:~# smartctl -a / dev / sda

Napriek tomu je pomôcka pomerne rozšírená a určite sa odporúča používať. Okrem toho sú na webe kopy návodov na nastavenie e-mailových upozornení v prípade problémov s pevnými diskami.

hdparm

Hlavným účelom programu je doladiť parametre pevných diskov IDE / SATA, vyladiť výkon. Okrem toho môžete tiež zobraziť charakteristiky zariadení pomocou príkazu (špecifikujte svoj disk):
[e-mail chránený]:~# hdparm -i / dev / sda

V rámci tohto článku sa neplánuje zvažovať problémy s konfiguráciou disku.

ethtool

Nástroj ethtool vám pomôže diagnostikovať sieťovú kartu. Samozrejme, môžete extrahovať informácie pomocou ifconfig, a dmesg atď., Ale z ethtool získate neporovnateľne užitočnejšie dáta. Je potrebné poznamenať, že program pracuje s virtuálnymi sieťovými rozhraniami dosť krivo. Napríklad zobrazenie štatistík na rozhraní bolo vo všeobecnosti prázdne:
[e-mail chránený]:~# ethtool -S eth0
nie sú k dispozícii žiadne štatistiky

Všeobecné informácie o rozhraní boli asi také vzácne:
[e-mail chránený]:~# ethtool eth0
Nastavenia pre eth0:
Zistil sa odkaz: áno

Situácia s fyzickými rozhraniami je oveľa lepšia. Okrem diagnostiky je nástroj určený aj na konfiguráciu rozhraní.

sysstat

Balík obsahuje množstvo nástrojov schopných zobraziť informácie o výkone určitých komponentov systému. Iostat môže byť obzvlášť užitočný, keď potrebujete analyzovať zaťaženie pevných diskov z hľadiska I/O operácií.

Uviedol som zďaleka nie všetky hlavné nástroje, s ktorými je potrebné poznať, ale pokiaľ je to možné, doplním článok o potrebný materiál.

Zdroj: Vyhľadanie podrobností o hardvéri vášho počítača so systémom Linux bez použitia skrutkovača
preklad: V. Kostromin, 11. januára 2007

Mnohí neskúsení používatelia Linuxu majú problém, ak potrebujú určiť niektoré vlastnosti hardvéru svojho počítača so systémom Linux iba pomocou príkazov dostupných v konzole (príkazový riadok). Grafické shelly nedávno obsahovali špeciálne nástroje, ktoré poskytujú takéto informácie v pomerne pohodlnej forme. Nie sú však vždy dostupné správcom a domácim používateľom.

V tomto krátkom návode vám ukážeme, ako získať špecifikáciu vášho počítača so systémom Linux z príkazového riadku. Po prečítaní tejto príručky až do konca môžete v priebehu minúty získať úplný zoznam všetkých komponentov vášho počítača s ich charakteristikami. To vám môže napríklad pomôcť nájsť správne ovládače a adresy podpory pre váš hardvér.

Časť 1: Získavanie informácií o hardvéri pomocou príkazu lspci

Utility lspci je určený na zobrazovanie informácií o všetkých zberniciach PCI v systéme, ako aj o všetkých zariadeniach pripojených na tieto zbernice. V predvolenom nastavení zobrazuje krátky zoznam takýchto zariadení. Môžete však použiť množstvo možností lspci pre podrobnejšie informácie alebo informácie orientované na následné spracovanie inými programami.

# / sbin / lspci
00: 00.0 Hostiteľský most: Intel Corporation 82865G / PE / P DRAM radič / Host-Hub rozhranie (rev 02)
00: 02.0 VGA kompatibilný radič: Integrovaný grafický radič Intel Corporation 82865G (rev 02)
00: 1d.0 USB radič: Intel Corporation 82801EB / ER (ICH5 / ICH5R) USB UHCI radič # 1 (rev 02)
00: 1e.0 PCI most: Intel Corporation 82801 PCI Bridge (rev c2)
00: 1f.1 IDE rozhranie: Intel Corporation 82801EB / ER (ICH5 / ICH5R) IDE radič (rev 02)
03: 08.0 Ethernetový radič: Intel Corporation 82562EZ 10/100 Ethernetový radič (rev 02)
....

Teraz viem, že mám grafický čip Intel Corporation 82865G Integrated Graphics Controller a môžem preň vyhľadať na internete ovládač. Pozrime sa, aké informácie obsahuje riadok zodpovedajúci tomuto čipu:

Na získanie ďalších informácií môžete použiť voľby -v alebo -vv. Napríklad, keď som dal príkaz lspci -v, dostal som nasledovný výsledok:

00: 02.0 VGA kompatibilný radič: Intel Corporation 82865G Integrated Graphics Controller (rev 02) (prog-if 00)
Subsystém: Neznáme zariadenie IBM 0285
Príznaky: bus master, fast devsel, latencia 0, IRQ 185
Pamäť pri f0000000 (32-bitová, vopred načítateľná)
Pamäť e8000000 (32-bitová, bez predvýberu)
I/O porty na 1800
Možnosti: Správa napájania verzia 1

Utility lspci najprv načíta informácie zo zbernice PCI a potom hľadá ďalšie informácie vo vlastnej databáze, ktorá sa nachádza v súbore /usr/share/hwdata/pci.ids a obsahuje údaje ako ID zariadenia, výrobca, zariadenia, triedy a podtriedy. Príkaz

# cat /usr/share/hwdata/pci.ids | grep "Integrovaný grafický radič 82865G"
Integrovaný grafický ovládač 82865G

vám umožňuje uistiť sa, že naše zariadenie je tiež obsiahnuté v tejto databáze. Tento zoznam zariadení je na stránke podporovaný a môžete použiť tento nástroj update-pciids aby ste získali jeho najnovšiu verziu.

Časť 2: Získavanie informácií o hardvéri pomocou príkazu dmesg

Príkaz dmesg bežne používaný v Linuxe na zobrazenie obsahu kruhovej vyrovnávacej pamäte jadra. Umožňuje používateľovi zobraziť obsah správ generovaných počas procesu zavádzania systému.

Utility lspci veľmi pomáha pri detekcii zariadení PCI, často však potrebujeme zoznam všetkých zariadení v systéme. Použitím dmesg môžeme zobraziť charakteristiky všetkých zariadení, ktoré deteguje náš operačný systém.

# dmesg | menej
Normálna zóna: 59248 strán, dávka LIFO: 15
Prítomný DMI.
Prideľovanie zdrojov PCI od 20 000 000 (medzera: 10 000 000: eec00000)
Zistený procesor 2793,055 MHz.
Postavený 1 zoznam zón. Celkový počet strán: 63344
Príkazový riadok jadra: ro root = / dev / VolGroup00 / LogVol00 rhgb quiet
Povolenie rýchleho ukladania a obnovy FPU ... hotovo.
Inicializuje sa CPU # 0
CPU 0 irqstacks, hard = c07ae000 soft = c078e000

.....

Ako môžeš vidieť dmesg produkuje veľa údajov, takže ich musíte použiť grep obmedziť výstup presne na údaje, ktoré nás zaujímajú. Predpokladajme, že nás v súčasnosti zaujímajú informácie o pamäti nainštalovanej v systéme.

# dmesg | grep -i pamäť
Pamäť: 244136k / 253376k k dispozícii (2139k kód jadra, 8732k rezervovaných, 866k dát, 240k init, 0k highmem)
Uvoľnenie pamäte initrd: 2124 kB uvoľnených
Celková pridelená pamäť HugeTLB, 0
Ovládač stálej pamäte v1.2
agpgart: Zistila sa ukradnutá pamäť 8060K.
Uvoľnenie nevyužitej pamäte jadra: uvoľnených 240 kB
.....

Podobným spôsobom môžete izolovať informácie o akomkoľvek zariadení, ktoré vás zaujíma alebo s ktorým máte momentálne problémy, napríklad o centrálnej procesorovej jednotke (CPU), zariadeniach USB atď.

Časť 3: Získavanie informácií o hardvéri z / proc

Niekedy možno budete chcieť získať informácie o RAM alebo CPU v spustenom systéme v reálnom čase. Na tento účel môžete použiť virtuálny súborový systém / proc... Možno si pamätáte na užitočnosť top, ale uvedomte si, že iba načítava údaje zo súborového systému / proc... Len nezabudnite, že by ste nemali robiť žiadne zmeny v súboroch umiestnených v adresári / proc, môžete použiť iba príkaz kat na zobrazenie týchto súborov.

Vykonaním príkazu ls v katalógu / proc, uvidíte rôzne adresáre a súbory, ktoré obsahujú informácie o vašom systéme.

Pozrime sa, čo tieto súbory obsahujú, počnúc napríklad cpuinfo.

# cat / proc / cpuinfo
procesor: 0
vendor_id: GenuineIntel
rodina procesorov: 15
model: 2
názov modelu: Intel (R) Pentium (R) 4 CPU 2,80 GHz
krok: 9
CPU MHz: 2793,055
veľkosť vyrovnávacej pamäte: 512 kB
....

Pozrime sa hlbšie a otvorme nejaký priečinok. Poďme napríklad do zložky ide a prečítajte si informácie o mojom pevnom disku.

# cat / proc / ide / ide0 / hda / ovládač
ide-disk verzia 1.18
# cat / proc / ide / ide0 / hda / kapacita
78156288
# cat / proc / ide / ide0 / hda / model
IC35L060AVV207-0

Časť 4: Získajte viac informácií o pevnom disku pomocou fdisk

V predchádzajúcom kroku pomocou / proc, sme dostali len základné, no dosť obmedzené informácie o parametroch nášho pevného disku. Teraz získajme úplnejšie údaje pomocou príkazu dostupného v systéme Linux fdisk... S jeho pomocou môžete získať informácie o oddieloch pevného disku, množstve dostupného miesta, množstve použitého miesta, swape a oveľa viac.

Program fdisk je nástroj na prácu s tabuľkou rozdelenia disku. Fyzické disky sú zvyčajne rozdelené do viacerých logických jednotiek nazývaných diskové oddiely. Informácie o rozdelení fyzického disku sú uložené v tabuľke rozdelenia disku, ktorá sa nachádza v nultom sektore fyzického disku.

Ak chcete zistiť, aké oddiely má váš disk, stačí zadať príkaz:

# fdisk -l
Disk/dev/hda: 40,0 GB, 40016019456 bajtov
255 hláv, 63 sektorov / stopa, 4865 valcov
Jednotky = cylindre 16065 * 512 = 8225280 bajtov
Zavádzanie zariadenia Začiatok koncových blokov ID systému
/ dev / hda1 * 1 13 104391 83 Linux
/ dev / hda2 14 4865 38973690 8e Linux LVM

Ak máte dva alebo viac diskov (napríklad hda a hdb) a chcete získať údaje o konkrétnom disku, zadajte požadovaný disk v príkaze, napr. fdisk -l / dev / hda

Časť 5 (DOPLNENÉ na základe spätnej väzby od čitateľa): Výstup informácií systému BIOS pomocou príkazu dmidecode

Utility dmidecode zobrazí obsah tabuľky DMI (Desktop Management Interface) vášho systému vo formáte čitateľnom pre ľudí. Táto tabuľka obsahuje informácie týkajúce sa hardvérových komponentov systému, informácie o verzii systému BIOS a ďalšie. Vo výstupe dmidecode obsahuje nielen popis aktuálnej konfigurácie systému, ale poskytuje aj údaje o maximálnych povolených hodnotách parametrov, napríklad o podporovaných prevádzkových frekvenciách CPU, maximálnej možnej veľkosti pamäte atď.

Ak chcem obmedziť výstup len na ktoré konkrétne oblasti DMI, môžem tak urobiť pomocou možnosti ─ t a uviesť, o aký typ informácií mám záujem. Napríklad informácie o procesore sú typu 4 a informácie o pamäti sú typu 17 v DMI.

Dúfam, že vám tento návod pomôže rovnako, ako pomohol môjmu priateľovi, ktorý si nainštaloval MythTV na systém založený na Fedore a pred čítaním tohto návodu nechal svoj počítač otvorený, aby mohol určiť parametre niektorých zariadení :)

Z reakcií čitateľov

Nájdenie detailov hardvéru bez použitia skrutkovača

Ďakujem za skvelý a veľmi poučný článok. Teraz môžem konečne zavrieť kryt puzdra na mojom počítači :-)
TonyH

Vyskúšajte DMIDECODE

S dmidecode môžete získať oveľa viac informácií v jednej správe.
Bez podpisu

V skutočnosti je možné zistiť oveľa viac o tom, aký typ pamäte váš počítač používa, napríklad č. kolíky a rýchlosť a typ...
Ak som napríklad v práci a môžem sa na diaľku prihlásiť do svojho domáceho počítača, môžem zhromaždiť dostatok údajov, aby som zistil, či je možné upgradovať moju pamäť RAM...?
Skúsil som to urobiť raz a nepodarilo sa mi to - bol som veľmi blízko k vyriešeniu tohto problému, mal som na výber iba dve možnosti pre typ čipsetu základnej dosky, náhodne som si vybral jednu z nich a ... neuhádol som: -(!!
Bez podpisu

Skúste niečo iné!

lshw je na to skvelým nástrojom.
K dispozícii je aj rozhranie GTK.
Bez podpisu

Ďalšie dobré služby

Skúste to znova dmidecode... Na systémoch založených na RedHat / Fedore sa zvyčajne nachádza v adresári / usr / sbin a je tiež dostupný cez Portage alebo v zdrojovom kóde (www.nongnu.org/dmidecode/). Povie vám veľa o vašom systéme.

Pre informácie o diskoch môžete použiť smartd a smartctl.

Christopher Arnold (arnoldch AT yahoo-inc DOT com)

súborový systém lsusb a / sys

Nezabudnite prehľadávať systém súborov / sys... V niektorých ohľadoch môžu byť informácie nadbytočné... ale nie všetky.

Na detekciu zariadení USB existuje lsusb.

senzory odhalí podrobnosti týkajúce sa vášho čipu RAM.

dmesg: Niekedy sú informácie prepísané novšími správami jadra. Ak áno, pozrite sa /var/log/boot.log.

Na systémoch SUSE: Na vykonávanie bežných administratívnych úloh máte k dispozícii nástroj s názvom „yast2“. Poskytuje tiež informácie o hardvéri.

Bez podpisu

A čo dmidecode?

Prevzaté z manuálovej stránky dmidecode.

dmidecode je nástroj na zobrazenie obsahu tabuľky DMI (niekedy nazývanej tabuľky SMBIOS) vášho počítača vo formáte čitateľnom pre ľudí. Táto tabuľka obsahuje popis hardvérových komponentov systému a ďalšie užitočné informácie, ako sú sériové čísla a verzia systému BIOS.

dmidecode

Poskytuje bios informácie o spustenom OS.
Nefunguje na všetkých hardvérových platformách.

Bez podpisu

Ešte

Pozri lshw a dmidecode

Bez podpisu

Ďalší...

Nezabudnite na lsusb! Veľmi užitočná pomôcka. Stačí nainštalovať balík usbutils z ich distribúcie (aspoň v Ubuntu a Fedore, pravdepodobne aj v iných).

Bez podpisu

hdparm

Pre podrobné informácie o pevných diskoch môžete použiť hdparm.

Bez podpisu

A čo HAL?

Treba tiež spomenúť, že ak sa používa moderné desktopové prostredie, príkaz lshal poskytne veľa informácií z HAL (Hardware Abstraction Layer, inými slovami projekt Utopia).

Bez podpisu

lshw

Môžete tiež použiť pomôcku lshw, ktorý umožňuje zobraziť informácie zo všetkých týchto zdrojov vo forme jedného zoznamu (môžete ho zobraziť).


V skratke:

  • Kontext procesu SELinux možno zmeniť, ak je takáto operácia popísaná v pravidlách sepolicy. Android 4.4 (KitKat) má schopnosť eskalovať privilégiá zmenou kontextu. Ale od 5.x to už nie je možné.
  • existujú kontexty súborov.
  • Okrem kontextu súborov a procesov Android implementuje kontexty pre parametre vlastnosti_kontexty.

adbd a konzolu

Jediným dostupným spôsobom, ako získať relatívne privilegovaný shell na produkčných zariadeniach s Androidom, je režim vývojára. Vývojársky režim spúšťa démona adbd, ktorý môže fungovať aj ako analóg ssh / telnet. V systéme Android KitKat sa nachádza v initramfs pod cestou / sbin / adbd a nie je čitateľný pre používateľov bez oprávnenia root. Spočiatku adbd beží ako root a beží v kontexte / doméne init SELinux (používa ho proces init a vo všeobecnosti má viac privilégií ako iné domény). Ak je kontext procesu explicitne špecifikovaný napríklad v /init.rc seclabel u: r: adbd: s0, potom sa proces okamžite spustí v zadanom kontexte. Pri inicializácii adbd v závislosti od parametrov kompilácie (a parametrov (vlastností) systému Android znižuje oprávnenia, konkrétne zmení aktuálneho používateľa z root na shell, nastaví kontext SELinux na škrupina a obmedzí všetky funkcie systému okrem CAP_SETUID a CAP_SETGID(čo je potrebné na ladenie aplikácií cez run-as). Takzvaný Capability Bounding Set neumožňuje detským aplikáciám zvyšovať schopnosti, iba downgrady. Tieto privilégiá vám umožňujú v telefóne robiť o niečo viac ako nič. Možnosti aktuálneho procesu môžete zobraziť pomocou príkazu cat / proc / self / status | grep CapBnd. A môžete ich dešifrovať pomocou príkazu caph (nie je k dispozícii v systéme Android), napríklad:


$ capsh --decode = 0000001ffffffff

Aktuálny kontext SELinux je možné zobraziť pomocou príkazu id alebo cat / proc / self / attr / current. Predchádzajúci kontext procesu je možné zobraziť pomocou príkazu cat / proc / self / attr / prev.


Zobrazenie kontextu súborov: ls -Z
Zobrazenie kontextu "bežiacich procesov: ps -Z

Získame root prístup

koreň, ale nie rovnaký

Prvá vec, ktorú som urobil, bolo použitie dirtycow na zamýšľaný účel - zmenil som / system / bin / run-as, čím som nastavil UID / GID na 0 (su robí to isté). Nepodarilo sa mi však pripojiť súborový systém, dokonca ani tmpfs. Nepodarilo sa mi načítať ani moduly jadra. Zobraziť dmesg - č. Nemohol som ani prechádzať adresáre, ktoré mali 700 oprávnení a patrili iným používateľom systému. Mohol som čítať a zapisovať iba na blokové zariadenia a prezeranie súborov alebo adresárov bolo možné vďaka nastaveniu UID / GID konkrétneho používateľa (napísal som svoj bicykel - analóg su, ktorý mohol nastaviť kontext selinux a používateľa / skupinu) .


Najprv som vyhodil celý firmvér, bootovanie a obnovu:


$ dd if = / dev / block / mmcblk0 of = / storage / sdcard1 / mmcblk0.img $ dd if = / dev / block / platform / msm_sdcc.1 / by-name / boot of = / storage / sdcard1 / boot.img $ dd if = / dev / block / platform / msm_sdcc.1 / by-name / recovery of = / storage / sdcard1 / recovery.img

Výpis môžete preskúmať pomocou pomocných programov kpartx a unpackbootimg. Príkaz kpartx -a mmbblk0.img vytvorí virtuálne blokové zariadenie dostupné na / dev / mapper / loop0. Môžete s ním pracovať ako s akýmkoľvek iným blokovým zariadením. Pomocou nástroja unpackbootimg som rozbalil výpisy pri spustení a obnovení.


Potom som skúsil zapísať do recovery / dev / zero, skontrolovať a okamžite obnoviť z výpisu.


Keďže som mohol zapisovať do blokových zariadení, potom som mohol napísať vlastnú obnovu. Našiel som TWRP od Brigadier, flashoval som ho do recovery a rebootoval do neho adb reboot recovery. Nevidel som TWRP, ale iba ikonu Androidu "a s výkričníkom. Takto vyzerá štandardné obnovenie, čo znamená, že TWRP nebolo blikané.


Reštartujem do normálneho režimu, spustím exploit, skontrolujem obnovu hashu oddielu - hash sa zhoduje s pôvodným. Pokúšam sa zapísať údaje znova - hash sa zmenil! Pamätám si cache stránok, čistím (echo 3> / proc / sys / vm / drop_caches) - hash je starý. Tie. všetko, čo napíšem do blokového zariadenia, letí bez chýb na / dev / null a niekedy skončí v cache Linuxu. Prebieha však aktualizácia firmvéru nejakým spôsobom? A používateľské dáta sa nejakým spôsobom zapisujú do internej pamäte. Musíme kopať ďalej.

Pokúšam sa vypnúť SELinux

Vtedy som si myslel, že všetky chyby o nedostatku privilégií sú spôsobené SELinuxom (úplne som zabudol, že schopnosti sa dajú orezať). Nevidel som protokoly dmesg, logcat neukázal nič relevantné. A začal som premýšľať, ako vypnúť SELinux.


Prvá stopa, ktorú sa mi podarilo nájsť:


$ grep -A2 reload_policy boot / ramfs / init.rc na majetku: selinux.reload_policy = 1 reštart ueventd reštart nainštalovaný

Tie. pred aplikáciou ZIP obnova odpojí všetky oddiely, ale v mojom prípade sa niečo pokazí.

Kopanie zdrojov jadra

Licencia GPL zaväzuje výrobcov smartfónov uvoľniť zdrojové kódy jadra. Vďaka Linusovi a Stallmanovi za to. Niekedy výrobcovia uverejnia niečo vľavo, niekedy opravia zdroje, ale bez súboru defconfig, niekedy správne a veľmi zriedka s návodom, ako ich zostaviť (napr. LG).


V mojom prípade existovali zdroje so správnym defconfig, ale bez pokynov. S trochou potu sa mi podarilo jadro poskladať a uistil som sa, že toto nie je úplná lipa.


Po dlhom čase som sa rozhodol pre dva súbory:

háčiky

Kyocera dlho nepremýšľala, ale jednoducho napísala háčiky na potenciálne nebezpečné operácie v systéme Android: mount, umount, insmod (je možné načítať iba jeden modul - wlan a iba vtedy, ak ho načíta proces init) atď. . Tu je problém s obnovou. Nepodarilo sa mu odpojiť súborový systém / system! Tieto operácie boli povolené len pre iniciačný proces. Vrátane toho, že som nemohol vypnúť SELinux, pretože táto funkcia bola zakázaná pri kompilácii jadra. Tieto háčiky bolo možné obísť iba vtedy, ak bolo jadro načítané s určitými parametrami ( kcdroidboot.mode = f-ksg alebo androidboot.mode = kcfactory, o nich trochu neskôr).

reštart

Tiež zaujímavý súbor na štúdium. Popisuje možné možnosti stiahnutia telefónu:

  • adb reštartujte bootloader- režim rýchleho spustenia, nie je dostupný v mojom telefóne (0x77665500 - hex tag 00556677 v sekcii sbl1)
  • obnovenie po reštarte adb- režim obnovenia (0x77665502 - hex tag 02556677 v sekcii sbl1)
  • adb reboot rtc- takzvaný ALARM_BOOT. Nechápal som prečo, v sbl1 nie je žiadny štítok. Pravdepodobne odkazuje na https://developer.android.com/reference/android/app/AlarmManager.html
  • adb reštartujte oem-X(v mojom prípade oem-1, 0x6f656d01 - hex tag 016d656f v sekcii sbl1). Čo sa deje počas tohto režimu, nastavuje výrobca. Podľa zdrojových kódov sa telefón reštartuje do tohto režimu, keď zlyhá overenie firmvéru v sekcii modemu.
  • adb reboot edl- núdzové sťahovanie, prenesie telefón do štandardného režimu sťahovania qualcomm "ovsky. Telefón je definovaný ako QHSUSB__BULK COM port, cez ktorý môžete preniesť podpísaný bootloader (ak sa nemýlim, každý bootloader je určený pre rovnaký typ SoC a výrobcu telefónu) a vykonávať s telefónom nízkoúrovňové operácie vrátane flashovania. Zvyčajne sa používa v spojení s QPST. Niektorým telefónom unikajú bootloadery do siete, napríklad Kyocera KYL22. Odkiaľ pochádzajú - neviem.
  • Určitý režim sťahovania, v ktorom cez reštart adb nechoďte. Tu je to zaujímavé ... Ale o tom neskôr.

Trochu o tom, ako funguje bootovanie na telefónoch s procesorom Qualcomm:


Integrovaný zavádzač ROM (pbl - primárny zavádzač) od Qualcommu načíta oddiel sbl1 (sekundárny zavádzač). sbl1 načítava tz (trust zone), potom aboot (zavádzanie Androidu, malé jadro, lk). Aboot zase načíta boot, recovery alebo fota.


Popis sekcií zapojených do nakladania:

  • tz – dôveryhodná zóna Qualcomm. Vykonáva operácie na nízkej úrovni vrátane práce s QFuses (časť rpmb).
  • rpm - Firmvér Resource a Power Manager. Firmvér pre špecializovaný SoC zodpovedný za zdroje a výkon.
  • sdi - oddiel úložiska dôveryhodnej zóny. Údaje používané Trust Zone.

Všetky tieto sekcie sú podpísané reťazou certifikátov.

fota

V niektorých prípadoch je užitočné ignorovať aktualizácie firmvéru.


FOTA - firmvér vzduchom. Na rozdiel od zavádzania a obnovy je fota neoficiálny režim zavádzania systému Android. Úlohou Fota je aktualizovať firmvér. Kyocera na to využíva riešenie od firmy Red Bend, do ktorého sa zmestí 35Mb aktualizácia nielen jadra, ale aj / systémového oddielu. Preto je zapisovanie do systémového oddielu / zakázané, v opačnom prípade môže aplikácia opravy na nesprávne údaje vypnúť telefón.


Na mojom telefóne bola aktualizácia. Mohol som sa na to odvážiť, pretože som už mal možnosť kedykoľvek zapisovať do / vyrovnávacej pamäte a prerušiť aktualizáciu.


Po preskúmaní zdrojového kódu aplikácie Java zodpovednej za aktualizáciu mi bolo jasné, ako sa to deje:

  • Java aplikácia stiahne špeciálny súbor /cache/delta/boot_delta.bin, vytvorí súbor / cache / delta / Alt-OTA_dlcomplete, ktorý potvrdí úspešné stiahnutie súboru a ďalšie súbory s hlavičkami.
  • Po potvrdení aktualizácie sa znova skontroluje prítomnosť týchto súborov.
  • Ak sú súbory na svojom mieste, sekcia fotamng sa upraví prostredníctvom knižnice libjnialtota.so.

Píšem príkaz, ktorý neustále vypisuje oddiel a premenúva /cache/delta/boot_delta.bin. Hneď po dohode spúšťam reštart telefónu. Telefón sa reštartuje do režimu FOTA, nehlási žiadnu aktualizáciu a reštartuje sa do normálneho režimu.


Začínam študovať údaje, ktoré som vyhodil. V sekcii / cache dostávam ako bonus fota logy, ktoré majú dokonca dmseg logy! Samotný reštart vo fota je inicializovaný bajtmi "1" v sekcii fota:


$ dd if = / data / local / tmp / one_bit.bin of = / dev / block / platform / msm_sdcc.1 / by-name / fotamng seek = 16 bs = 1 count = 1 $ dd if = / data / local / tmp / one_bit.bin of = / dev / block / platform / msm_sdcc.1 / by-name / fotamng seek = 24 bs = 1 count = 1 $ dd if = / data / local / tmp / one_bit.bin of = / dev /block/platform/msm_sdcc.1/by-name/fotamng seek = 131088 bs = 1 počet = 1 $ dd if = / data / local / tmp / one_bit.bin of = / dev / block / platform / msm_sdcc.1 / vyhľadávanie podľa mena / vyhľadávania = 131096 bs = 1 počet = 1

Po reštarte sa vynulujú. V dmesg som si všimol prítomnosť parametra jadra kcdroidboot.mode = f-ksg... Tu to je! Tie. bootloader odstraňuje ochranu pre fota. A teoreticky, ak napíšem bootovací oddiel do fota a reštartujem telefón do tohto režimu, potom dostanem jadro s vypnutou ochranou Kyocera. Stále však nemôžem zapisovať do systémových oddielov.

Kontrola zdrojov malého jadra (lk).

V sekcii spustenia je bootloader systému Android, ktorého zdroje vanilla sa nachádzajú na adrese:


Nájdete tam informácie o tom, ako načítať niektoré z režimov. Našiel som napríklad informáciu, že ak do sekcie misc napíšete "boot-recovery", tak bez obnovenie po reštarte adb... Pri načítaní do obnovy toto. A ak sa obnovenie nedá spustiť, telefón prejde do zavádzacej slučky a stratíte ho. Buďte teda opatrní, alebo sa radšej vyhnite tejto možnosti reštartu.


Nájdete tam aj kód, ktorý prepne oblasť systému emmc do režimu. Odpoveď na otázku, prečo nie je možné prepísať obnovu. Túto ochranu je možné deaktivovať z jadra Linuxu napísaním vhodného modulu jadra. Všetko už napísal kamarát z krajiny vychádzajúceho slnka, ktorý akoby nerovnomerne dýchal smerom k telefónom spoločnosti Kyocera. Modul nefungoval prvýkrát, niekedy visí mmc v režime nároku. Možno nie je všetko také jednoznačné a je potrebný podrobný výskum.


Takto sa overuje podpis zavádzacích oddielov:

Prvé úspechy

dmesg

Google mi pomohol odpovedať na otázku, prečo nemôžem čítať protokoly jadra: / proc / sys / kernel / dmesg_restrict. Hodnota tohto parametra je pri spustení telefónu nastavená na 1. Ak používateľ nemá CAP_SYS_ADMIN protokoly nie sú dostupné.

uevent_helper

V mojom prípade bolo prekvapivo možné nastaviť / sys / kernel / uevent_helper. Ak do tohto parametra napíšete cestu k spustiteľnému súboru (fungovať bude aj shell skript), tak sa spustí v určitom intervale od procesu init v kontexte init a hlavne s plnými možnosťami.


Napísal som scenár:


#! / system / bin / sh echo 0> / proc / sys / kernel / dmesg_restrict

Stiahol ho do telefónu a napísal jeho cestu do / sys / kernel / uevent_helper. Teraz mám možnosť vidieť dmesg!

Opravený adbd


Pretože Už ma nebaví mať prístup k oklieštenej konzole Android a som príliš lenivý na to, aby som opravoval binárny súbor adbd, tak som sa rozhodol zostaviť svoj adbd s blackjackom a kurvami. Aby som to urobil, musel som si stiahnuť 70 Gb zdrojov Androidu, aby som sa nehrabal s každou závislosťou zvlášť. Odstránil kontrolu rezacích schopností, skompiloval ho, zmenil / sbin / adbd a získal plnohodnotnú koreňovú konzolu. Teraz môžem pripojiť súborové systémy, sledovať dmesg bez odpojenia dmesg_restrict, ticho prezerajte a upravujte súbory, ktoré nevlastní root a ďalšie. Ale zatiaľ nemôžem pripojiť / systémový oddiel a načítať moduly do jadra.


Mimochodom, tomuto postupu sa dá vyhnúť kompiláciou lsh a nahradením jeho cesty v / sys / kernel / uevent_helper. Je žiaduce zabaliť spustenie lsh do skriptu, ktorý nastaví prostredie PATH, inak budete musieť zadať úplnú cestu ku každému príkazu.

WiFi

WiFi v mojom telefóne funguje cez modul jadra. WiFi je zapnuté - modul je načítaný. WiFi vypnuté - modul je vyložený. Ak modul nahradíte vlastným, po zapnutí WiFi by sa mal načítať falošný modul. Našťastie pre mňa digitálny podpis modulov nebol overený. Prvá vec, ktorú som vyskúšal, bolo zostavenie a načítanie modulu, ktorý deaktivuje SELinux nahradením pamäte jadra telefónom Amazon Fire Phone: https://github.com/chaosmaster/ford_selinux_permissive


Na zostavenie modulu potrebujete viac-menej vhodné zdroje jadra a súbor Module.symvers. Ak sa zdroje presne zhodujú s jadrom používaným v telefóne, potom by mal stačiť súbor Module.symvers vygenerovaný automaticky pri zostavovaní jadra.


Ak pri zavádzaní modulu jadro prisahá ( nesúhlasí s verziou symbolu module_layout), budete musieť extrahovať Module.symvers zo zavádzacej časti. Dá sa to urobiť pomocou skriptu https://github.com/glandium/extract-symvers:


$ unpackbootimg -i boot.img -o boot $ extract-symvers.py -e le -B 0xc0008000 boot / boot.img-zImage>% PATH_TO_KERNEL% / Module.symvers

Svoj modul pre telefón Kyocera nemôžete len tak vziať a zložiť.




S každým riešením ďalšieho problému sa proces viac a viac podobá aporiám o Achillovi a korytnačke. Neviem, ako dlho mi nadšenie vydrží. Možno sú tu skúsení ľudia, ktorí vám pomôžu dostať sa na dno králičej nory.


Pri tejto príležitosti vyjadrujem svoju vďaku vývojárom z Kyocera za vynikajúce zariadenia a ich ochranu. Inak by tento článok neexistoval. Na druhej strane, nedostatok pravidelných aktualizácií je veľmi frustrujúci. Ak máte model telefónu so schopnosťou odomknúť bootloader, určite si ho kúpim.


P.S. Veľká vďaka patrí Nikolajovi Elenkovovi, autorovi interných bezpečnostných prvkov systému Android. Jeho vysvetlenie toho, ako bootloader funguje, „ale pomohlo pochopiť proces zavádzania systému Android.


P.P.S. Ďalší špecialista na bezpečnosť mobilných informácií Justin Case povedal, že pozná zraniteľnosť, ktorej sú vystavené všetky moderné procesory Qualcomm, no jej detaily neprezradí.

Značky:

  • Android
  • bootloader Odoslať anonymne

Problém
Napriek všetkým svojim výhodám je zbernica PCI minulosťou. Častejšie potrebujete získať zoznam všetkých zariadení v systéme, nielen zariadenia PCI: sú to zariadenia USB,
a SCSI zariadenia, konfigurácia pamäte a dokonca aj procesor.
Riešenie
Použite program dmesg. Program vypíše všetok hardvér detekovaný jadrom.
Ak chcete zobraziť všetky výstupy dmesg, zadajte príkaz
$ dmesg | menej
Výstup dmesg možno tiež filtrovať, aby sa našiel špecifický
zariadení. Napríklad nasledujúci príkaz uvádza zoznam všetkých zariadení PCI:
$ dmesg I grep -i usb
Zoznam zariadení ISA:
$ dmesg] grep -i isa
isapnp: Skenovanie kariet PnP...
isapnp: SB audio zariadenie quirk - zvýšenie rozsahu portov
isapnp: Karta "SupraExpress 56i Voice"
Určenie množstva fyzickej pamäte v systéme:
$ dmesg | grep -i pamäť
Pamäť: 256492 / 262080k k dispozícii (1467k kód jadra.5204 rezervované.516k dát.96k
i n i t. OK vysoká pamäť)
Výpis zariadení IDE používajúcich subsystém emulácie SCSI v jadrách 2.4 a starších:
$ dmesg | grep -i scsi
Príkazový riadok jadra: root = / dev / hda6 ro hdb = scsi hdc = scsi
ide_setup: hdb = scsi
ide_setup: hdc = scsi

hdb: pripojený ovládač ide-scsi
hdc: pripojený ovládač ide-scsi
scsio: emulácia hostiteľského adaptéra SCSI pre zariadenia IDE ATAPI
A takto vyzerajú „skutočné“, neemulované zariadenia SCST:
$ dmesg | grep -i scsi
SCSI ovládač podsystému Revízia: 1.00
scsiO: Adaptec AIC7XXX EISA / VLB / PCI SCSI HBA OVLÁDAČ, Rev. 6.2.8
aic7892: Ultral60 Wide Channel A, SCSI ID = 7. 32/253 SCB
... Predajca: IBM-PSG Model: DPSS-336950M M Rev: S9HA
Pripojený scsi disk sda na scsiO, kanál 0. id 0. lun 0
(scsi0: A: 0): 160 000 MB / S prenosy (80 000 MHz DT. offset 63,16 bitov)
SCSI zariadenie sda: 71096640 512-bajtových hdwr sektorov (36401 MB)
Kontrola oddielu:
sda: sdal sda2sda3 sda4< sda5 sda6 >
Nasleduje informácia o USB kamere pripojenej k systému, vrátane
jeho umiestnenie v súborovom systéme. Zvyčajne informácie o zariadení USB
trvá desať alebo viac riadkov:
% dmesg | grep -i usb
. . .
usb.c: zaregistrovaný nový d r i v e r ibmcam
icmcam.c: Našla sa USB kamera IBM PC Camera (model 2. rev.0x030a)
usbvideo.c: ibmcam zapnutá / dev / videoO: plátno = 352 x 240 veľkosť videa = 352 x 240
Zobrazenie informácií o sériových portoch:
$ dmesg | grep -i tty
ttySOO pri 0x03f8 (irq = 4) je 16550A
Zobrazenie informácií o procesore (alebo procesoroch):
$ dmesg | grep -i cpu
Inicializuje sa CPU # 0
CPU: LI I Cache: 64 kB (64 bajtov/riadok). D cache 64 kB (64 bajtov/riadok)
CPU: L2 Cache: 64K (64 bajtov/riadok)
Hlásenie kontroly počítača Intel je povolené na CPU č. 0.
CPU: po generických, caps: 0183f9ff clc7f9ff 00000000 00000000
CPU: Bežné limity: 0183f9ff clc7f9ff 00000000 00000000
CPU: AMD Duron (tm) Processor stepping 01
Upozorňujeme, že vyhľadávanie vráti iba tie reťazce, v ktorých sa nachádza požadovaný podreťazec. Často obsahujú dodatočné informácie
na susedných riadkoch a nájdené priamou kontrolou súborov:
Inicializuje sa CPU # 0
Zistený procesor 801,446 MHz.