#1 Le 24/01/2009, à 12:58
- Samuelion
Droit recursif d'execution sur dossier mais pas sur fichiers
Bonjour, bonjour.
Utilisateur depuis quelques temps de linux, je me met pour la première à chercher à gérer le multi-user. Je cherche par conséquent à modifier un peu les droits pour rendre des fichiers personnels et d'autres communs à plusieurs users.
Et évidement je rencontre quelques difficultés .
Après quelques frayeurs avec un /home illisible, et tout, je voulais ressortir un /home avec des droits corrects et j'ai donc fait un chmod 750 sur le répertoire (why not) mais ce qui m'embête, c'est que tout les fichiers se retrouvent avec des droits d'exécutions, des simples txt aux ogg. Au contraire, avec un chmod 640, je supprimer le droit d'exécution des répertoires et je peux plus naviguer via nautilus.
Y a t il une solution pour rendre tous les fichiers d'un répertoire non exécutable et mettre ses directory exécutables ?
2ème question : moins importante car je pense pouvoir trouver la réponse en fouillant (je la pose quand même au cas où qqun soit plus rapide que moi ).
Je crée d'autres users. Je modifie leur /home en 770 et je m'inclus dans le groupe de ces nouveaux users. Je peux donc gérer leur config depuis mon user principal mais la création de fichier à l'intérieur reste avec mon nom et mes droits.
Je crois que les droits des fichiers crée se gère avec l'UMASK mais je sais pas trop comment ça marche, quand aux possesseurs des fichiers crées ? Je crois qu'il faut des droits d'admin pour changer le user, mais si le nom du group pouvait devenir celui du dossier ou je trifouille ainsi qu'avec les droits du dit dossier, l'utilisateur final ne sera pas gêné ... je crois me souvenir d' un chmod s ?
Merci d'avance .
Samµ.
Hors ligne
#2 Le 24/01/2009, à 14:03
- ohmbar
Re : Droit recursif d'execution sur dossier mais pas sur fichiers
avec find xargs et chmod +x (-x)
comme tu es "Utilisateur depuis quelques temps de linux" je te laisse le soin de faire la commande si le coeur t'en dis, sinon je me ferai un plaisir de t'aider...
Hors ligne
#3 Le 24/01/2009, à 18:44
- Samuelion
Re : Droit recursif d'execution sur dossier mais pas sur fichiers
Je suis utilisateur depuis quelques temps mais plus amateur que connaisseur .
Je pense m'en être sorti pour tous les fichiers avec extension .
Je ne maitrise pas du tout le xargs mais j'avais réussi à choper une ligne intéressante que je réutilise de temps en temps ^_^.
J'en suis donc à un.
find /home/myuser -name "*.*" -print0 | xargs -0 chmod 640
On peut aussi peut-être faire un truc comme ça ?
find /home/myuser -name "*.*" -exec chmod 640 {}; . Connais pas trop la syntaxe du -exec
Le problème étant que les fichiers avec extensions sous linux ne sont pas forcement les plus courant. Je dois reconnaitre que je ne sais pas comment faire néanmoins pour distinguer via find un répertoire d'un fichier, vu que rien dans leur nom n'indique ce qu'il est.
Je pensais jouer avec le -regex et filtrant les chemins se terminant par / mais hélas les répertoires sont sans le / de fin .
Je fais appel à mon joker, avis du public .
Merci encore .
Edit : Aie !! Ça marche pas !!
Ouh pas top on va dire, ça me prend aussi les dossiers cachés !! (c'est vrai qu'ils ont un point <_<).
Je crois qu'un script bash sera plus simple avec un truc du style if -x sauf que je connais pas encore le bon test, je fouille .
ReEdit :
#!/bin/bash
for myfile in *; do
if [ ! -d "$myfile" ]; then
chmod 640 "$myfile"
fi
done
C'est un peu lourd mais ça marche . Enfin que sur les fichiers du répertoire courant mais ce sera pas le plus compliqué à changer .
C'est marrant, au plus j'avance, et au plus j'ai l'impression de reculer . La formule ci-dessus marche, sauf pour les fichiers à espace !! >_<.
J'en suis à ça maintenant :
find "$Repertory" -name "*" | while read myfile
do if [ ! -d "${myfile}" ]; then
chmod "$Rules" "${myfile}"
fi
done
Ça à l'air de tourner .... jusqu'à preuve du contraire !!!
Reste plus que je me renseigne sur l'umask et le groupe auquel appartient les nouveaux fichiers crées .
Dernière modification par Samuelion (Le 25/01/2009, à 13:24)
Hors ligne
#4 Le 08/04/2009, à 12:50
- teke
Re : Droit recursif d'execution sur dossier mais pas sur fichiers
il y a peut être plus simple :
pour les fichier
$ find . -type f -exec chmod [mesdroits] \;
pour les dossier
$ find . -type d -exec chmod [mesdroits] \;
le {\;} à la fin est important...
Si tu utilise la récursion de la commande chmod, tu peux mettre un X (x majuscule) pour ne toucher que les dossiers :
$ chmod -r u-x+Xrw,u-xw+Xr,o-Xxrw .
#5 Le 10/04/2009, à 12:55
- Samuelion
Re : Droit recursif d'execution sur dossier mais pas sur fichiers
Nikel ça !!
J'ignorais que le chmod pouvait faire ça !!
En même temps, c'est une fonctionnalité basique. Ca me paraissait aussi bizarre de devoir faire autant d'efforts pour arriver à mes fins.
Merci beaucoup !!
Hors ligne
#6 Le 22/05/2012, à 21:35
- mohican
Re : Droit recursif d'execution sur dossier mais pas sur fichiers
Précision (avec avoir pal mal tâtonné )
Rappel du problème : on veut avoir les droits d'exécution sur les dossiers mais pas sur les fichiers, et on opère récursivement.
si les fichiers situés dans les sous-dossiers ont les droits -rwxrwx--- (770) et que l'on veut les mettre en -rw-rw---- (660),
la commande
chmod -R u-x+X,g-x+X *
ne vas rien faire car X concerne à la fois les dossiers ET les fichiers qui ont un x quelque part. Donc si u-x enlève le premier x (ce qui donne -rw-rwx---), la suite +X va aussitôt remettre un x car il reste un x (celui du groupe !).
Vous suivez ?
Donc il faut d'abord enlever tous les x : u-x,g-x avant de les remettre (sera fait uniquement pour les dossiers cette fois)
ce qui donne finalement :
chmod -R u-x,g-x,u+X,g+X *
-> j'ai mis des explications dans la page "permissions" de la doc.
Dernière modification par mohican (Le 22/05/2012, à 22:31)
mohican, plus tout à fait débutant sur Ubuntu
Ub 22.04 // Mint 21 Xfce // Mint 21 Cinnamon // Win7 SP1
Hors ligne