changement user "su" et proprietaire répertoire

changement user "su" et proprietaire répertoire - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 01-01-2010 à 14:45:44    

Bonjour et bonne année 2010 à tous !
 
Pour commencer l'année doucement après le réveillon ( :pt1cable: ), je vous propose un sujet, surement simple, mais je coince un peu.
 
Voila, je suis hébergé chez OVH en dédié linux.
Je veux automatiser des tâches via la crontab. Paramétrage de la crontab, sans pb.
Un script est exécuté par l'utilisateur root. Aussi, j'ai effectué un "su - toto" pour changer d'utilisateur, avant, par exemple, de créer un répertoire.
Et ben c'est toujours root le créateur du répertoire, et pas mon user toto !
 
Manip manuelle via le prompt :
> su - toto (je suis connecté en tant que toto)
> mkdir mon_repertoire (toto est le créateur du répertoire)
> exit (je reviens en mode root)
 
Maintenant, mon script shell "test.sh" essaye de faire la même chose. Voici son contenu :
su - toto
mkdir mon_repertoire
echo "creation OK"
exit
 
Je le lance via root (comme un tâche cron) de la façon suivante : "./test.sh" et voilà ce qui se passe :
- Le script se connecte en tant que user "toto", le prompt est "toto@xxxx:", et rien ne se passe.
- Je fais un exit à partir du prompt et le script se termine en créant mon répertoire avec le user root et non toto du coup, et affiche le message "creation OK".
 
Ya surement un truc tout simple mais là, je ne vois pas.
Pourriez-vous me filer un coup de main ?
 
Merci  :hello: .

Reply

Marsh Posté le 01-01-2010 à 14:45:44   

Reply

Marsh Posté le 01-01-2010 à 14:48:42    

Salut,
 
ce n'est pas possible d'utiliser la commande su de cette façon en script.
Pour ca utilise :

Code :
  1. su - <USER X> -c <COMMAND>

Reply

Marsh Posté le 01-01-2010 à 16:59:35    

Ce qui se passe, c'est que ton script lance le su, qui attend des commandes sur l'entrée standard. Et quand le su se termine, le script continue (création du répertoire).
A la rigueur, il aurait fallu faire : "echo mkdir repertoire" | su - toto
(l'utilisation du paramètre -c est mieux, bien évidemment :jap: )


Message édité par mrbebert le 01-01-2010 à 17:00:18
Reply

Marsh Posté le 01-01-2010 à 17:39:27    

Une autre possibilité c'est de passer par la commande chown pour changer le propriétaire du répertoire
 
mkdir repertoire
chown toto repertoire
 
Comme ca t'as le choix :)

Reply

Marsh Posté le 01-01-2010 à 20:08:59    

@mrbebert: merci pour l'explication.
@kisscoolz: j'en ai pas mal à gérer, je préfère que se soit mon user toto qui effectue la manip.
@sputnick: bien vu la commande. Par contre il me demande le mot de passe, alors qu'on prompt, il n'en réclame pas (c'est root qui effectue le su). Y a t-il un moyen de gérer cela ?
 
Merci pour vos réponses.

Reply

Marsh Posté le 01-01-2010 à 21:26:30    

Bon, chuis nul ! j'avais laissé un "su - toto" dans le script appelé !!!
 
Donc, tout marche nickel. Merci pour votre prompte participation.
 
Et.... bonne année !

Reply

Marsh Posté le 01-01-2010 à 21:54:51    

vavoir a écrit :

Bon, chuis nul ! j'avais laissé un "su - toto" dans le script appelé !!!
 
Donc, tout marche nickel. Merci pour votre prompte participation.
 
Et.... bonne année !


Euh....finalement, il suffisait de paramétrer l'utilisateur "toto" dans la crontab pour le lancement du traitement  :D  
*/1 * * * * toto test.sh
Bon ben j'ai appris plusieurs trucs aujourd'hui. Merci  :hello:

Reply

Marsh Posté le 04-01-2010 à 18:08:35    

vavoir a écrit :


Euh....finalement, il suffisait de paramétrer l'utilisateur "toto" dans la crontab pour le lancement du traitement  :D  

Code :
  1. */1 * * * * toto test.sh


Bon ben j'ai appris plusieurs trucs aujourd'hui. Merci  :hello:


 
 
Oui, enfin n'oublie pas de preciser que cette syntaxe n'est prevue que dans /etc/crontab.
Sinon il suffit d'editer la bonne crontab, example :  

Code :
  1. crontab -e -u mamieSousBSD


Message édité par sputnick le 04-01-2010 à 18:09:19
Reply

Marsh Posté le 04-01-2010 à 18:44:20    

On peut utiliser sudo aussi, pour changer d'identité le temps de passer une commande.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed