8
votes

Comment créer un utilisateur Linux à l'aide de C / C ++?

Je voudrais construire un programme qui prend un nom d'utilisateur comme paramètre et crée l'utilisateur et son dossier à domicile (avec des spécifications codées rigides telles que le dossier et les contrôles de sécurité tels que le nom d'utilisateur ne peuvent pas être root ou un utilisateur existant).

Mon application doit créer des utilisateurs afin de donner accès à SSH.

Le programme sera exécuté en utilisant sudo . J'ai lu qu'il devrait être écrit en C ou C ++ au lieu de scripts car les scripts pouvaient être facilement exploités.

  • Pouvez-vous me donner certains conseils ou bonnes pratiques sur la façon de y parvenir?
  • Devrais-je utiliser une bibliothèque PAM ? Y a-t-il des exemples?
  • Quels sont les défauts de sécurité

    Je connais C / C ++ et exécuté Ubuntu lucide.

    EDIT:

    L'utilisateur n'aura qu'un accès SUDO à exécuter cette commande spécifique, je ne souhaite pas qu'il soit capable d'exécuter une coquille ou de contourner certains programmes (en changeant l'environnement de chemin, par exemple).

    En conséquence, par exemple, je devrai remplacer le chemin , que devrais-je m'inquiéter?


3 commentaires

Vous voulez dire comme adduser ou userAdd ? Essayez de regarder leur code source.


Pourquoi un script est-il plus facile à exploiter qu'un exécutable? Si vous avez un accès root, vous avez un accès root et leur n'est rien que vous ne pouvez rien faire. Faites-le la solution simple et utilisez un script qui utilise les commandes Linux normales (et a donc été complètement testée).


L'utilisateur n'aura qu'un accès SUDO à exécuter cette commande spécifique, je ne souhaite pas qu'il soit capable d'exécuter une coquille ou de contourner certains programmes (en modifiant l'environnement de chemin, par exemple).


3 Réponses :


10
votes

Votre meilleur pari est probablement d'invoquer userAddd; Il fera les bonnes choses (données données).

essayer de créer une manuellement en appelant les API appropriées est possible mais pas souhaitable.


2 commentaires

Cela me semble beaucoup plus souhaitable pour moi. Mettre en place un script Perl puis appeler userAdd est comment i penserait à résoudre ce problème.


Il n'y a pas de "API appropriées" dans la bibliothèque Linux C.



5
votes

Il n'y a pas d'API pour cela. Vous venez d'écrire dans / etc / passwd et / etc / groupe (et éventuellement les versions de l'ombre également) à l'aide d'appels de système d'accès au fichier normal.


2 commentaires

N'oubliez pas qu'avant de modifier ces valeurs, vous devez toujours acquérir une serrure exclusive sur les fichiers (toutes les commandes système qui modifient ces fichiers font cela). Sinon, il y a la possibilité de corruption de fichier et vous êtes en très mauvais état.


Je pense que c'est le "seul moyen" si votre / etc / passwd est vide et que vous ne pouvez donc pas ajouter des utilisateurs à des groupes à l'aide d'Adduserer



0
votes

En réalité, il existe une méthode C API C pour créer un utilisateur Linux. C'est dans le fichier pwd.h include le fichier.

Vous avez un exemple de test: xxx


0 commentaires