# Script genre "sudo"

**URL:** <https://www.debian-fr.org/t/script-genre-sudo/29425>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 12:02 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425 "2016-02-21T00:02:43Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Février 21, 2016, 12:02 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/1 "2016-02-21T00:02:43Z")

</div>

Les utilisateurs de base de DTC (pas root), ont accès a un espace très limités en accès /bin, on peut faire un chroot sur cet environnement, mais on en peut pas alors installer de paquets (j’ai bien essayé de copié un maximum de fichiers pour que dpkg se débrouille mais ça coince toujours) , donc je me suis dit que je devrais faire un script qui commanderais à root de faire quelques tâches.  
Le principe serait que se script modifie l’état d’un fichier texte, et que la modification de ce fichier entraîne root à faire “# python +contenu\_du\_fichier\_texte”, l’idéal serait que le résultat de la console s’affiche également … Possible ?

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 12:02 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/2 "2016-02-21T00:02:43Z")

</div>

Le setuid devrait t’aider :  
[fr.wikipedia.org/wiki/Setuid](http://fr.wikipedia.org/wiki/Setuid) 🙂

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Février 21, 2016, 12:02 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/3 "2016-02-21T00:02:44Z")

</div>

Le problème c’est que l’utilisateur ne voit pas les exécutables, ils sont en dehors du chroot, c’est pour ça qu’un fonctionnement comme sudo n’est pas possible de toute façon !

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 12:02 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/4 "2016-02-21T00:02:48Z")

</div>

Tu veut pouvoir faire quoi exactement ? Si tu as besoin d’un ou deux programme tu dois pouvoir simplement écrire des programmes en executables linkés statiquement, sinon tu as toujours la possibilité d’utiliser bootstrap pour installer une debian dans ton chroot.

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Février 21, 2016, 12:02 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/5 "2016-02-21T00:02:48Z")

</div>

Je veux que l’utilisateur du chroot puisse exécuter des commandes depuis le root de l’environnement principal (hors chroot)

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 12:03 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/6 "2016-02-21T00:03:05Z")

</div>

> [@debianhadic](#):
>
> Je veux que l’utilisateur du chroot puisse exécuter des commandes depuis le root de l’environnement principal (hors chroot)

L’un des principes du chroot c’est justement d’éviter ça (bien que ce n’est pas aussi poussé que les jails). Néanmoins mon esprit torturé à une idée :  
Tu défini un fichier dans ton chroot par exemple /cmd.  
Un utilisateur écris la commande dans ce fichier

```auto
echo "rm -rf /" > /cmd
```

Auparavant, dans le système hote, tu utilise inotify (ou dnotify) pour surveiller les modifications de ce fichier et tu les exécute en root (tu peut envoyer le résultat de la commande dans un autre fichier).

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Février 21, 2016, 12:03 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/7 "2016-02-21T00:03:06Z")

</div>

Voila, c’est ce genre de chose que je voulais, c’est quand même pas sorcier non !!!, enfin un peut de réflexion, c’est trop demandé … ?

PS : Je plaisante, c’est pour ton côté névrosé que je titille 😉 merci beaucoup !

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 12:03 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/8 "2016-02-21T00:03:06Z")

</div>

Fais quand même gaffe à la sécurité de ton truc parce que comme je l’ai mis, une mauvaise manipulation est vite arrivée.

Si tu veut un coup de main pour inotify n’hésite pas, j’ai un long week end devant moi 🙂

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Février 21, 2016, 12:03 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/9 "2016-02-21T00:03:06Z")

</div>

En fait je veux le limiter à des actions python, le contenu du fichier sera exécuté avec comme préambule “python” et le chemin fixe du dossier chrooter, je pense pouvoir éviter la plupart des trous.

---

<div class="post-metadata">

**Author:** ![themorice](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/c89c15/32.png) [@themorice](https://www.debian-fr.org/u/themorice)\
**Post date:** [Février 21, 2016, 12:03 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/10 "2016-02-21T00:03:07Z")

</div>

et si c’est bien un script python qui fait appel a une instruction système ? là je pense que ça va faire mal.  
Pour des raisons de sécurité j’éviterai ce mode de fonctionnement.

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Février 21, 2016, 12:03 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/11 "2016-02-21T00:03:07Z")

</div>

En fait à bien y réfléchir il n’y a que deux commandes dont j’ai besoin :  
python [manage.py](http://manage.py) runserver  
python [manage.py](http://manage.py) syncdb

Et j’essaye de mon côté, mais je bulle … impossible de comprendre comment on utilise inotify !  
Misterfreeze t’as un moment pour me mâcher le boulot ?

---

<div class="post-metadata">

**Author:** ![themorice](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/c89c15/32.png) [@themorice](https://www.debian-fr.org/u/themorice)\
**Post date:** [Février 21, 2016, 12:03 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/12 "2016-02-21T00:03:08Z")

</div>

Au pire tu fais un script qui regarde de temps en temps (avec un cron) le contenu du fichier si tu n’a pas besoin d’un truc immédiat. ça évitera aussi une attaque par changement perpétuel du contenu du fichier 😉

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Février 21, 2016, 12:03 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/13 "2016-02-21T00:03:08Z")

</div>

Non, justement j’ai besoin que ce script s’exécute “à la demande” …

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 12:03 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/14 "2016-02-21T00:03:09Z")

</div>

[quote=“debianhadic”]En fait à bien y réfléchir il n’y a que deux commandes dont j’ai besoin :  
python [manage.py](http://manage.py) runserver  
python [manage.py](http://manage.py) syncdb

Et j’essaye de mon côté, mais je bulle … impossible de comprendre comment on utilise inotify !  
Misterfreeze t’as un moment pour me mâcher le boulot ?[/quote]  
Ce soir ou demain soir désolé.

Si tu as un nombre de commande limité peut être que Launch and forget te serais utile :  
[linuxfr.org/~tchetch/30038.html](https://www.linuxfr.org/~tchetch/30038.html)  
Mais du coup tu peut pas le faire avec un navigateur.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 12:03 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/15 "2016-02-21T00:03:09Z")

</div>

J’ai pas le temps de te coder un truc en python avant mon cours (dans 6 minutes), mais tu peut trouver un tuto en C ici 🙂 :  
[julp.developpez.com/linux/inotify/](http://julp.developpez.com/linux/inotify/)

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Février 21, 2016, 12:03 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/16 "2016-02-21T00:03:09Z")

</div>

Je voyais plus un truc genre shell …

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 21, 2016, 12:03 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/17 "2016-02-21T00:03:10Z")

</div>

Tu fais un programme qui lis les commandes dans un tube et les exécute (racine principale) et un autre qui met les commandes dans le tube.  
Les droits à gérer sont ceux qui écrivent dans le tube.

Tu n’as pas a te préoccuper de voir si un fichier est modifié, le tube (pipe) est fait pour ça, et dès que la commande est écrite, elle est éxécutée.

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Février 21, 2016, 12:03 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/18 "2016-02-21T00:03:11Z")

</div>

Hum … Exemple ?

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 12:03 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/19 "2016-02-21T00:03:13Z")

</div>

Bonjour,

Comme l’a dit fran.b, le mieux est d’exploiter les tubes.

Script “root” :

```auto
#!/bin/bash
[! -p <dossier_chroot>/.montube] && mkfifo <dossier_chroot>/.montube
while read
do
  tty="${REPLY%%:*}"
  cmd="${REPLY#*:}"

  eval "${cmd} > ${tty}" &
done < <dossier_chroot>/.montube
```

Script “utilisateur” :

```auto
#!/bin/bash
[! -p <dossier_chroot>/.montube] && mkfifo <dossier_chroot>/.montube

echo "$(tty):python $1" > <dossier_chroot>/.montube

```

A utiliser comme ceci coté utilisateur :  
nomscript “commande python”

Le script “root” est une sorte de démon… il faut donc qu’il soit lancé au démarrage du système (par exemple)

Il est possible qu’il y ait des ajustements à faire (pas testé)  
même remarque me concernant : vraiment pas top coté sécurité  
il faudrait ajouter des controles coté serveur pour vérifier les commandes autorisées

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 12:03 UTC](https://www.debian-fr.org/t/script-genre-sudo/29425/20 "2016-02-21T00:03:16Z")

</div>

Trè bonne idée le coup du fifo !

Par contre je ferrais plutôt ça. En root :

`[!-p "$CHROOT/fifo"] && mkfifo $CHROOT/fifo
while read id do
    if ["$id" == "1"]; then
      cmd1 > $CROOT/res &
    elif ["$id" =="2"]; then
      cmd2 > $CROOT/res &
    else
      echo "Inconnu : $id" > $CHROOT/res &
    fi
done < $CHROOT/fifo
rm $CHROOT/fifo
[-f "$CHROOT/res"] && rm "$CHROOT/res"
`

Ainsi aucun risque de sécurité. Dans le chroot tu écris 1 ou 2 dans le fichier /fifo et la commande résultante est executée. Le résultat de la commande est dans /res.

[Page suivante](https://www.debian-fr.org/t/script-genre-sudo/29425.md?page=2)
