Apakah mungkin untuk mengetahui apakah kernel Linux saya adalah custom (dikompilasi) sebagai lawan dari distro?

10

Mengambil contoh Ubuntu, dapatkah kita tahu apakah kernel dikompilasi secara khusus dan bukan apa yang datang dengan distro?

bytefire
sumber
Periksa utas ini: unix.stackexchange.com/questions/43164/…
nomadrc
2
Nah, bandingkan saja biner dengan file paket ... dan lihat, apakah itu kernel asli atau apakah sudah diubah ..
kravemir

Jawaban:

13

Tentu, periksa apakah dpkgtahu tentang hal itu.

Pertama periksa versi kernel yang Anda jalankan.

uname -a
Linux orwell 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux

Kemudian beri tahu dpkguntuk mencari file gambar kernel dalam dpkgdatabase.

dpkg -S /boot/vmlinuz-3.2.0-4-amd64
linux-image-3.2.0-4-amd64: /boot/vmlinuz-3.2.0-4-amd64

Atau, lebih baik, gunakan dlocatedari dlocatepaket. dlocatepertama membangun cache dari dpkgdatabase, dan menggunakannya. Jadi cepat.

dlocate /boot/vmlinuz-3.2.0-4-amd64
linux-image-3.2.0-4-amd64: /boot/vmlinuz-3.2.0-4-amd64

Terakhir, periksa apakah arsip Debian mengandung paket ini.

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

Jika tidak, maka itu adalah paket khusus. Tentu saja, jika dpkg tidak tahu tentang file gambar, maka kernel Anda sama sekali bukan bagian dari paket, tetapi sudah dikompilasi secara lokal.

Catatan yang apt dapat memberi tahu perbedaan antara paket dalam arsip Debian dan yang dikompilasi secara lokal dengan nama yang sama. Saya pikir ia memeriksa paket md5sum, tapi saya lupa detail bagaimana melakukan itu. Paket biner berisi informasi tentang hash, lihat bagian bawah apt-cache show linux-image-3.2.0-4-amd64, misalnya. misalnya

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
Faheem Mitha
sumber
1
Silakan lihat komentar saya pada jawaban exussum. Bagaimana jika Anda baru saja mengkompilasi ulang kernel yang sama, dengan opsi yang berbeda, tetapi jangan beri nama lain?
terdon
@terdon lihat hasil edit.
Faheem Mitha
2
Ah, ya, hash harus melakukannya, pintar!
terdon
Meskipun pendekatan ini bekerja dalam banyak kasus, itu tidak bekerja di tambang karena saya memiliki repositori pribadi untuk paket yang dikompilasi secara lokal, sehingga muncul sebagai paket vendor bahkan ketika saya menggunakan paket yang dikompilasi secara lokal. tentu saja Anda dapat melihat perbedaannya dengan mudah karena paket vendor memiliki nama vendor sebagai bagian dari versi, di mana paket saya memiliki nama saya.
Hildred
1
@bytefire apt-cache show ...bekerja. Saya melihat saya salah mengetik. Memperbaiki sekarang.
Faheem Mitha
7

Minimal, uname -rakan memberikan versi kernal, seperti 3.18.6. Namun, ketika kernel dikompilasi, string tambahan dapat dikonfigurasikan dan dilampirkan padanya dan distro biasanya melakukan ini untuk menunjukkan tingkat patch mereka sendiri (setelah tanda hubung) dan rasa, seperti 3.18.6-32-generic. Itu satu petunjuk; jelas menggunakan string Anda sendiri ketika Anda membuat kernel kustom bisa menjadi yang lain.

uname -v memberikan string yang secara default adalah sesuatu seperti ini

#4 SMP PREEMPT Mon Mar 9 13:55:25 EDT 2015

Jumlahnya sewenang-wenang dalam arti bahwa ini adalah berapa kali kernel ini dibangun menggunakan pohon sumber tertentu tanpa pohon diatur ulang - ini mungkin berguna ketika Anda membangun sendiri. SMPmenunjukkan kernel multi-tasking (yaitu, bukan waktu nyata) dan PREEMPT adalah opsi konfigurasi lain yang terkait dengan "model preemption" penjadwal. Tapi petunjuk besar di sini mungkin adalah waktu itu dibangun. Ini dapat digunakan untuk mencocokkan modifikasi / ubah stempel waktu pada kernel itu sendiri, dengan mengingat bahwa dapat diubah, misalnya dengan touch. Sebagai contoh, statpada kernel itu terlihat seperti ini:

  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: -

Cukup banyak yang sejalan Mon Mar 9 13:55:25 EDT 2015.

goldilocks
sumber
2

Sama seperti yang lainnya

sudo apt-cache policy linux-generic

adalah versi yang diinstal meskipun manajer paket dan

uname -r

bandingkan versinya

bagi saya itu

linux-generic:
  Installed: 3.19.0.15.14
  Candidate: 3.19.0.15.14

dan

3.19.0-15-generic

yang menunjukkan versi yang sama

exussum
sumber
1
Apakah itu akan berubah jika Anda mengkompilasi ulang versi yang sama dengan opsi yang berbeda? Saya tidak melihat mengapa string versi akan berubah dalam kasus itu.
terdon
Saya tidak yakin 2 dengan nama yang sama akan menginstal. Saya belum mencobanya. Secara pribadi ketika mengkompilasi ulang dengan opsi yang berbeda saya menghapus versi dari manajer paket untuk menghilangkan konflik
exussum
Saya akan menebak bahwa nama yang sama hanya akan ditimpa /boot. Maksud saya adalah bahwa saya tidak melihat mengapa Anda mengharapkan output unameuntuk berubah jika Anda hanya mengkompilasi ulang saat mengubah beberapa opsi. Dalam hal ini, saya berharap itu apt-cachedan uname -rakan mengembalikan informasi yang sama, terlepas dari kenyataan bahwa Anda telah dikompilasi ulang secara lokal.
terdon
@terdon String versi dapat dikustomisasi dalam konfigurasi kernel, yang merupakan ide bagus jika Anda menggunakan sumber distro.
goldilocks
@goldilocks ya, saya melihat itu dalam jawaban Anda dan itu masuk akal. Namun, jika saya cukup bodoh untuk tidak melakukannya, dan baru saja mengkompilasi ulang kernel stock distro saya mengubah beberapa opsi, string versi akan identik, kan? Saran Anda tentang jumlah bangunan mungkin membantu tetapi, sejauh yang saya tahu, bukan yang disarankan di sini.
terdon
0

Saya akan mengatakan jawaban yang paling benar umumnya adalah "tidak, Anda tidak bisa". Ada berbagai metode yang dapat membantu dalam kasus-kasus tertentu dan ini sudah disarankan tetapi semua ini sepertinya merindukan bagaimana sebenarnya situasi ini terjadi. Sebenarnya, jika Anda menggunakan kernel khusus, kernel itu dapat melakukan apa saja, termasuk menyembunyikan keberadaannya atau tampaknya kernel lain.

Saya akan khawatir jika Anda memang menjalankan kernel khusus dan tidak tahu ini. Satu-satunya cara yang dapat diandalkan untuk mengetahui kernel apa yang digunakan adalah dengan hati-hati melacak kernel mana yang Anda kompilasi dan instal.

Jika Anda benar-benar tidak yakin kernel apa yang dijalankan sistem atau dari mana kernel ini dibangun atau dari mana asalnya, saya akan dengan serius mempertimbangkan untuk menginstal ulang OS dari gambar yang dikenal baik dan lebih berhati-hati di masa depan tentang kernel apa yang Anda coba booting. dari atau digunakan.

Vality
sumber