Est-il possible de dire si mon noyau Linux est personnalisé (c'est-à-dire compilé) par opposition à la distribution?

10

Prenant l'exemple d'Ubuntu, pouvons-nous dire si le noyau a été compilé sur mesure plutôt que ce qui vient avec la distribution?

bytefire
la source
Vérifiez ce fil: unix.stackexchange.com/questions/43164/…
nomadrc
2
Eh bien, comparez simplement les fichiers binaires avec le fichier de package ... et voyez si c'est le noyau d'origine ou s'il a été modifié ..
kravemir

Réponses:

13

Bien sûr, vérifiez simplement si vous en avez dpkgconnaissance.

Vérifiez d'abord la version du noyau que vous utilisez.

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

Dites ensuite dpkgde rechercher le fichier image du noyau dans la dpkgbase de données.

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

Ou, mieux, utilisez dlocatele dlocatepackage. dlocatecrée d'abord un cache à partir de la dpkgbase de données et l'utilise. C'est donc rapide.

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

Enfin, vérifiez que les archives Debian contiennent ce paquet.

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

S'ils ne le font pas, alors c'est un package personnalisé. Bien sûr, si dpkg ne connaît pas le fichier image, votre noyau ne fait pas du tout partie d'un paquet, mais a été compilé localement.

Notez que cela apt peut faire la différence entre un paquet dans l'archive Debian et un paquet du même nom compilé localement. Je pense qu'il vérifie la somme md5 du paquet, mais j'oublie les détails de la façon dont il le fait. Les packages binaires contiennent des informations sur les hachages, voir le bas de apt-cache show linux-image-3.2.0-4-amd64, par exemple. par exemple

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
la source
1
Veuillez voir mes commentaires sur la réponse d'Exussum. Que se passe-t-il si vous recompilez simplement le même noyau, avec différentes options, mais ne lui donnez pas un autre nom?
terdon
@terdon voir les modifications.
Faheem Mitha
2
Ah, oui, les hachages devraient le faire, intelligent!
terdon
Bien que cette approche fonctionne dans la plupart des cas, elle ne fonctionne pas dans la mienne car j'ai un référentiel privé pour les packages compilés localement, elle apparaît donc comme un package fournisseur même lorsque j'utilise un package compilé localement. bien sûr, vous pouvez facilement voir la différence car les packages des fournisseurs ont le nom du fournisseur dans la version, où mes packages ont mon nom.
hildred
1
@bytefire apt-cache show ...fonctionne. Je vois que j'ai mal tapé. Correction maintenant.
Faheem Mitha
7

Au minimum, uname -rdonnera la version kernal, comme 3.18.6. Cependant, lorsque le noyau est compilé, une chaîne supplémentaire peut être configurée et attachée à cela et les distributions le font généralement pour indiquer leur propre niveau de correctif (après un tiret) et leur saveur, comme 3.18.6-32-generic. Voilà un indice; évidemment, utiliser votre propre chaîne lorsque vous créez un noyau personnalisé peut en être un autre.

uname -v donne une chaîne qui par défaut est quelque chose comme ça

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

Le nombre est arbitraire dans le sens où c'est le nombre de fois que ce noyau a été construit en utilisant une arborescence source spécifique sans que l'arborescence soit réinitialisée - cela peut être utile lorsque vous construisez la vôtre. SMPindique un noyau multitâche (c'est-à-dire pas en temps réel) et PREEMPT est une autre option de configuration liée au "modèle de préemption" du programmateur. Mais le gros indice ici est probablement l'époque de sa construction. Cela pourrait être utilisé pour correspondre à l'horodatage de modification / changement sur le noyau lui-même, en gardant à l'esprit ce qui peut être changé, par exemple, avec touch. Par exemple, statsur ce noyau ressemble à ceci:

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

Ce qui correspond à peu près Mon Mar 9 13:55:25 EDT 2015.

boucle d'or
la source
2

Identique à tout autre

sudo apt-cache policy linux-generic

est la version installée via le gestionnaire de packages et

uname -r

comparer les versions

pour moi, c'est

linux-generic:
  Installed: 3.19.0.15.14
  Candidate: 3.19.0.15.14

et

3.19.0-15-generic

qui indiquent la même version

exussum
la source
1
Cela changera-t-il si vous recompilez la même version avec différentes options? Je ne vois pas pourquoi la chaîne de version changerait dans ce cas.
terdon
Je ne suis pas sûr que 2 du même nom seront installés. Je ne l'ai pas essayé. Personnellement, lors de la recompilation avec différentes options, je supprime la version du gestionnaire de paquets pour éliminer les conflits
exussum
Je suppose que le même nom serait simplement remplacé /boot. Mon point est que je ne vois pas pourquoi vous vous attendriez à ce que la sortie de unamechange si vous recompilez tout en changeant certaines options. Dans ce cas, je m'attendrais à ce que apt-cacheet uname -rrenvoie les mêmes informations, malgré le fait que vous avez recompilé localement.
terdon
@terdon La chaîne de version peut être personnalisée dans la configuration du noyau, ce qui est une bonne idée si vous utilisez la source de distribution.
goldilocks
@goldilocks oui, je l'ai vu dans votre réponse et cela a du sens. Cependant, si j'étais assez stupide pour ne pas l'avoir fait, et que je viens de recompiler le noyau de stock de ma distribution en changeant quelques options, les chaînes de version seront identiques, non? Votre suggestion du nombre de builds pourrait aider mais, à ma connaissance, pas ce qui est suggéré ici.
terdon
0

Je dirais que la réponse la plus généralement vraie est "non, vous ne pouvez pas". Il existe différentes méthodes qui peuvent aider dans certains cas et celles-ci ont déjà été suggérées, mais elles semblent toutes ne pas comprendre comment cette situation s'est réellement produite. En vérité, si vous utilisez un noyau personnalisé, ce noyau peut tout faire, y compris masquer sa présence ou apparaître comme un noyau différent.

Je serais inquiet si vous exécutez effectivement un noyau personnalisé et ne le saviez pas. La seule manière fiable de savoir quel noyau est utilisé est de garder une trace précise du noyau que vous compilez et installez.

Si vous n'êtes vraiment pas sûr du noyau sur lequel le système fonctionne ou des sources à partir desquelles ce noyau a été construit ou d'où il provient, j'envisagerais sérieusement de réinstaller le système d'exploitation à partir d'une bonne image connue et d'être plus prudent à l'avenir sur les noyaux que vous essayez de démarrer de ou utiliser.

Vality
la source