Biorąc przykład Ubuntu, czy możemy stwierdzić, czy jądro zostało skompilowane na zamówienie, a nie co zawiera dystrybucję?
Biorąc przykład Ubuntu, czy możemy stwierdzić, czy jądro zostało skompilowane na zamówienie, a nie co zawiera dystrybucję?
Odpowiedzi:
Jasne, po prostu sprawdź, czy dpkg
o tym wie.
Najpierw sprawdź uruchomioną wersję jądra.
uname -a
Linux orwell 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux
Następnie powiedz, dpkg
aby szukał pliku obrazu jądra w dpkg
bazie danych.
dpkg -S /boot/vmlinuz-3.2.0-4-amd64
linux-image-3.2.0-4-amd64: /boot/vmlinuz-3.2.0-4-amd64
Lub, lepiej, użyj dlocate
z dlocate
pakietu. dlocate
Najpierw buduje pamięć podręczną z dpkg
bazy danych i korzysta z niej. Więc to jest szybkie.
dlocate /boot/vmlinuz-3.2.0-4-amd64
linux-image-3.2.0-4-amd64: /boot/vmlinuz-3.2.0-4-amd64
Na koniec sprawdź, czy archiwa Debiana zawierają ten pakiet.
apt-cache policy linux-image-3.2.0-4-amd64
linux-image-3.2.0-4-amd64:
Installed: 3.2.68-1+deb7u1
Candidate: 3.2.68-1+deb7u1
Version table:
*** 3.2.68-1+deb7u1 0
500 http://security.debian.org/ wheezy/updates/main amd64 Packages
100 /var/lib/dpkg/status
3.2.65-1 0
500 http://httpredir.debian.org/debian/ wheezy/main amd64 Packages
Jeśli nie, to jest to pakiet niestandardowy. Oczywiście, jeśli dpkg nie wie o pliku obrazu, to twoje jądro w ogóle nie jest częścią pakietu, ale zostało skompilowane lokalnie.
Zauważ, że apt
potrafi odróżnić pakiet w archiwum Debiana od kompilacji lokalnej o tej samej nazwie. Myślę, że sprawdza sumę md5 pakietu, ale nie pamiętam szczegółów, jak to robi. Pakiety binarne zawierają informacje o skrótach, patrz apt-cache show linux-image-3.2.0-4-amd64
na przykład na dole . na przykład
Package: linux-image-3.2.0-4-amd64
Source: linux
Version: 3.2.68-1+deb7u1
Installed-Size: 105729
[...]
Size: 23483788
MD5sum: f9736f30f8b68ae79b2747d8a710ce28
SHA1: 64bfde903892801dccd04b52b12316901a02cd96
SHA256: 775814b3eff4a964b593c0bdeaac20587a4e3ddb1257a9d2bfcf1e9d3b9bfd15
apt-cache show ...
działa. Widzę, że się pomyliłem. Poprawianie teraz.
Minimalnie uname -r
da wersję jądra, taką jak 3.18.6
. Jednak po skompilowaniu jądra można skonfigurować i dołączyć do niego dodatkowy ciąg, a dystrybucje zwykle robią to, aby wskazać własny poziom łatki (po myślniku) i smak, np 3.18.6-32-generic
. To jedna wskazówka; oczywiście użycie własnego łańcucha podczas tworzenia niestandardowego jądra może być innym.
uname -v
daje ciąg znaków, który domyślnie jest taki
#4 SMP PREEMPT Mon Mar 9 13:55:25 EDT 2015
Liczba jest dowolna, tzn. Tyle razy jądro zostało zbudowane przy użyciu określonego drzewa źródłowego bez resetowania drzewa - może to być przydatne, gdy budujesz własne. SMP
wskazuje jądro wielozadaniowe (tj. nie w czasie rzeczywistym), a PREEMPT jest kolejną opcją konfiguracyjną związaną z „modelem prewencyjnym” programu planującego. Ale najważniejszą wskazówką jest prawdopodobnie czas jej budowy. Można to wykorzystać do dopasowania znacznika czasu modyfikacji / zmiany w samym jądrze, pamiętając, że można to zmienić np touch
. Za pomocą . Na przykład stat
w tym jądrze wygląda następująco:
File: ‘3.19-goldilocksSpecial’
Size: 6858880 Blocks: 13400 IO Block: 4096 regular file
Device: 801h/2049d Inode: 3156605 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-02-15 15:32:29.000000000 -0500
Modify: 2015-03-03 13:55:21.000000000 -0500
Change: 2015-03-03 14:02:26.767045553 -0500
Birth: -
Co jest w zasadzie zgodne z Mon Mar 9 13:55:25 EDT 2015
.
Taki sam jak każdy inny
sudo apt-cache policy linux-generic
to wersja zainstalowana przez menedżera pakietów i
uname -r
porównaj wersje
dla mnie to
linux-generic:
Installed: 3.19.0.15.14
Candidate: 3.19.0.15.14
i
3.19.0-15-generic
które wskazują tę samą wersję
/boot
. Chodzi mi o to, że nie rozumiem, dlaczego miałbyś oczekiwać, że wynik uname
zmieni się, jeśli po prostu ponownie skompilujesz podczas zmiany niektórych opcji. W takim przypadku oczekiwałbym tego apt-cache
i uname -r
zwróci te same informacje, mimo że dokonałeś ponownej kompilacji lokalnie.
Powiedziałbym, że najogólniej prawdziwa odpowiedź brzmi „nie, nie możesz”. Istnieją różne metody, które mogą pomóc w niektórych przypadkach, które zostały już zasugerowane, ale wydaje się, że wszystkie tęsknią za faktyczną sytuacją. W rzeczywistości, jeśli używasz niestandardowego jądra, to jądro może zrobić wszystko, w tym ukryć swoją obecność lub wyglądać na inne jądro.
Byłbym zmartwiony, jeśli rzeczywiście używasz niestandardowego jądra i nie wiedziałeś o tym. Jedynym niezawodnym sposobem poznania używanego jądra jest dokładne śledzenie, które jądro skompilujesz i zainstalujesz.
Jeśli naprawdę nie jesteś pewien, z którego jądra działa system lub z jakich źródeł to jądro zostało zbudowane lub skąd ono pochodzi, poważnie zastanowiłbym się nad ponownym zainstalowaniem systemu operacyjnego ze znanego dobrego obrazu i bardziej ostrożnym w przyszłości o tym, które jądra próbujesz uruchomić z lub używać.