problème de modification .bashrc

problème de modification .bashrc - Shell/Batch - Programmation

Marsh Posté le 27-05-2010 à 15:03:21    

Bonjour,
 
J'aurai besoin d'aider pour la modification du fichier .bashrc pour un utilisateur.
 
Je m'explique, je voudrais que l'utilisateur util1 puisse modifier le .bashrc de util2.
Pour cela, j'ai modifier le fichier /etc/sudoers pour que util1 ait les droits de root sur la commande echo
 
J'ai ajouter les lignes suivante au bon endroit dans le fichier /etc/sudoers:
 
Cmnd_Alias ECH=/bin/echo
 
util1 ALL=NOPASSWD:ECH
 
 
Le problème qui se pose c'est que j'ai toujours le message "Permission non accordée" en lancant la commande suivante lorsque je suis sous l'utilisateur util1
 
sudo -u root echo "/usr/bin/test" >> /home/util2/.bashrc
 
 
Quelqu'un aurait-il une idée pour résoudre cela?
 
Merci d'avance.

Reply

Marsh Posté le 27-05-2010 à 15:03:21   

Reply

Marsh Posté le 27-05-2010 à 22:00:28    

jaysiat a écrit :

Bonjour,
 
J'aurai besoin d'aider pour la modification du fichier .bashrc pour un utilisateur.
 
Je m'explique, je voudrais que l'utilisateur util1 puisse modifier le .bashrc de util2.
Pour cela, j'ai modifier le fichier /etc/sudoers pour que util1 ait les droits de root sur la commande echo
 
J'ai ajouter les lignes suivante au bon endroit dans le fichier /etc/sudoers:
 
Cmnd_Alias ECH=/bin/echo
 
util1 ALL=NOPASSWD:ECH
 
 
Le problème qui se pose c'est que j'ai toujours le message "Permission non accordée" en lancant la commande suivante lorsque je suis sous l'utilisateur util1
 
sudo -u root echo "/usr/bin/test" >> /home/util2/.bashrc
 
 
Quelqu'un aurait-il une idée pour résoudre cela?
 
Merci d'avance.


 
Lorsque tu utilises la syntaxe commande >> fichier, la partie redirection ">>" n'est pas gérée par la commande mais par le shell qui a interprété l'ordre d'appel et qui se charge d'appeler ladite commande.
Donc tu peux donner les droits root à la commande echo, tu peux même lui mettre le setuid, cela n'autorisera pas le shell de l'utilisateur 1 à écrire dans le fichier .bashrc de l'utilisateur 2. Ce qui est d'ailleurs une bonne chose.
 
Ta solution adoptée n'est donc pas bonne. Je dirais même qu'elle traduit un problème de conception qqpart. Par définition, les fichiers situés dans le répertoire d'un utilisateur sont 100% les siens et il est le seul a avoir le droit d'en faire ce qu'il veut.
 
Toutefois si tu t'obstines dans ta solution boiteuse, alors voici les possibilités (de la pire vers la plus propre):
1) tu donnes les droits root sur la commande /bin/bash. Tant qu'à aller dans le mur, autant y aller à donf
2) tu centralises l'ensemble des .bashrc et tu fais des liens vers chaque utilisateur. La modification du bashrc de référence sera alors instantanément répercutée sur les .bashrc des utilisateurs. Mais cette modif ne pourra se faire que par le proprio du bshrc de référence (probablement root)
3) tu crées un exécutable spécialement dédié à ce travail. Il se charge lui-même d'aller ouvrir les .bashrc et écrire dedans. Ensuite tu donnes les droits root à cet exécutable
Voilà.


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 28-05-2010 à 11:04:23    

merci de ton explication, je comprends mieux :)

Reply

Marsh Posté le 28-05-2010 à 15:23:26    

En fait, je veux faire ca dans un script perl dans lequel l'utilisateur choisi un login et un mot de passe, et cela lui crée son compte sur la machine unbuntu avec un home directory. Je connais donc son mot de passe, mais impossible de faire un "su util2", puis entrer son mot de passe et ensuite modifier le bashrc. Il n'est pas possible de faire un su via un script, il m'est indiqué qu'il peut se faire uniquement en ligne de commande

Reply

Marsh Posté le 28-05-2010 à 22:15:15    

jaysiat a écrit :

En fait, je veux faire ca dans un script perl dans lequel l'utilisateur choisi un login et un mot de passe, et cela lui crée son compte sur la machine unbuntu avec un home directory.


Ben tu appelles useradd. Cette commande fait tout elle-même !!!
 
Ou alors, comme je le dis, tu crées un exécutable qui se charge de faire le boulot. Ensuite tu donnes les droits root audit exécutable. De toute façon, les droits root ne peuvent se donner qu'à un exécutable et non à un script car le script est interprété (par un ... exécutable !!!)
 

jaysiat a écrit :

Je connais donc son mot de passe, mais impossible de faire un "su util2", puis entrer son mot de passe et ensuite modifier le bashrc. Il n'est pas possible de faire un su via un script, il m'est indiqué qu'il peut se faire uniquement en ligne de commande


Déjà manque de bol, je ne connais pas perl. Moi je suis plutôt branché Python. Toutefois, Python (et probablement Perl aussi) ne peut pas appeler directement un programme externe. Faut qu'il passe par la commande "os.system()" ou "os.popen()". Mais encore une fois, aucun script interprété ne peut avoir de droits root...
 
De plus j'ai l'impression que tu cherches à faire faire aux outils un travail qui n'a pas été prévu. La commande "su (switch user) a pour rôle de t'ouvrir un shell au nom de l'utilisateur en question. Elle n'est pas prévue pour exécuter des commandes en batch. Eventuellement une syntaxe ressemblant à

Code :
  1. su user <<_EOT_
  2. motdepasse
  3. commande
  4. _EOT_


pourrait "peut-être" marcher. Mais même là j'ai un doute car, exemple simple, ce type de syntaxe ne fonctionne pas pour la commande "passwd" qui détecte stdin et qui refuse si stdin est redirigé (sécurité).
 
sudo serait plus faite pour ça. Mais again, j'ai l'impression que tu te compliques vachement la vie alors qu'il existe des outils (comme useradd) déjà tout prêts. Qu'est-ce qui t'empêche d'encapsuler un system("useradd" ) dans un exécutable C bien verrouillé ???


Message édité par Sve@r le 28-05-2010 à 22:23:19

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 31-05-2010 à 11:24:42    

Toute la partie authentification de l'utilisateur est codé, en fait il me manque que la modification du bashrc de l'utilisateur pour pouvoir lancer automatiquement un script dès sa connexion.
su directement dans un script ne fonctionne pas.
Je réfléchi a une solution alternative  :pt1cable:  
 
merci de ta réponse :)


Message édité par jaysiat le 31-05-2010 à 11:26:34
Reply

Marsh Posté le 31-05-2010 à 12:32:00    

Tu peux pas exécuter ton script en root ?
J'ai déjà fait un truc comme ça dans un init script, pour authentifier une machine sur un proxy sans ouvrir de session par le biais d'un compte utilisateur, il n'y a pas de mot de passe à entrer dans ce cas là.

 

Exécuté en root au démarrage de la machine, il y avait un truc du genre:

 

sudo -u user1 commande_d_auth

 

Changement d'identité nécessaire car le logiciel refusait de se lancer en root.


Message édité par Tuxerman12 le 31-05-2010 à 12:32:54
Reply

Marsh Posté le 31-05-2010 à 16:19:14    

merci de ta réponse, j'avais essayer cette méthode mais sans succès. je vais réessayer.

Reply

Marsh Posté le 31-05-2010 à 16:28:31    

J'ai pas compris ce que tu veux faire exactement, c'était juste pour te signaler que l'utilisateur root peut tout faire, même prendre l'identité d'un user sans connaitre son mot de passe.

Reply

Marsh Posté le 01-06-2010 à 11:36:29    

en copiant directement un bashrc déjà modifié dans le répertoire de l'utilisateur voulu cela fonctionne (cp), on écrase donc le bashrc de l'utilisateur. Par contre je ne comprends pas pourquoi cela marche alors qu'on ne peut pas le modifier (Permission non accordée)

Reply

Marsh Posté le 01-06-2010 à 11:36:29   

Reply

Marsh Posté le 01-06-2010 à 11:37:35    

merci tuxerman12, mais je n'utilise pas root pour faire cela. J'ai des groupes et les utilisateurs se connecte puis crée des comptes appartenant a un groupe défini.

Reply

Marsh Posté le 02-06-2010 à 00:58:48    

jaysiat a écrit :

en copiant directement un bashrc déjà modifié dans le répertoire de l'utilisateur voulu cela fonctionne (cp), on écrase donc le bashrc de l'utilisateur. Par contre je ne comprends pas pourquoi cela marche alors qu'on ne peut pas le modifier (Permission non accordée)


 
L'écrasement d'un fichier par un autre est une opération qui se passe en 2 temps
1) effacement du fichier d'origine (donc suppression d'une entrée du répertoire)
2) écriture du nouveau fichier (donc rajout d'une entrée de plus dans le répertoire)
Ces deux opérations n'agissent que dans le répertoire. Donc seuls les droits du répertoire sont utilisés.


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 02-06-2010 à 11:08:37    

jaysiat a écrit :

en copiant directement un bashrc déjà modifié dans le répertoire de l'utilisateur voulu cela fonctionne (cp), on écrase donc le bashrc de l'utilisateur. Par contre je ne comprends pas pourquoi cela marche alors qu'on ne peut pas le modifier (Permission non accordée)


 
Ta copie tu la fais avec l'user proprio du dossier ou avec un autre user ?  :??:

Reply

Marsh Posté le 02-06-2010 à 15:29:31    

un autre user qui a accès à sudo -u sans mot de passe. Par contre avec un autre user j'y arrive pas il me demande le mot de passe et ensuite permission denied. Dans le fichier sudoers, les 2 ont les memes droit pourtant.
Par contre avec cet user j'ai accès à "sudo bash" et pas avec les autres, je ne sais pas comment régler ca.

Reply

Marsh Posté le 02-06-2010 à 15:33:58    

en fait j'ai un utilisateur "test" qui a accès a "sudo bash", un utilisateur roger crée son compte et est placé dans le groupe "test". Lorsque je suis sous l'utilisateur "test" je peux copier un fichier dans le répertoire home de roger.
Par contre avec un autre utilisateur "test2", lui n'as pas accès à "sudo bash", je ne sais pas comment lui donner accès, l'utilisateur toto crée son compte et est associé au groupe "test2". Dans ce cas impossible de copier un fichier de l'utilisateur de "test2" dans le home de toto, il demande le mot de passe de toto, je le rentre, puis permission denied.
Dans le fichier /etc/sudoers, les meme droits sont associer à test et a test2.


Message édité par jaysiat le 02-06-2010 à 15:36:32
Reply

Sujets relatifs:

Leave a Replay

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