Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
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 11/10/2007, 11h25   #1
Membre régulier
 
Homme
Développeur Java
Inscription : mai 2006
Messages : 350
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Java
Secteur : Industrie

Informations forums :
Inscription : mai 2006
Messages : 350
Points : 85
Points : 85
Par défaut shell su root>user>root

Bonjour,

j'ai eu beau chercher et retourner le preblème dans tous les sens, je pense que c'est pas possible.


Je voudrai executer une partie de mon script en tant qu'un autre utilisateur, et lorsque le script est fini, redevenir root.

J'ai créé un script de test. Le voici :
Code :
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
#!/bin/sh
 
echo
echo
echo
echo ========================== debut test_login.sh ============================
echo
echo 1 normalement root
echo `whoami`
 
 
VAR_LOGIN=toto
echo pswtoto > ./toto.psw
 
su - $VAR_LOGIN < ./toto.psw
echo 2 normalement toto
echo `whoami`
exit
 
echo 3 normalement root
echo `whoami`
echo
echo ========================= fin test_login.sh ===============================
echo
echo
echo
 
exit
Vous en pensez quoi ?
Une alternative serait sudo a priori, mais le problème est que j'ai un bon nombre de ligne a exécuter en tant qu'utilisateur lambda et que faire un sudo pour chacune risque d'être trop lourd.
croc14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 11h46   #2
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 499
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 499
Points : 9 682
Points : 9 682
Bonjour,

Citation:
Envoyé par croc14 Voir le message
Une alternative serait sudo a priori, mais le problème est que j'ai un bon nombre de ligne a exécuter en tant qu'utilisateur lambda et que faire un sudo pour chacune risque d'être trop lourd.
Pourquoi ne pas faire un script que tu exécuteras via sudo dans ce cas ?
__________________
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 00
Vieux 11/10/2007, 12h13   #3
Rédacteur/Modérateur
 
Avatar de gorgonite
 
Homme Nicolas Vallée
Ingénieur Système
Inscription : décembre 2005
Messages : 9 774
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vallée
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Ingénieur Système
Secteur : Transports

Informations forums :
Inscription : décembre 2005
Messages : 9 774
Points : 14 303
Points : 14 303
faire un autre script, et tapez

Code :
su autre_login -c /path/to/command args...
__________________
Evitez les MP pour les questions techniques... il y a des forums
Contributions sur DVP : Mes Tutos | Mon Blog
gorgonite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 14h48   #4
Membre régulier
 
Homme
Développeur Java
Inscription : mai 2006
Messages : 350
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Java
Secteur : Industrie

Informations forums :
Inscription : mai 2006
Messages : 350
Points : 85
Points : 85
Le probleme est que mon script est déjà appeler par une autre application et qu'il faut qu'il n'y ait (pour une histoire de simplicité et de sureté) qu'un seul script !!!




Ps : merci pour le déplacement.

edit :
on peux pas exécuter une sous-fonction dans la commande sudo / su -c ?
Et comme ca je met tout mon code dans une fonction et ca irait niquel !!!
croc14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 08h37   #5
Membre éprouvé
 
Avatar de argoet
 
Inscription : mai 2002
Messages : 535
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 535
Points : 461
Points : 461
avez vous étudié l'utilisation des permissions absolues sur un fichier en execution .

Citation:
Envoyé par extrait du man chmod
Absolute permissions can be set by specifying a numeric_mode, an octal
number constructed from the logical OR (sum) of the following mode
bits:

Miscellaneous mode bits:

4000 (= u=s) Set user ID on file execution (file only)
2000 (= g=s) Set group ID on file execution (file only)
1000 (= u=t) Set sticky bit
Exemple :
vous avez le fichier toto.sh (Qui apartient à root)
vous faites un chmod 7755 toto.sh

Tous utilisateur unix "lambda" lançant toto.sh aura les droits "root" pendant toute la durée d'execution de toto.sh

Je crois , que c'est aussi vrai dans le sens inverse
__________________
Signé : Capitaine Jean-Luc Picard
argoet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 09h49   #6
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 969
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 969
Points : 1 376
Points : 1 376
2 remarques:
"echo `whoami`" peut être avantageusement remplacé par "whoami"
l'utilisation de "toto.psw" est inutile puisque tu es root.

Voici un script unique permettant de faire ce que tu veux:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/sh
 
echo ========================== debut test_login.sh ============================
echo
echo 1 normalement root
whoami
 
VAR_LOGIN=toto
 
su - $VAR_LOGIN -c "
echo 2 normalement toto
whoami
"
 
echo 3 normalement root
whoami
echo
echo ========================= fin test_login.sh ===============================
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
========================== debut test_login.sh ============================
 
1 normalement root
root
Sun Microsystems Inc.   SunOS 5.11      snv_54  October 2007
2 normalement toto
toto
3 normalement root
root
 
========================= fin test_login.sh ===============================
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 14h34   #7
Membre régulier
 
Homme
Développeur Java
Inscription : mai 2006
Messages : 350
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Java
Secteur : Industrie

Informations forums :
Inscription : mai 2006
Messages : 350
Points : 85
Points : 85
Merci, cette solution me convient fortement.


Je vous remercie encore une fois grandement !!!

@+
croc14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 17h06   #8
Membre régulier
 
Homme
Développeur Java
Inscription : mai 2006
Messages : 350
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Java
Secteur : Industrie

Informations forums :
Inscription : mai 2006
Messages : 350
Points : 85
Points : 85
Désolé de changer d'avis, mais j'ai le moyen de résoudre mon problème qui part en fumer !!!!

Comment faire pour que ceci marche ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/sh
 
 
qui_je_suis() {
echo $1 normalement $2
whoami
}
 
 
echo ========================== debut test_login.sh ============================
echo
qui_je_suis 1 root
 
VAR_LOGIN=toto
 
su - $VAR_LOGIN -c "
qui_je_suis 2 toto
"
 
qui_je_suis 3 root
echo
echo ========================= fin test_login.sh ===============================
Le principe étant que ce qui est dans qui_je_suis représentera l'intégralité du script à réaliser avec les droit de $VAR_LOGIN.

Actuellement, le résultat est
Code :
1
2
3
4
5
6
7
8
9
========================== debut test_login.sh ============================
 
1 normalement root
root
- su : -bash line 1 : invalid command name qui_je_suis
3 normalement root
root
 
========================= fin test_login.sh ===============================
J'imagine mieux a présent comment cette commande fonctionne. Elle définit un sous script qui est ce qui ce trouve entre quote, et elle appele la commande su qui créera un nouveau shell et qui exécutera mon script. Mais ainsi, le nouveau script ne connait plus ma fonction.


Donc idée, est il possible de lui dire qu'il doit conserver les fonctions déjà définies ?
Ou alors peut on pointer sur le script d'origine pour que les fonctions soient redéfinies.

Merci
croc14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2007, 01h48   #9
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 969
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 969
Points : 1 376
Points : 1 376
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash


qui_je_suis() {
echo $1 normalement $2
whoami
}

typeset -fx qui_je_suis

echo ========================== debut test_login.sh ============================
echo
qui_je_suis 1 root

VAR_LOGIN=toto

su $VAR_LOGIN -c "
qui_je_suis 2 toto
"

qui_je_suis 3 root
echo
echo ========================= fin test_login.sh ===============================
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2007, 09h11   #10
Membre régulier
 
Homme
Développeur Java
Inscription : mai 2006
Messages : 350
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Java
Secteur : Industrie

Informations forums :
Inscription : mai 2006
Messages : 350
Points : 85
Points : 85
Merci ca marche !!!

Donc ainsi, on dit qu'il peut utiliser cette fonction.


Le dernier soucie, qui n'en est pas vraiment un, est que mon script contient dans les 7/8 fonctions (ca, ca va) mais dans les 200/300 variables.

Est ce qu'il est possible de définir des blocs de variable d'environnement ou est ce qu'il faut rajouter devant toutes typeset ?




Je vais déja me lancer dans cette solution. Mais merci 1000 fois !!!
croc14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h40.


 
 
 
 
Partenaires

Hébergement Web