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

C Discussion :

Appeler une fonction à partir d'un processus particulier


Sujet :

C

  1. #1
    Membre du Club
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2018
    Messages : 8
    Par défaut Appeler une fonction à partir d'un processus particulier
    Salut
    Je cherche une solution/un script permettant d'appeler une fonction à partir d'un processus avec un ID utilisateur non autorisé à accéder au sysfs correspondant.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Assez obscur comme demande. Déjà "appeler une fonction à partir d'un processus" c'est totalement abscons. Un processus représente un programme en cours d'exécution. Pour qu'un processus appelle "quelque chose" il faut que ce soit le programme qui appelle ce quelque chose. Et un programme ne peut pas appeler de fonction mais seulement un autre programme.

    Ensuite "avec un id d'utilisateur" c'est pareil. Un processus possède un uid natif qui correspond, dans 99,9% des cas, au uid de l'utilisateur qui a appelé le programme (programme instanciant le processus). Exemple quand j'appelle ls alors un processus correspondant au programme "ls" est instancié, et le uid de ce processus correspond à mon uid. Ainsi, c'est ce processus qui sera contrôlé lors de ses accès au système (le uid de ce processus a-t-il le droit de lire le dossier ? a-t-il le droit de lire "/etc/passwd" pour pouvoir faire la correspondance entre "uid fichiers présents" et "utilisateur correspondant" afin d'afficher les fichiers avec le bon propriétaire, etc etc etc).
    Un processus peut toutefois changer son uid via la fonction setuid() mais à condition qu'il soit autorisé à effectuer ce changement. Or seul root en a le droit. Donc pour qu'un processus puisse changer son "uid", il faut alors qu'il ait au préalable le uid de root. Donc il faut que le programme qui instanciera le processus soit lancé par root ou bien qu'il appartienne à root et qu'il ait le droit "s" positionné au niveau de "user" (exemple rwsr-xr-x root groupe_quelconque programme). Petite remarque amusante: ce droit "s" se nomme "setuid" tout comme la fonction (probablement parce que la fonction en question est appelée par le noyau quand il voit ce "s" positionné au niveau du fichier exécutable).

    Et enfin "non autorisé à accéder" ben là c'est mort. Si l'utilisateur n'est pas autorisé à accéder à un dossier, alors tout processus qu'il invoquera (hors changement uid) ne sera pas non plus autorisé à y accéder (trop facile sinon de pouvoir hacker le système s'il suffisait de lancer un processus X pour accéder là où on n'a pas le droit).
    En fait, c'est même plus simple car ce n'est jamais l'utilisateur lui-même qui accède à quelque chose mais toujours les processus qu'il invoque. Exemple: si je tape cp /etc/shadow . alors le programme "/bin/cp" va être mis en exécution dans un processus qui aura mon uid et c'est ce processus (et non moi) qui tentera de copier le fichier. C'est vrai qu'au résultat c'est la même chose (si ce processus avec mon uid n'arrive pas à accéder au fichier alors c'est comme si moi je n'y arrivais pas puisque ce processus agit en mon nom) mais c'est vraiment pour que tu comprennes que c'est le programme que tu exécutes qui est vérifié dans ses accès et non toi.

    Donc bref, essaye de revoir ton besoin et surtout ta façon de l'exprimer...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je pense que cette partie apporte plus de confusion qu'autre chose:
    En fait, c'est même plus simple car ce n'est jamais l'utilisateur lui-même qui accède à quelque chose mais toujours les processus qu'il invoque. Exemple: si je tape cp /etc/shadow. alors le programme "/bin/cp" va être mis en exécution dans un processus qui aura mon uid et c'est ce processus (et non moi) qui tentera de copier le fichier. C'est vrai qu'au résultat c'est la même chose (si ce processus avec mon uid n'arrive pas à accéder au fichier alors c'est comme si moi je n'y arrivais pas puisque ce processus agit en mon nom) mais c'est vraiment pour que tu comprennes que c'est le programme que tu exécutes qui est vérifié dans ses accès et non toi.
    Vu de l'OS, un processus avec ton uid est toi.
    Et donc, si tu n'as pas le droit de faire quelque chose, la seule façon est de demander à quelqu'un d'autre de le faire pour toi.

    Sous les OS unixoïdes, la méthode traditionnelle pour "demander à quelqu'un d'autre", c'est l'exécutable marqué avec le bit setuid. Par exemple, si un utilisateur veut changer son mot de passe, il appelle l'exécutable approprié, mais celui-ci s'exécute en fait en tant que root, car lui seul a les droits d'écriture sur les fichiers /etc/passwd et /etc/shadow (d'où l'importance de blinder ses entrées, car une faille de sécurité dans ce programme permettrait de faire faire à root ce que tu veux).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre du Club
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2018
    Messages : 8
    Par défaut
    Sve@r et Médinoc : merci beaucoup pour votre aide.
    Ces clarifications m'ont beaucoup aidé

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

Discussions similaires

  1. Appeler une fonction à partir d'un processus particulier
    Par Katia_katia dans le forum Général Python
    Réponses: 2
    Dernier message: 20/08/2018, 14h07
  2. Réponses: 2
    Dernier message: 07/05/2010, 17h10
  3. Appeler une fonction à partir d'une autre fonction
    Par touta1 dans le forum Langage
    Réponses: 2
    Dernier message: 07/10/2009, 18h15
  4. Appeler une fonction à partir de son nom
    Par superpigeon dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/05/2008, 09h56
  5. Appel à une fonction à partir d'une chaine de caractères
    Par becks dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/09/2007, 12h14

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