IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

Changer version du Kernel dynamiquement (dans un chroot)


Sujet :

Administration système

  1. #1
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 16
    Par défaut Changer version du Kernel dynamiquement (dans un chroot)
    Bonsoir,

    Est-il possible, à votre avis, de faire croire aux applications qu'ils tournent sous une version du Kernel différente, sans pour autant booter sous cette version ?

    Pour être moins vague, j'aimerais faire cela dans mon environnement chrooté: modifier à la volée la version du kernel, afin de faire croire aux applications lancées dans cette cage que le Kernel est différent (pour être précis, mon système hôte est Ubuntu et le système dans le chroot est Debian. Quand je lance un programme sous Debian chrooté, j'aimerais qu'il croit qu'il est sous le kernel de Debian, le 2.6.18 et pas celui d'Ubuntu, le 2.6.22).

    J'ai un peu cherché et j'ai découvert dans un forum /proc/sys/kernel/osrelease, que des personnes ont pu modifier par le passé (mais qui est en lecture seule désormais en tout cas, chez moi). J'ai essayé de modifier les droits de ce fichier avec chmod, sans succès (opération non permise, même en tant que root).

    Donc, si quelqu'un a une idée, proposition, indice, je le remercie à l'avance

    PS: je ne suis pas intéressé par les vraies machines virtuelles, chroot est le moyen le plus intéressant pour ce que je veux faire

  2. #2
    Membre émérite
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Par défaut
    Tu peux peut-être faire quelque chose en surchargeant la fonction uname via la variable LD_PRELOAD.
    Cela dit, je ne vois pas bien l'intérêt, si c'est pour ces soucis de compatibilité, c'est plutôt le programme en question qu'il faudrait modifier.

  3. #3
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 16
    Par défaut
    Bonne idée. Je pourrais en effet faire un petit programme (lancé par LD_PRELOAD) destiné à modifier à la volée tout ce qui pourrait retourner la version du kernel (peut-être que cela existe déjà ? Qui sait... Je chercherai en tout cas).

    Merci pour ta réponse. Si tu as d'autres idées, elle seront les bienvenues.

  4. #4
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 16
    Par défaut
    Re,

    Je m'apprêtais à créer mon propre programme, jusqu'à ce que je tombe sur fake-uname[1] !

    J'ai décidé de le publier ici car il se peut qu'il soit utile pour quelqu'un un de ces jours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    /*
     * Pour compiler :
     *     gcc -shared -fPIC -ldl fake-uname.c -o fake-uname.so
     *
     * Tester :
     *     UTS_RELEASE=0.0.0 LD_PRELOAD=$PWD/fake-uname.so uname -a
     *
     */
     
    #include <stdio.h>
    #include <string.h>
    #include <dlfcn.h>
    #include <stdlib.h>		/* for EXIT_FAILURE */
    #include <unistd.h>		/* for _exit() */
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <sys/syslog.h>
    #include <sys/utsname.h>
    #include "linux/version.h"
     
    #ifndef RTLD_NEXT
    #define RTLD_NEXT      ((void *) -1l)
    #endif
     
    typedef int (*uname_t) (struct utsname * buf);
     
    static void *get_libc_func(const char *funcname)
    {
    	void *func;
    	char *error;
     
    	func = dlsym(RTLD_NEXT, funcname);
    	if ((error = dlerror()) != NULL) {
    		fprintf(stderr, "I can't locate libc function `%s' error: %s",
    				funcname, error);
    		_exit(EXIT_FAILURE);
    	}
    	return func;
    }
     
    int uname(struct utsname *buf)
    {
    	int ret;
    	char *env = getenv("UTS_RELEASE");
     
    	uname_t real_uname = (uname_t) get_libc_func("uname");
    	ret = real_uname((struct utsname *) buf);
     
    	if(env != NULL)
    		strncpy(buf->release, env, 65);
     
    	return ret;
    }
    J'ai fait mes premiers tests, ça marche. Je vais activer "résolu" dans le sujet.

    Merci encore.

    À+ !

    [1] j'ai légèrement modifié le programme car il ne se compilait pas bien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/03/2009, 09h10
  2. [FLASH 8] Changer label bouton dynamiquement dans une boucle
    Par Malau dans le forum ActionScript 1 & ActionScript 2
    Réponses: 5
    Dernier message: 03/05/2006, 16h55
  3. [D7] Tableaux dynamiques dans un record
    Par bobby-b dans le forum Langage
    Réponses: 2
    Dernier message: 30/06/2004, 23h23
  4. Réponses: 2
    Dernier message: 23/06/2004, 13h56
  5. comment changer d'attribut de fonte dans un Tlabel?
    Par sb dans le forum Composants VCL
    Réponses: 3
    Dernier message: 21/08/2002, 16h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo