Précédent   Forum des professionnels en informatique > Systèmes > Linux
Linux Forum d'entraide sur le système Linux. Avant de poster -> Tutoriels Linux, F.A.Q Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/09/2011, 11h56   #1
Débutant
 
Inscription : mai 2006
Messages : 529
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 529
Points : 61
Points : 61
Par défaut Exécuter une instruction de root dans un code JAVA

Salut à tous,

J'ai cette instruction en JAVA

Code :
1
2
3
cmd = new String[]{ "/bin/bash", "-c","sudo mkdir /root/Nouveaudossier"};

Process p = Runtime.getRuntime().exec(cmd);
le problème c'est que je dois entrer le mot de passe pour passer en mode root afin de pouvoir exécuter mon opération ...

Que suggérez-vous de faire?

Merci
L'aigle de Carthage est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 30/09/2011, 12h22   #2
Membre actif
 
Avatar de satenske
 
Homme Antoine
DUT informatique
Inscription : mars 2011
Messages : 90
Détails du profil
Informations personnelles :
Nom : Homme Antoine
Âge : 20
Localisation : France, Haute Garonne (Midi Pyrénées)

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

Informations forums :
Inscription : mars 2011
Messages : 90
Points : 182
Points : 182
Et tu ne peux pas lancer ton programme en tant que root? :/
satenske est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 30/09/2011, 12h54   #3
Débutant
 
Inscription : mai 2006
Messages : 529
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 529
Points : 61
Points : 61
Oui je peut (en utilisant le console...)

Mais je veut le faire en ligne de code, en java !
L'aigle de Carthage est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 30/09/2011, 14h48   #4
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 989
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 989
Points : 6 145
Points : 6 145
Bonjour.

Je vois deux solutions possibles :
  • Une simple mais horriblement dangereuse : passer ton user en NOPASSWD dans /etc/sudoers (à proscrire !!!)
  • Une moins simple et plus sûr : se renseigner sur expect
Cordialement,
Idriss
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 30/09/2011, 14h58   #5
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 538
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 538
Points : 7 754
Points : 7 754
Citation:
Envoyé par L'aigle de Carthage Voir le message
Salut à tous,

J'ai cette instruction en JAVA

Code :
1
2
3
cmd = new String[]{ "/bin/bash", "-c","sudo mkdir /root/Nouveaudossier"};

Process p = Runtime.getRuntime().exec(cmd);
le problème c'est que je dois entrer le mot de passe pour passer en mode root afin de pouvoir exécuter mon opération ...

Que suggérez-vous de faire?

Merci
vadé retro satanas !

jamais il ne faut lancer d'action root depuis un binaire jamais !

le prochain que je choppe à coder avec les pieds ce genre d'immondice, je me démerde pour inventer un amplificateur de douleur auto-alimenté, le rendre immortel, et le jeter dans un bocal géant d'acide, afin que sa souffrance soit non seulement éternelle mais aussi exponentielle !




maintenant si tu as un besoin absolu parce que tu n'as pas d'autres solution, il faut que l'action lancée soit un script bash ou autre installé en même temps que l'application, lancé par l'application.... et seul ce dernier utilisera des droits sudo !!! mais pas l'application !!!! jamais !!!!
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 30/09/2011, 17h02   #6
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 476
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 476
Points : 9 608
Points : 9 608
C'est effectivement une erreur que de donner les droits root a toute une application, car la faille de securite est enorme.

Pourquoi as-tu absolument besoin de creer ce dossier dans /root ? Est-ce que tu ne peux pas le creer ailleurs ?
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 30/09/2011, 22h20   #7
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 989
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 989
Points : 6 145
Points : 6 145
Bonsoir.

Effectivement, je n'avais pas fait attention à la commande en question ... pourquoi dans /root ? Quelles données vont être stockées dans ce répertoire par la suite ? Il y a surement une autre solution plus propre et plus sure (faudrait nous en dire plus pour qu'on puisse t'orienter) ...

Cordialement,
Idriss
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/10/2011, 15h03   #8
Membre Expert
 
Homme
budget et contrôle de gestion
Inscription : décembre 2006
Messages : 895
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 44
Localisation : France

Informations professionnelles :
Activité : budget et contrôle de gestion
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2006
Messages : 895
Points : 1 543
Points : 1 543
Salut,

Il y a une solution. Passer par incron.
Cet utilitaire surveille un répertoire et lance un script en réponse à la création, suppression,... d'un fichier.
Si avec ton appli tu crée un fichier <mon_répertoire_a_créer> contenant une seule lignetu peut très simplement faire exécuter l'action par root à la création du fichier <mon_répertoire_a_créer>.

Voici un exemple d'un script que j'ai fait pour sortir la somme md5 d'un fichier
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
##############################
#
# script générant les hash md5
# recoit en paramêtre => $1 : le répertoire / $2 :le nom du fichier
#
###############################
#
# deplacement repertoire de création des md5
cd $1
# creation somme md5 seulement si ce n'est pas un fichier .md5'
if [[ ${2#*.} != "md5" ]]
	then
		md5sum $2 > ${2%.*}".md5"
fi
voici la ligne que j'ai placé dans incrontab
Code :
/home/<user>/md5 IN_CLOSE_WRITE,IN_MOVED_TO /home/<user>/scripts/incron_md5.sh $@ $#
$@ => nom du répertoire surveillé
$# => nom du fichier déplacé (IN_MOVED_TO) ou créé (IN_CLOSE_WRITE)
/home/<user>/md5 => répertoire à surveiller
/home/<user>/scripts/incron_md5.sh => script à appeler pour exécuter une action

Avantage de cette méthode c'est que tu peux utiliser le même répertoire pour des actions différentes.
Par exemple :
fichier.crea => création d'un répertoire
fichier.supp => suppression d'un répertoire
....

Il suffit d'intégrer quelques tests dans le script de surveillance et tu fait ce que tu veux.

Apparemment, il semble que tu ne puisse avoir qu'un seul script par répertoire surveillé.
__________________
Winnt

C'est en Linuxant qu'on devient .... geek

Intel Core i5 750 / 8 Go ram / Hdd 2 To / NVIDIA GeForce GTS 250 1Go sous Gentoo.
Dual core E6300 / 2Go ram / Hdd 1 To / Ati 9800XT sous Debian Testing.
Atom N330 / 4Go ram / Hdd 5To / intel GMA 950 sous Debian Testing

Ici un article de présentation de la distribution Gentoo http://winnt.developpez.com/tutoriel...tation-gentoo/
Winnt est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 06/10/2011, 10h48   #9
Débutant
 
Inscription : mai 2006
Messages : 529
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 529
Points : 61
Points : 61
Merci pour vos suggestions ...

En effet, je ne veux pas créer un dossier sous root (c'était juste un exemple pour vous expliquer mon problème) ...

Je veut exécuter une instruction qui demande les privilèges d'un administrateur....

1- Si je vais opter pour la solution du script, est ce que vous pouvez m'expliquer de plus par un exemple?

2-
Code :
cmd = new String[]{ "/bin/bash", "-c",
ce bout de code permet de "simuler" en quelques sorte le console, n'est ce pas? alors est ce qu'il y a un moyen permettant de simuler cette console mais directement en mode admin ... (je ne sais pas, y a t il une option à ajouter, un argument à modifier ... je dis n'importe quoi)?

Merci pour vous tous !
L'aigle de Carthage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/10/2011, 15h18   #10
Débutant
 
Inscription : mai 2006
Messages : 529
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 529
Points : 61
Points : 61
J'ai testé avec ce script (que je l'ai nommé runinstance):

Code :
1
2
3
4
5
6
7
8
9
#!/usr/bin/expect -f
 
set force_conservative 1;
 
set timeout 3
spawn sudo -s
expect "password:\r"
send -- "XXXXXXX\r"
interact
J'ai exécuté ce script à travers la commande :

Citation:
. runinstance
mais j'ai eu comme réponse, dans la console:

Citation:
No command 'spawn' found, did you mean:
Command 'spawg' from package 'spawg' (universe)
spawn: command not found
couldn't read file "password:\r": no such file or directory
Le programme «*send*» se trouve dans les paquets suivants*:
* mailutils-mh
* nmh
Essayez*: sudo apt-get install <paquet sélectionné>
interact: command not found
Que dois-je faire?
L'aigle de Carthage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/10/2011, 10h00   #11
Débutant
 
Inscription : mai 2006
Messages : 529
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 529
Points : 61
Points : 61
Je me demande si cette solution est efficace ou bien y a til une personne qui a réussi à le faire fonctionner?
L'aigle de Carthage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/10/2011, 11h30   #12
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 538
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 538
Points : 7 754
Points : 7 754
utiliser expect est encore une connerie (en terme de sécurité cette fois ci)

il faut utiliser les clef ssh de connections.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 08/10/2011, 12h19   #13
Débutant
 
Inscription : mai 2006
Messages : 529
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 529
Points : 61
Points : 61
Je peut m'en passer de la sécurité !

J'ai pas besoin de l'aspect sécurité ... je veut faire fonctionner cette instruction (quelque soit les risques !)
L'aigle de Carthage est déconnecté   Envoyer un message privé Réponse avec citation 03
Vieux 08/10/2011, 12h59   #14
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 989
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 989
Points : 6 145
Points : 6 145
Bonjour.

Je t'ai déjà indiqué la solution la plus simple et la moins sécurisée ... encore une fois je ne te la conseil pas (c'est une faille énorme). Après c'est toi qui voit.

Franchement, quant il est possible de ne pas négliger la sécurité, pourquoi s'en passer ? Je rejoint l'avis de frp31 : l'idée des clefs ssh est de loin, la meilleur solution ...
  • /etc/sudoers avec NOPASSWD : tout le monde qui arrive à se loguer sur ta session pourra exécuter des commandes root.
  • expect : c'est déjà mieux mais ton passwd sera visible depuis les sources (et le Java est facilement décompilable) ... sans parler d'autres risques d'incohérence en changeant le mot de passe, etc

Cordialement,
Idriss
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/10/2011, 16h47   #15
Débutant
 
Inscription : mai 2006
Messages : 529
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 529
Points : 61
Points : 61
Si je change dans le fichier /etc/sudoers avec NOPASSWD, dois je redémarrer le PC pour appliquer les changements?
L'aigle de Carthage est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 10/10/2011, 06h59   #16
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 989
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 989
Points : 6 145
Points : 6 145
Snif ... bon ben si tel est ton choix.

Citation:
Envoyé par L'aigle de Carthage Voir le message
Si je change dans le fichier /etc/sudoers avec NOPASSWD, dois je redémarrer le PC pour appliquer les changements?
Non il suffit d'enregistrer le fichier normalement ...

Encore une fois, renseignes toi sur SSH, c'est pas sorcier ...

Idriss
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/10/2011, 09h07   #17
Membre confirmé
 
Avatar de Mandraxx
 
Homme
Architecte de système d'information
Inscription : mai 2011
Messages : 133
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France, Gers (Midi Pyrénées)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Conseil

Informations forums :
Inscription : mai 2011
Messages : 133
Points : 264
Points : 264
Par défaut Et la solution C ?

Bonjour,

Désolé, j'arrive peut-être après le train ...

Mais je souhaitais juste évoquer une solution que j'ai souvent mis en oeuvre sur ce genre de problème : rédiger l'algorithme nécessitant des droits systèmes élevés (system dependant donc...) en langage C.

Partant de là, il suffit de coller le setUID bit au binaire que l'on donne en nue propriété à root (chmod u+s ... && chown root) et mettre une ligne setuid(0) dans le code C.

L'avantage de cette solution, c'est qu'on peut faire pas mal de checks de sécurité avant d'acquérir les droits root comme par exemple, vérifier que le process appelant est bien celui prévu dans les conditions nominales, etc.

@+
Mandraxx est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h38.


 
 
 
 
Partenaires

Hébergement Web