# Chown répertoires parents par script

**URL:** <https://www.debian-fr.org/t/chown-repertoires-parents-par-script/34188>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 3:33 UTC](https://www.debian-fr.org/t/chown-repertoires-parents-par-script/34188 "2016-02-21T03:33:00Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 3:33 UTC](https://www.debian-fr.org/t/chown-repertoires-parents-par-script/34188/1 "2016-02-21T03:33:00Z")

</div>

Bonjour,

J’ai un script bash qui me permet de créer des utilisateurs. Dans le script je voudrais pouvoir changer le propriétaire/chemin du home de l’utilisateur.

Exemple l’utilisateur toto à son home ici : /home/users/toto = chown toto:toto

Je veux lui affecter un “nouveau” home qui sera /home/users/toto/change/new\_home si je fais chown toto:toto /home/users/toto/change/new\_home “new\_home” = toto:toto MAIS PARCONTRE “change” lui reste root:root et je voudrais que le dossier soit en toto:toto ![:075](https://www.debian-fr.org/uploads/default/original/1X/660d70f9421e915a2561756e6d9f245d4f609347.gif "dequoi")

Comment faire pour chown tous les répertoires parents ?

Merci

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 3:33 UTC](https://www.debian-fr.org/t/chown-repertoires-parents-par-script/34188/2 "2016-02-21T03:33:01Z")

</div>

Je suppose que tu as essayé avec -R et que ça ne fonctionne pas ?

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Février 21, 2016, 3:33 UTC](https://www.debian-fr.org/t/chown-repertoires-parents-par-script/34188/3 "2016-02-21T03:33:04Z")

</div>

salut,

pourquoi ne pas utiliser usermod ?

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 3:33 UTC](https://www.debian-fr.org/t/chown-repertoires-parents-par-script/34188/4 "2016-02-21T03:33:05Z")

</div>

Bonjour,

@ricardo  
Oui le chown -R ne fonctionne que sur le dernier répertoire et non pas sur son parent.

@Watael  
Parceque dans ce cas de figure, il faut que le dossier “racine” /home/users/toto soit toujours utilisable par l’utilisateur.  
Le dossier “change/new\_home” est son nouveau point de chute lors du login, mais il peut redescendre dans “change” ou le home racine.

En revanche, il ne peut pas écrire dans “/change/” puisque les droits sont sur root:root (j’utilise mkdir -p /home/users/toto/change/new\_home)

---

<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, 3:33 UTC](https://www.debian-fr.org/t/chown-repertoires-parents-par-script/34188/5 "2016-02-21T03:33:18Z")

</div>

Je ne comprends pas. Tu veux que :  
[ul]  
[li]/home/users/toto/change/new\_home appartienne à toto[/li]  
[li]/home/users/toto/change appartienne à root (impossibilité d’écrire de dans pour toto[/li]  
[li]/home/users/toto/ appartienne à toto[/li][/ul]  
?

Je comprends pas le problème.

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 3:33 UTC](https://www.debian-fr.org/t/chown-repertoires-parents-par-script/34188/6 "2016-02-21T03:33:19Z")

</div>

Salut MisterFreez ![8)](https://www.debian-fr.org/uploads/default/original/1X/ae031e9834d19166598edd060b063d44f1829139.gif "Cool")

Non je veux que /home/users/toto/change appartienne à toto et non pas à root.

•/home/users/toto/change appartient à root parceque le script de création des répertoires et lancé via root, donc l’utilisateur par défaut et root et je voudrais que se soit toto ❗

---

<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, 3:33 UTC](https://www.debian-fr.org/t/chown-repertoires-parents-par-script/34188/7 "2016-02-21T03:33:20Z")

</div>

Je vois 2 solutions :

`mkdir -p /home/users/toto/change/new_home
chown toto:toto /home/users/toto/change`  
ou

```auto

```

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 3:33 UTC](https://www.debian-fr.org/t/chown-repertoires-parents-par-script/34188/8 "2016-02-21T03:33:20Z")

</div>

La première solution n’est pas bonne car :

Le Home est généré dynamiquement est peux avoir plusieurs sous-répertoires, donc il faudrait passer un par un les sous-répertoire avec le chown

La seconde ne marche pas chez moi. J’avais déjà essayé.

> [@](#):
>
> su toto -l -c «&nbsp;whoami&nbsp;»

La commande ne me retourne rien…

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 3:33 UTC](https://www.debian-fr.org/t/chown-repertoires-parents-par-script/34188/9 "2016-02-21T03:33:21Z")

</div>

concernant su toto -l -c “whoami” je pense avoir compris !!!

L’utilisateur toto a pas de shell (/bin/false par défaut) si je passe en /bin/bash cela fonctionne !

Donc je vais devoir jouer avec usermod sur l’utilisateur pour modifier /bin/false en /bin/bash pour la création du Home et ensuite remettre le /bin/false

Mon script permet de créer dynamiquement des comptes FTP, donc je préfère utiliser /bin/false pour sécuriser l’ensemble 😉

---

<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, 3:33 UTC](https://www.debian-fr.org/t/chown-repertoires-parents-par-script/34188/10 "2016-02-21T03:33:22Z")

</div>

> [@\_seb\_](#):
>
> Le Home est généré dynamiquement est peux avoir plusieurs sous-répertoires, donc il faudrait passer un par un les sous-répertoire avec le chown

Il n’est pas dans une liste de variables ou autre ?  
Sinon peut être avec un

```auto
chown -R toto:toto /home/users/toto/
```

ou un

```auto
chown toto:toto /home/users/toto/*
```

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 3:33 UTC](https://www.debian-fr.org/t/chown-repertoires-parents-par-script/34188/11 "2016-02-21T03:33:23Z")

</div>

Si j’ai le Home dans une variable du script :

HOME=«&nbsp;/home/users/toto/change/new\_home&nbsp;»

> [@](#):
>
> chown toto:toto /home/users/toto/\*

Oui mais cela veux dire que le chown va traiter tout les fichiers/dossiers présent sur la machine… Cela donne un résultat plus long lors de l’éxecution du script. ![:think:](https://www.debian-fr.org/uploads/default/original/1X/98cae0704aea0201d04f151843e80a3ecd391eca.gif "Think")

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:33 UTC](https://www.debian-fr.org/t/chown-repertoires-parents-par-script/34188/12 "2016-02-21T03:33:23Z")

</div>

```auto
find /home/users/toto -maxdepth 1 -type d -print0 | xargs -0 -n 1 chown toto:toto
```

En adaptant bien entendu le maxdepth à tes besoins… (remplace «&nbsp;chown toto:toto&nbsp;» par «&nbsp;echo&nbsp;» pour voir quels dossiers seront pris en compte).  
Ça modifiera sûrement plus de dossiers qu’absolument nécessaire, mais rien de bien méchant comparé à un chown -R.

Edit :

> [@\_seb\_](#):
>
> [quote]chown toto:toto /home/users/toto/\*

Oui mais cela veux dire que le chown va traiter tout les fichiers/dossiers présent sur la machine… Cela donne un résultat plus long lors de l’éxecution du script. ![:think:](https://www.debian-fr.org/uploads/default/original/1X/98cae0704aea0201d04f151843e80a3ecd391eca.gif "Think")[/quote]  
Non, ça ne modifiera que les fichiers / dossiers directement présents dans le répertoire, pas dans les sous-répertoires (et accessoirement, par défaut ça ignorera les fichiers/dossiers cachés). Pour traiter l’ensemble des fichiers du dossier et de ses sous dossiers, il faut utiliser l’options -R (recursive) de chown.
