Chown répertoires parents par script

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

Comment faire pour chown tous les répertoires parents ?

Merci

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

salut,

pourquoi ne pas utiliser usermod ?

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)

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.

Salut MisterFreez 8)

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 :exclamation:

Je vois 2 solutions :

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

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é.

La commande ne me retourne rien…

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 :wink:

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

ou un

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

HOME="/home/users/toto/change/new_home"

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:

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 “chown toto:toto” par “echo” 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 :

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:[/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.