sélectionner tout sauf, le contraire de * ?

Bonjour, je voudrais modifier des droits en -R mais pas à tout les sous fichiers, il y à t-il une syntaxe pour ignorer par nom ou par extension?

Merci.

Salut,

Par définition -R = récursif.

Bonjour,

Regarde la commande find, elle permet de rechercher des fichiers sur des critères.

Perso je verrais bien un petit script qui déplacerait les fichiers ayant l’ extension ou le nom commençant par… puis modifierait les droits des fichiers restants et enfin remettrait les autres à leur place dans le repertoire.

Allez, trêve de plaisanterie, :033 en espérant avoir attiser ta curiosité … :083

Ces quelques liens vont répondre à tes questions … :033

doc.ubuntu-fr.org/tutoriel/conso … _de_base?s[]=mount#chmod

lea-linux.org/documentations … ermissions

lea-linux.org/documentations … on_des_ACL

linux.developpez.com/acls/

fr.wikipedia.org/wiki/Access_Control_List

okki666.free.fr/docmaster/articles/linux100.htm

commentcamarche.net/contents … inusr.php3

debian-fr.org/droits-des-dos … 34208.html

Bonne lecture … :wink:

Bonne blague, c’est le 1 er avril ?
tout sauf tout ? hihihi

rm toto ? :033

Je ferais un listage récursif, le piperais dans un grep -v le motif à exclure que je piperais lui aussi dans un xargs chown,
mais find convient peut-être mieux.

C’est faisable avec des bash des condition if dans tout les sens est des finds au millieu…

Voilà à quoi j’ai pensé - parce-que à la base c’est apache qui fait tout le boulo^^

Donc tout lers fichiers on été crées par fopen w+ avec www-data come user et group.

shell_exec('chmod -R 770 ' . $path_serv . '*'); 			         //tout les droits à www-data, groupe www-data	
	
shell_exec('chown -R www-data:ftpgroup ' . $path_serv . '*'); 	//proprio de tout les fichiers www-data et groupe ftpuser
shell_exec('chown -R root:www-data ' . $path_serv . '*.php');	//proprio des pages php root et groupe www-data
				
//on redescend touts les droits à un niveau normal
				
shell_exec('chmod -R 750 ' . $path_serv . '*.php'); //pages web				
shell_exec('chmod -R 700 ' . $path_serv . '*.txt');  // fichiers a exclurent des acces FTP								
shell_exec('chmod -R 700 ' . $path_serv . 'server.properties');	
shell_exec('chmod -R 700 ' . $path_serv . 'server.log');			
shell_exec('chmod -R 700 ' . $path_serv . 'minecraft_server.jar');				
				
//les autres fichiers générés par les plugins, ou la map sont en 770 - modifiables par ftp

Voilà ça devrais fonctionner, tout les droits sont bon mais mes utilisateur/groupes ne changent pas avec les chown…

Dans l’autre sens, en mode script:

(chown -R www-data:ftpgroup ‘’ && chmod -R 770 '’) if le résultat de find est différent de *.txt && *.php && etc…

Voilà mais je vois pas comment tourner ça dans l’autre sens.

EDIT: par rapport au message précédentt: utiliser la combinaison de find et de grep ? et faire un if (find != grep mes fichiers?)

Un script sera bien moins lourd n’est-ce pas?

Merci.

J’ai essayer pas mal de choses, dont la commande chown php qui fonctionne bien, mais pas chgrp.

malgré ça dans sudoers:

www-data ALL = NOPASSWD: /bin/chown 1[1-9][0-9][0-9]:1[1-9][0-9][0-9] /var/www/serveurs/[a-zA-Z0-9]*
www-data ALL = NOPASSWD: /bin/chgrp 1[1-9][0-9][0-9]:1[1-9][0-9][0-9] /var/www/serveurs/[a-zA-Z0-9]*
www-data ALL = NOPASSWD: /var/www/serveurs/rights.sh

D’après la doc le chgrp ne fonctionne pas de toute façon, c’est dommage mais de toute façon ça accepte que avec www-data comme user donc y’a vitre moins d’intérêt…

Après voilà mon rights.sh :

[code]chmod -R 770 * #tout les droits à www-data, groupe www-data

chown -R www-data:ftpgroup * #proprio de tout les fichiers www-data et groupe ftpuser
chown -R root:www-data *.php #proprio des pages php root et groupe www-data

#on redescent touts les droits à un niveau normal

chmod -R 750 *.php
chmod -R 700 *.txt
chmod -R 700 *.sh
chmod -R 700 server.properties
chmod -R 700 server.log
chmod -R 700 minecraft_server.jar

#les autres fichiers générés par les plugins, ou la map sont en 770 - modifiables par ftp
[/code]
J’ai jamais vraiment capter les commandes exec ou shell_exec, quel est la bonne syntaxe? :

exec("/var/www/serveurs/rights.sh");
exec("/var/www/serveurs/./rights.sh");
exec("./var/www/serveurs/rights.sh");

et même questions avec shell_exec(…)

J’ai trouver la solution avec sudo:

sudoers: www-data ALL=NOPASSWD: /bin/chown -R www-data:ftpgroup /var/www/serveurs/[a-zA-Z0-9]*

PHP:

$path_serv = ‘/var/www/serveurs/’ . $uniqueid . ‘/’;

exec('sudo /bin/chown -R www-data:ftpgroup ’ .$path_serv);

J’aimerai rééditer l’exploit avec screen mais j’y arrive pas, voilà ce que j’ai essayer:

ce que je veut executer en PHP: exec(‘sudo /usr/bin/screen -dmS ’ . $uniqueid . ’ -s exec java -Xms128M -Xmx960M -jar minecraft_server.jar nogui’);

combinaisons testées dans sudoers:

www-data ALL=NOPASSWD: /usr/bin/screen -dmS [a-zA-Z0-9] -s exec java -Xms[0-9]M -Xmx[0-9]M -jar minecraft_server.jar nogui
www-data ALL=NOPASSWD: /usr/bin/screen -dmS [a-zA-Z0-9]*
www-data ALL=NOPASSWD: /usr/bin/screen -dmS *
www-data ALL=NOPASSWD: /usr/bin/screen *

Mon log d’Apache:

[sudo] password for www-data:
[sudo] password for www-data:
Sorry, try again.
sudo: 3 incorrect password attempts

pour apache et php, je ne pourrais pas t’aider, je n’y connais rien, par contre je peux t’aider concernant find au niveau du shell bash

Pour t’aider à y voir + clair avec cette commande compliqué, j’ai construit le petit exemple suivant :

pwd /home/seb-deb/www-data

find . ./server.log ./titi.sh ./server.properties ./minecraft_server.jar ./toto.sh ./titi.txt ./rep.test ./fic.test ./toto.txt

[code]find -ls
737586 4 drwxr-x–x 3 seb-deb seb-deb 4096 févr. 10 19:34 .
737592 0 -rw-r----- 1 seb-deb seb-deb 0 févr. 10 17:57 ./server.log
737589 0 -rw-r----- 1 seb-deb seb-deb 0 févr. 10 17:57 ./titi.sh
737591 0 -rwx------ 1 seb-deb seb-deb 0 févr. 10 17:57 ./server.properties
737593 0 -rw-r----- 1 seb-deb seb-deb 0 févr. 10 17:58 ./minecraft_server.jar
737590 0 -rw-r----- 1 seb-deb seb-deb 0 févr. 10 17:57 ./toto.sh
737588 0 -rw-r----- 1 seb-deb seb-deb 0 févr. 10 17:56 ./titi.txt
737594 4 drwxr-x–x 2 seb-deb seb-deb 4096 févr. 10 19:32 ./rep.test
737595 0 -rw-r----- 1 seb-deb seb-deb 0 févr. 10 19:34 ./fic.test
737587 0 -rw-r----- 1 seb-deb seb-deb 0 févr. 10 17:56 ./toto.txt

[/code]
Maintenant essayons de selectionner des fichiers avec des expressions, par exemple tous les fichiers ‘*.sh’

find -name '*.sh' ./titi.sh ./toto.sh
Bon ça marche, tentons maintenant d’appliquer des actions sur ces fichiers, en l’occurence je ne ferais qu’un echo “chmod 700” le noms de des fichiers trouvé :

find -name '*.sh' -exec echo "chmod 700" '{}' \; chmod 700 ./titi.sh chmod 700 ./toto.sh
ça à l’air de fonctionner, et on pourrait remplacer le echo “chmod 700” par chmod 700 sans rien changer à la suite, ça marcherai, mais restons avec le echo et décidons que le veuille ajouter à cette liste les fichiers ‘*.txt’ par exemple :

find -name '*.sh' -o -name '*.txt' -exec echo "chmod 700" '{}' \; chmod 700 ./titi.txt chmod 700 ./toto.txt
Ben on voit que l’on a perdu les ‘*.sh’ que l’on voulait pourtant, une bonne lecture du man de find me permet d’améliorer ça de la façon suivante :

find \( -name '*.sh' -o -name '*.txt' \) -exec echo "chmod 700" '{}' \; chmod 700 ./titi.sh chmod 700 ./toto.sh chmod 700 ./titi.txt chmod 700 ./toto.txt
Haha ! cette fois-ci en rendant l’ensemble de l’expression prioritaire par rapport aux actions que l’on souhaite exécuter sur les fichiers selectionnées, ya du progrés !

Continuons donc ! et selectionnons tous les fichiers sauf .

find \( -name '*.sh' -o -name '*.txt' -o -name '*.log' -o -name '*.properties' -o -name '*.jar' -o -name '*.test' \) -exec echo "chmod 700" '{}' \; chmod 700 ./server.log chmod 700 ./titi.sh chmod 700 ./server.properties chmod 700 ./minecraft_server.jar chmod 700 ./toto.sh chmod 700 ./titi.txt chmod 700 ./rep.test chmod 700 ./fic.test chmod 700 ./toto.txt
Hè bien c’est pas si mal, mais disons que je ne veux selectionner aucun repertoire ( donc je ne vaux pas du rep.test ), alors je dois rajouter encore cela :

find \( -name '*.sh' -o -name '*.txt' -o -name '*.log' -o -name '*.properties' -o -name '*.jar' -o -name '*.test' \) -type f -exec echo "chmod 700" '{}' \; chmod 700 ./server.log chmod 700 ./titi.sh chmod 700 ./server.properties chmod 700 ./minecraft_server.jar chmod 700 ./toto.sh chmod 700 ./titi.txt chmod 700 ./fic.test chmod 700 ./toto.txt
ça marche, on aurait put aussi écrire ! -type d de la façon suivante :

find \( -name '*.sh' -o -name '*.txt' -o -name '*.log' -o -name '*.properties' -o -name '*.jar' -o -name '*.test' \) \! -type d -exec echo "chmod 700" '{}' \; chmod 700 ./server.log chmod 700 ./titi.sh chmod 700 ./server.properties chmod 700 ./minecraft_server.jar chmod 700 ./toto.sh chmod 700 ./titi.txt chmod 700 ./fic.test chmod 700 ./toto.txt
Et maintenant vérifions que tout ça fonctionne vraiment :

find -ls 737586 4 drwxr-x--x 3 seb-deb seb-deb 4096 févr. 10 19:34 . 737592 0 -rw-r----- 1 seb-deb seb-deb 0 févr. 10 17:57 ./server.log 737589 0 -rw-r----- 1 seb-deb seb-deb 0 févr. 10 17:57 ./titi.sh 737591 0 -rwx------ 1 seb-deb seb-deb 0 févr. 10 17:57 ./server.properties 737593 0 -rw-r----- 1 seb-deb seb-deb 0 févr. 10 17:58 ./minecraft_server.jar 737590 0 -rw-r----- 1 seb-deb seb-deb 0 févr. 10 17:57 ./toto.sh 737588 0 -rw-r----- 1 seb-deb seb-deb 0 févr. 10 17:56 ./titi.txt 737594 4 drwxr-x--x 2 seb-deb seb-deb 4096 févr. 10 19:32 ./rep.test 737595 0 -rw-r----- 1 seb-deb seb-deb 0 févr. 10 19:34 ./fic.test 737587 0 -rw-r----- 1 seb-deb seb-deb 0 févr. 10 17:56 ./toto.txt
testons :

On vérifie que ça a marché :

find -ls 737586 4 drwxr-x--x 3 seb-deb seb-deb 4096 févr. 10 19:34 . 737592 0 -rwx------ 1 seb-deb seb-deb 0 févr. 10 17:57 ./server.log 737589 0 -rwx------ 1 seb-deb seb-deb 0 févr. 10 17:57 ./titi.sh 737591 0 -rwx------ 1 seb-deb seb-deb 0 févr. 10 17:57 ./server.properties 737593 0 -rwx------ 1 seb-deb seb-deb 0 févr. 10 17:58 ./minecraft_server.jar 737590 0 -rwx------ 1 seb-deb seb-deb 0 févr. 10 17:57 ./toto.sh 737588 0 -rwx------ 1 seb-deb seb-deb 0 févr. 10 17:56 ./titi.txt 737594 4 drwxr-x--x 2 seb-deb seb-deb 4096 févr. 10 19:32 ./rep.test 737595 0 -rwx------ 1 seb-deb seb-deb 0 févr. 10 19:34 ./fic.test 737587 0 -rwx------ 1 seb-deb seb-deb 0 févr. 10 17:56 ./toto.txt
ça marche bien ! on ne veut + que le droit en lecture pour le proprio ?

on vérifie :

find -ls 737586 4 drwxr-x--x 3 seb-deb seb-deb 4096 févr. 10 19:34 . 737592 0 -r-------- 1 seb-deb seb-deb 0 févr. 10 17:57 ./server.log 737589 0 -r-------- 1 seb-deb seb-deb 0 févr. 10 17:57 ./titi.sh 737591 0 -r-------- 1 seb-deb seb-deb 0 févr. 10 17:57 ./server.properties 737593 0 -r-------- 1 seb-deb seb-deb 0 févr. 10 17:58 ./minecraft_server.jar 737590 0 -r-------- 1 seb-deb seb-deb 0 févr. 10 17:57 ./toto.sh 737588 0 -r-------- 1 seb-deb seb-deb 0 févr. 10 17:56 ./titi.txt 737594 4 drwxr-x--x 2 seb-deb seb-deb 4096 févr. 10 19:32 ./rep.test 737595 0 -r-------- 1 seb-deb seb-deb 0 févr. 10 19:34 ./fic.test 737587 0 -r-------- 1 seb-deb seb-deb 0 févr. 10 17:56 ./toto.txt
ça marche bien, find est compliquée c’est sûr, mais on peut difficilement passer à coté à mon avis

Et oui, on peut “sélectionner tout sauf, le contraire d’un motif” particulier,
mais je ne parles que du shell bash, pas de php ni apache etc … bon courage.