CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[linux] changer d'utilisateur

dnob700
dnob700
Niveau 10
07 octobre 2009 à 15:31:20

Bonjour,

Je demande quelle est la bonne manière (mais une manière est déjà bien) pour un programme de changer d'identifiant utilisateur. Plus précisément, j'essaye d'écrire un script CGI qui demande un login/mdp (sur une connexion sécurisée) puis exécute une commande comme s'il était l'utilisateur en question.

Le script pourrait être suid root et lire /etc/shadow et comparer avec le mdp qu'il a reçu et appeler setuid. Mais c'est assez inélégant, ça repose sur la manière dont sont stocké les mots de passe, et ça fait tourné en root un programme qui ne devrait pas en avoir besoin.

Le problème c'est que des commandes comme su ou login ne peuvent pas être exécuté depuis un script (ou en tout cas je ne sais pas le faire) ou ne peuvent pas lire un mdp depuis ailleur qu'une console (ni la ligne de commande (ce qui serait mauvais dans tout les cas), ni l'entrée standard, ou en tout cas, encore une fois, je ne sais pas le faire).

Donc est-ce que quelqu'un connait une méthode qui me permettrait d'avoir ce script qui tourne en tant que www (l'utilisateur d'apache) et demande au système d'augmenter ses privilèges en présentant un couple login/mdp (éventuellement en lançant un nouveau programme) ?

_skip
_skip
Niveau 10
07 octobre 2009 à 16:31:09

Ouvrir une connexion cliente SSH depuis ton script avec les identifiants nécessaires? Juste une idée comme ça sinon je sais pas.

chris_27
chris_27
Niveau 10
07 octobre 2009 à 18:44:32

La bonne manière ? Demander sur le forum linux. :hap:

Là tu en demandes beaucoup j'ai l'impression. C'est facile de perdre des droits à coup de :
$ su - <un compte avec moins de droit>
Mais dans l'autre sens... :( Vu que ça coince avec su et login, je pense qu'il faut passer par la libpam dans un code C.

godrik
godrik
Niveau 30
07 octobre 2009 à 20:23:20

J'avais cherche a faire ca une fois pour un serveur ftp. Quand il tournait en root on lisait /etc/shadows et on appelait crypt pour verifier que c'etait le bon utilisateur. Et ensuite on verifiait les permissions manuellement. Mais c'est assez moche. En particulier, on loupait les ACLs.

On avait pense a faire un fork a chaque connexion pour qu'un processus ftpd appartienne a l'utilisateur, mais on a jamis trouve la bonne maniere de faire. (on a pas cherche des jours non plus)

chris_27
chris_27
Niveau 10
07 octobre 2009 à 20:25:41

En particulier, tu avais un serveur web qui tournait en root… :malade:

Donner le droit à l'utilisateur ftp de lire /etc/shadow est déjà plus malin.

godrik
godrik
Niveau 30
07 octobre 2009 à 21:42:56

heu, nan je ne pouvais pas faire tourner mon serveur ftp avec les droits de l'utilisateur ftp.
J'ai besoin de pouvoir acceder aux home des utilisateur meme s'ils sont en 700

dnob700
dnob700
Niveau 10
07 octobre 2009 à 23:42:18

"La bonne manière ? Demander sur le forum linux."

Je peut essayer, mais il s'agit vraiment de programmation système, pas vraiment d'utilisation du système.

Pour SSH ça ne me va pas, car il faut quand même que je puisse communiquer facilement avec le programme qui tourne (bon c'est peut-être possible via l'entrée sortie standard), mais reste le problème qu'il n'y a pas d'option pour passer un mdp en argument à SSH et il ne veux pas le lire sur stdin si ce n'est pas une console (en fait, c'est pire, il ne veut rien lire sur stdin si ce n'est pas une console).

chris_27
chris_27
Niveau 10
08 octobre 2009 à 00:04:52

« Je peut essayer, mais il s'agit vraiment de programmation système, pas vraiment d'utilisation du système. » :d) c'est très lié à unix (le "forum linux" il faut le lire "forum autres systèmes d'exploitation"). J'avoue que ton histoire me dépasse un peu. Ma spécialité, c'est plus l'intérieur d'une distro linux que la configuration de serveur. Mais d'autres membres du forum sauront peut-être t'éclairer.

NoSoul_
NoSoul_
Niveau 7
08 octobre 2009 à 11:31:08
  1. Chris_27
  2. Posté le 7 octobre 2009 à 20:25:41
  3. (...)
  1. Donner le droit à l'utilisateur ftp de lire /etc/shadow
  2. est déjà plus malin.

Je trouve ça beaucoup trop risqué pour la sécurité. C'est un truc à se faire piquer les mots de passe.

dnob700 :d)

Sinon j'ai une autre solution possible pour ton problème et que j'utilise fréquemment. Cependant suivant ce que tu veux faire ce n'est peut-être pas utilisable ou dangereux.

Il est possible de faire un script bash qui fait les manipulations dont tu as besoin. Ensuite tu autorises ce script pour l'utilisateur sans avoir à utiliser de mot de passe. C'est une technique propre pour surpasser des droits d'utilisateur.

Voilà un tutoriel que j'avais fait pour le faire qui peut te servir d'exemple:

- Exemple de script que l'on souhaite autoriser

  1. !/bin/sh

#

  1. Affiche les 20 dernières lignes de messages (log du système).

#

  1. Auteur: NoSoul

#

tail -n 20 /var/log/messages

- Préparation de l'environnement:

Ce script, nommé messages, est situé dans le dossier /home/nosoul/Documents/root/scripts

Le dossier /home/nosoul/Documents/root et tout ce qu'il contient appartient à l'utilisateur root et au groupe root.

A ce stade il reste juste un problème, un utilisateur normal ne peut exécuter la commande car il n'en a pas les droits.

- Permettre à un utilisateur d'exécuter le script:

Il faut tout d'abord se loguer en tant que root, ensuite il faut éditer le fichier /etc/sudoers en utilisant la commande suivante:
visudo

Attention, il est très important d'utiliser cette commande pour éditer ce fichier et aucune autre méthode. Ajoutez maintenant la ligne suivante à la fin du fichier:
%users ALL=(root) NOPASSWD: /home/nosoul/Documents/root/scripts/messages

A présent tous les utilisateurs appartenant au groupe users peuvent utiliser la commande "messages" sans avoir à se loguer en tant que root.

- Utiliser le script:

Il est nécessaire de mettre "sudo" avant le nom de la commande, par contre le mot de passe de l'utilisateur root ne sera plus demandé.

Exemple:
sudo messages

godrik
godrik
Niveau 30
08 octobre 2009 à 17:03:29

pour la posterite: apres la remarche de chris_27, un topic similaire a ete ouvert sur le forum linux :

https://www.jeuxvideo.com/forums/1-38-7688318-1-0-1-0-gagner-des-privileges-utilisateurs.htm

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware