Re: Comment faire - set upload_tmp_dir to a non-world-readable directory
J'ai résolu ce problème. Pour le dossier non-world readable-writable j'ai utilisé : /var/www/tmp_pour_php Avec www-data:www-data Un chmod à 750 ( qui pourrait être 700, 740 mais je suppose également 1700, 1750, 1740 ... ) C'est du côté de PhpSecInfo que le test était trop limité, en n'autorisant que un dossier nommé /tmp Le correctif actuel autorise maintenant tout type de nommage pour le dossier tmp de PHP, SAUF, /tmp Dès lors, avec un dossier nommé /var/www/tmp_pour_php je remplis bien la condition. Le chmod 750 remplis la condition pour le non-world writable. Ce nouveau test est maintenant bien passé au vert lors du contrôle avec PhpSecInfo ! https://github.com/ZerooCool/phpsecinfo J'ai intégré le français par défaut dans les paramètres et commencé à traduire les chaînes de langue. La branche de développement qui a servie à fusionner la version 2007 + 2015 permet maintenant un total de 64 tests sur l'environnement PHP. https://github.com/ZerooCool/phpsecinfo/tree/phpsecinfo-zeroocool-v0.2.1 Si vous utilisez un autre programme pour tester votre environnement PHP, via Linux, ou, via un outil PHP, lequel est-ce ? Si PhpSecInfo intéresse quelqu'un, vous pouvez le tester en utilisant la nouvelle version v3.0.1 ci-dessous. La branche actuelle pour le développement passe en v3.0.1 et elle va inclure sous peu les correctifs de la version 2009. Ce sera donc la version la plus à jour pour le projet PhpSecInfo. https://github.com/ZerooCool/phpsecinfo/tree/phpsecinfo-zeroocool-v3.0.1 Une version v3.0.2 va encore inclure les correctifs de la version 2018, mais, la version de 2018 n'a pas intégrée les correctifs proposés en 2015 par BigDeej, et, elle ne propose alors que 13 à 15 tests sur PHP. C'est donc bien la version proposée en v3.0.1 qui sera la plus à jour et la mieux maintenue avec 64 tests PHP. La version à venir v3.0.2 intégrera la totalité des modifications effectuées sur les 3 dépôts PhpSecInfo identifiés depuis Github : 2009, 2015, 2018.
Re: Comment faire - set upload_tmp_dir to a non-world-readable directory
D'autres utilisateurs que www-data peuvent appartenir au groupe www-data. Il est possible que das ce cas l'outil trouve que c'est trop large parce que seul l'utilisateur www-data, sans exception, devrait pouvoir lire (il est le seul utilisateur censé créer et utiliser ces fichiers) . => 0700 Cordialement __ Éric Dégenètais Henix http://www.henix.com http://www.squashtest.org Le mer. 7 août 2019 à 17:29, G2PC a écrit : > > Mais, en attendant, sur le système debian, les droits sont de 1777 sur > les dossiers tmp /tmp et /var/tmp > > À noter, le 1 de départ, le sticky bit, qui veut dire que tout le monde peut > créer un fichier > mais que le fichier créé ne peut ensuite être modifié que par son proprio > (`man chmod` pour le > détail). > > > Dès lors, pourquoi le dossier /upload_tmp_dir pour php ne serait t'il > pas lui aussi en 1777 ? > > Tout le monde doit pouvoir écrire dans /tmp, c'est l'OS qui te met à dispo un > endroit où tu > peux écrire, mais pour php y'a aucune raison que qqun d'autre que php puisse > lire / écrire dans > un dossier qui lui est réservé. > > En général on met ce dossier en 700 ou 750, en mettant en proprio le user qui > fait tourner php > (ça dépend de ton installation de php). > > > Je vois, merci pour tes explications, ça semble logique. > Donc, dans mon cas, c'est www-data qui fait tourner PHP, avec Apache. > > Dès lors, je crée mon dossier dans /var/www/dossier_pour_tmp_php > chown www-data:www-data -R /var/www/dossier_pour_tmp_php/ > > chmod 750 -R /var/www/dossier_pour_tmp_php > > ( Ou éventuellement 1750 ? ) > > ça semble être acceptable comme conf ? Mais, alors, qu'en est t'il si > Joomla me crie une erreur rendant la page inaccessible ? > Je vais sur mon domaine, le site Joomla ne charge plus et affiche Error > Par contre, d'autres contenu sont accessibles ( domaine.ext/phpsecinfo/ ) > > Idem si je le met en 755. > Le site ne fonctionne que si je met les droits en 777 > > Après test, je me rend compte que je me trompe ! Le dossier temporaire > était donné à root:root > > Maintenant, il est bien donné à www-data:www-data en 750 et le site Joomla > est accessible ! > > > Par contre, depuis phpsecinfo j'ai toujours le message en orange, qui > considère les conditions comme non réalisées : > Notice > upload_tmp_dir is disabled, or is set to a common world-writable > directory. This typically allows other users on this server to access > temporary copies of files uploaded via your PHP scripts. You should set > upload_tmp_dir to a non-world-readable directory > > Current Value: /var/www/dossier_pour_tmp_php (0750) > Recommended Value: A non-world readable/writable directory > > > Pour ça, si vous utilisez PHP et que vous pensez que votre configuration > est fonctionnelle, merci de tester ce script, il suffit de le télécharger > https://github.com/ZerooCool/phpsecinfo/tree/phpsecinfo-zeroocool-v0.2.1 > > Le test est effectué ligne 71 : > > https://github.com/ZerooCool/phpsecinfo/blob/phpsecinfo-zeroocool-v0.2.1/20070406-phpsecinfo-v0.2.1/PhpSecInfo/Test/Core/upload_tmp_dir.php > > Merci de vos avis. >
Re: Comment faire - set upload_tmp_dir to a non-world-readable directory
>> Mais, en attendant, sur le système debian, les droits sont de 1777 sur >> les dossiers tmp /tmp et /var/tmp > À noter, le 1 de départ, le sticky bit, qui veut dire que tout le monde peut > créer un fichier > mais que le fichier créé ne peut ensuite être modifié que par son proprio > (`man chmod` pour le > détail). > >> Dès lors, pourquoi le dossier /upload_tmp_dir pour php ne serait t'il >> pas lui aussi en 1777 ? > Tout le monde doit pouvoir écrire dans /tmp, c'est l'OS qui te met à dispo un > endroit où tu > peux écrire, mais pour php y'a aucune raison que qqun d'autre que php puisse > lire / écrire dans > un dossier qui lui est réservé. > > En général on met ce dossier en 700 ou 750, en mettant en proprio le user qui > fait tourner php > (ça dépend de ton installation de php). Je vois, merci pour tes explications, ça semble logique. Donc, dans mon cas, c'est www-data qui fait tourner PHP, avec Apache. Dès lors, je crée mon dossier dans /var/www/dossier_pour_tmp_php chown www-data:www-data -R /var/www/dossier_pour_tmp_php/ chmod 750 -R /var/www/dossier_pour_tmp_php ( Ou éventuellement 1750 ? ) ça semble être acceptable comme conf ? Mais, alors, qu'en est t'il si Joomla me crie une erreur rendant la page inaccessible ? Je vais sur mon domaine, le site Joomla ne charge plus et affiche Error Par contre, d'autres contenu sont accessibles ( domaine.ext/phpsecinfo/ ) Idem si je le met en 755. Le site ne fonctionne que si je met les droits en 777 Après test, je me rend compte que je me trompe ! Le dossier temporaire était donné à root:root Maintenant, il est bien donné à www-data:www-data en 750 et le site Joomla est accessible ! Par contre, depuis phpsecinfo j'ai toujours le message en orange, qui considère les conditions comme non réalisées : Notice upload_tmp_dir is disabled, or is set to a common world-writable directory. This typically allows other users on this server to access temporary copies of files uploaded via your PHP scripts. You should set upload_tmp_dir to a non-world-readable directory Current Value: /var/www/dossier_pour_tmp_php (0750) Recommended Value: A non-world readable/writable directory Pour ça, si vous utilisez PHP et que vous pensez que votre configuration est fonctionnelle, merci de tester ce script, il suffit de le télécharger https://github.com/ZerooCool/phpsecinfo/tree/phpsecinfo-zeroocool-v0.2.1 Le test est effectué ligne 71 : https://github.com/ZerooCool/phpsecinfo/blob/phpsecinfo-zeroocool-v0.2.1/20070406-phpsecinfo-v0.2.1/PhpSecInfo/Test/Core/upload_tmp_dir.php Merci de vos avis.
Re: Comment faire - set upload_tmp_dir to a non-world-readable directory
Le 07/08/19 à 13:38, G2PC a écrit : > Mais, en attendant, sur le système debian, les droits sont de 1777 sur > les dossiers tmp /tmp et /var/tmp À noter, le 1 de départ, le sticky bit, qui veut dire que tout le monde peut créer un fichier mais que le fichier créé ne peut ensuite être modifié que par son proprio (`man chmod` pour le détail). > Dès lors, pourquoi le dossier /upload_tmp_dir pour php ne serait t'il > pas lui aussi en 1777 ? Tout le monde doit pouvoir écrire dans /tmp, c'est l'OS qui te met à dispo un endroit où tu peux écrire, mais pour php y'a aucune raison que qqun d'autre que php puisse lire / écrire dans un dossier qui lui est réservé. En général on met ce dossier en 700 ou 750, en mettant en proprio le user qui fait tourner php (ça dépend de ton installation de php). -- Daniel Un homme qui a réussi est un homme qui gagne plus d’argent que sa femme n’en dépense. Et une femme qui a réussi est une femme qui a trouvé un tel homme. Lana Turner
Re: Comment faire - set upload_tmp_dir to a non-world-readable directory
Le 07/08/2019 à 13:13, Daniel Caillibaud a écrit : > Le 07/08/19 à 12:49, G2PC a écrit : Avant toute chose, j'aimerais réellement trouver de l'information sur ce qu'est, officiellement, un dossier dit " A non-world readable/writable directory ". C'est un dossier dans lequel tout le monde ne peut pas lire/écrire, donc un chmod xx1 max. drwxrwx--x ^^^ le proprio peut lire / écrire / entrer ^^^ le groupe peut lire / écrire / entrer ^^^ les autres ne peuvent pas lire / écrire, seulement entrer >> - Donc tu dois faire un chmod 700 ou 750 ou ce que tu veux mais avec du xxy >> ou y vaut 0 ou 1 >> Daniel Caillibaud >> >> - Essaie `chmod 407` sur le répertoire temporaire. > Et pour trancher => `man chmod` > > > Un 407 ne devrait pas marcher puisque le proprio ne pourrait plus entrer dans > le dossier > mais que n'importe qui pourrait entrer, lire et écrire… > > Et ça parait curieux de refuser tous les droits au groupe et de les > accepter pour tout le monde, mais on peut faire ça pour justement donner > "tous les droits sauf > pour un groupe". > > Je pense que jm pensais au masque, le complémentaire, un masque de 407 > donnerait un chmod 370, > qui est curieux (moins de droits pour le proprio que le groupe) mais serait > d'équerre avec la > demande initiale de ne pas avoir de "world writable". > >> Une chose est sur c'est que si les droits du /tmp_upload >> pour les " autres " n'est pas égal à 7, Joomla me hurle dessus avec un >> message d'erreur. Je ne peux dès lors plus naviguer sur le CMS Joomla. > Donc Joomla n'est pas compatible avec des réglages de sécurité minimaux, mais > ça c'est pas une > nouvelle :-D (ça me surprend quand même, mais on en voit de belles tous les > jours) > > Car ce 7 signifie justement rwx pour "other", donc tout le monde peut > lire/écrire/entrer Mais, en attendant, sur le système debian, les droits sont de 1777 sur les dossiers tmp /tmp et /var/tmp Dès lors, pourquoi le dossier /upload_tmp_dir pour php ne serait t'il pas lui aussi en 1777 ?
Re: Comment faire - set upload_tmp_dir to a non-world-readable directory
Le 07/08/19 à 12:49, G2PC a écrit : > >> Avant toute chose, j'aimerais réellement trouver de l'information sur ce > >> qu'est, officiellement, un dossier dit " A non-world readable/writable > >> directory ". > > >> C'est un dossier dans lequel tout le monde ne peut pas lire/écrire, donc > >> un chmod xx1 max. > >> > >> drwxrwx--x > >> ^^^ le proprio peut lire / écrire / entrer > >> ^^^ le groupe peut lire / écrire / entrer > >>^^^ les autres ne peuvent pas lire / écrire, seulement entrer > > - Donc tu dois faire un chmod 700 ou 750 ou ce que tu veux mais avec du xxy > ou y vaut 0 ou 1 > Daniel Caillibaud > > - Essaie `chmod 407` sur le répertoire temporaire. > jm > > Bon, au final, vous vous contredisez, et, ça me rassure un peu, Tant mieux, c'est une très bonne illustration de l'adage "ne JAMAIS lancer une commande lue qq part sans comprendre ce que ça fait !" Et pour trancher => `man chmod` Un 407 ne devrait pas marcher puisque le proprio ne pourrait plus entrer dans le dossier mais que n'importe qui pourrait entrer, lire et écrire… Et ça parait curieux de refuser tous les droits au groupe et de les accepter pour tout le monde, mais on peut faire ça pour justement donner "tous les droits sauf pour un groupe". La règle est assez simple, pour un chmod xyz, x donne les droits du proprio, y ceux du groupe et z ceux pour tous les autres. La combinaison de droits se fait en additionnant 4 : r / lecture (read) 2 : w / modification (write), pour un dossier ça veut dire pouvoir le renommer/supprimer ou créer un fichier/dossier dedans 1 : x / exécution, pour un dossier ça signifie pouvoir entrer dedans donc ici le 407 donne : 4 : r-- pour le proprio 0 : --- pour le groupe 7 : rwx pour tous les autres Je pense que jm pensais au masque, le complémentaire, un masque de 407 donnerait un chmod 370, qui est curieux (moins de droits pour le proprio que le groupe) mais serait d'équerre avec la demande initiale de ne pas avoir de "world writable". > Une chose est sur c'est que si les droits du /tmp_upload > pour les " autres " n'est pas égal à 7, Joomla me hurle dessus avec un > message d'erreur. Je ne peux dès lors plus naviguer sur le CMS Joomla. Donc Joomla n'est pas compatible avec des réglages de sécurité minimaux, mais ça c'est pas une nouvelle :-D (ça me surprend quand même, mais on en voit de belles tous les jours) Car ce 7 signifie justement rwx pour "other", donc tout le monde peut lire/écrire/entrer -- Daniel Apprendre, pour Socrate, c'est se ressouvenir de ce qu'on a oublié. Platon
Re: Comment faire - set upload_tmp_dir to a non-world-readable directory
>> Avant toute chose, j'aimerais réellement trouver de l'information sur ce >> qu'est, officiellement, un dossier dit " A non-world readable/writable >> directory ". >> C'est un dossier dans lequel tout le monde ne peut pas lire/écrire, donc un >> chmod xx1 max. >> >> drwxrwx--x >> ^^^ le proprio peut lire / écrire / entrer >> ^^^ le groupe peut lire / écrire / entrer >>^^^ les autres ne peuvent pas lire / écrire, seulement entrer - Donc tu dois faire un chmod 700 ou 750 ou ce que tu veux mais avec du xxy ou y vaut 0 ou 1 Daniel Caillibaud - Essaie `chmod 407` sur le répertoire temporaire. jm Bon, au final, vous vous contredisez, et, ça me rassure un peu, ça ne semble pas évident pour tout le monde. Un "A non-world readable/writable directory " Une chose est sur c'est que si les droits du /tmp_upload pour les " autres " n'est pas égal à 7, Joomla me hurle dessus avec un message d'erreur. Je ne peux dès lors plus naviguer sur le CMS Joomla. La proposition de faire un 407 pourrait être plus adapté, je n'ai pas encore testé. Quoi qu'il en soit, j'invite les utilisateurs de PHP à tester ce script : https://github.com/ZerooCool/phpsecinfo/tree/phpsecinfo-zeroocool-v0.2.1 C'est la version de PhpSecInfo officielle, améliorée pour intégrer phpinfo() et la fin de ligne Unix sur les fichiers. Un simple wget sur votre serveur, pour observer ce qu'il vous dit sur les droits accordés à ce dossier Upload_tmp. Voir si du coup, vous êtes au vert, ou non ? Le premier qui passe au vert, sans message d'erreur, gagne une bière.
Re: Comment faire - set upload_tmp_dir to a non-world-readable directory
Le 02/08/19 à 22:41, G2PC a écrit : > Avant toute chose, j'aimerais réellement trouver de l'information sur ce > qu'est, officiellement, un dossier dit " A non-world readable/writable > directory ". Ben, c'est un dossier dans lequel tout le monde ne peut pas lire/écrire, donc un chmod xx1 max. drwxrwx--x ^^^ le proprio peut lire / écrire / entrer ^^^ le groupe peut lire / écrire / entrer ^^^ les autres ne peuvent pas lire / écrire, seulement entrer Donc tu dois faire un chmod 700 ou 750 ou ce que tu veux mais avec du xxy ou y vaut 0 ou 1 -- Daniel R: Parce que ça renverse bêtement l'ordre naturel de lecture ! Q: Mais pourquoi citer en fin de message est-il si effroyable ? R: Répondre au dessus de la citation Q: Quelle est la chose la plus désagréable dans un message ?
Re: Comment faire - set upload_tmp_dir to a non-world-readable directory
Bonjour, Le vendredi 02 août 2019, G2PC a écrit... > Si je echo $perms, $perms vaut 17407. > mon chmod lui est de 1777 sur le dossier tmp. Essaie `chmod 407` sur le répertoire temporaire. -- jm
Re: Comment faire - set upload_tmp_dir to a non-world-readable directory
> Merci pour ton retour. > J'ai pris note de ta proposition. > https://github.com/ZerooCool/phpsecinfo/issues/6 > > Je vais voir à avancer ça. Avant toute chose, j'aimerais réellement trouver de l'information sur ce qu'est, officiellement, un dossier dit " A non-world readable/writable directory ". Si on considère l'exemple du dossier système /tmp, il est considéré comme world readable/writable d'après un tutoriel que j'ai survolé. Son CHMOD est 1777. Si je remplace la syntaxe && ! par &&, le test réussi. Pas sur que ce soit la bonne façon de faire, je dois vérifier avec les autres tests qui fonctionnent. Si je echo $perms, $perms vaut 17407. Mon CHMOD lui est de 1777 sur le dossier tmp. La demande de vérification pour un dossier non-world reste affichée même si le test (semble) fonctionner (Lorsque j'enlève les points d'exclamation.). Le dossier ne peut pas être vérifié pour savoir si il est non-world ?
Re: Comment faire - set upload_tmp_dir to a non-world-readable directory
Le 02/08/2019 à 15:42, Jean-Michel OLTRA a écrit : > https://github.com/funkatron/phpsecinfo/blob/master/PhpSecInfo/Test/Core/upload_tmp_dir.php > > La méthode qui fait le test s'appelle _exec_Test et c'est ligne 65 > > Là, tu peux mettre du débogage et loguer $perms pour voir quelle valeur est > réellement prise en compte par cette fonction fileperms() que je n'ai pas > regardée. > Ainsi, tu auras une idée de pourquoi la série de tests lignes 69 à 72 > échoue. Merci pour ton retour. J'ai pris note de ta proposition. https://github.com/ZerooCool/phpsecinfo/issues/6 Je vais voir à avancer ça.
Re: Comment faire - set upload_tmp_dir to a non-world-readable directory
Bonjour, Le vendredi 02 août 2019, G2PC a écrit... > Il faudrait que je regarde les 3 projets 2009 / 2015 / 2019 pour voir si > le fichier de ce test, concernant le dossier upload_tmp_dir, a été mis à > jour. > N'hésitez pas à tester ce paquet, il ne nécessite aucune installation, > il s'uffit de télécharger l'archive sur le serveur. > C'est un équivalent à phpinfo() en très simpliste, qui se concentre sur > certaines valeurs propres à PHP. J'ai regardé, très vite fait, car je suis plus Java que Php. https://github.com/funkatron/phpsecinfo/blob/master/PhpSecInfo/Test/Core/upload_tmp_dir.php La méthode qui fait le test s'appelle _exec_Test et c'est ligne 65 Là, tu peux mettre du débogage et loguer $perms pour voir quelle valeur est réellement prise en compte par cette fonction fileperms() que je n'ai pas regardée. Ainsi, tu auras une idée de pourquoi la série de tests lignes 69 à 72 échoue. Si tu as une version différente, tu dois pouvoir trouver l'équivalent. -- jm
Re: Comment faire - set upload_tmp_dir to a non-world-readable directory
>> upload_tmp_dir is disabled, or is set to a common world-writable >> directory. This typically allows other users on this server to access >> temporary copies of files uploaded via your PHP scripts. You should set >> upload_tmp_dir to a non-world-readable directory >> Current Value: /var/www/temporaire_php (0755) >> Recommended Value: A non-world readable/writable directory > Avec 755 il n'est pas non-world-readable, tu dois bien t'en douter. Oui, mais, c'est pas si évident que ça, car, j'ai tenté aussi 1777, la valeur que j'ai pu identifier sur les /tmp et /var/tmp par défaut. Effectivement, je me suis fais cette réflexion que ça ne semblait dans mon cas, pas un non-world readable. >> J'ai testé différents CHMOD : >> 0700 / 1700 / 0007 / 1007 > À 700, il devrait l'être. As tu eu des erreurs quelconques lorsque tu as > passé ton répertoire en 700 ? Pas d'erreur directement dans les logs, ni même de comportement étranges à l'usage du site, mais, c'est depuis PhpSecInfo que le test ne passe pas au vert. PhpSecInfo n'est pas si récent. J'ai découvert que c'était un projet PHP de l'Université de Purdue ( Connue pour un de ses universitaire notamment, Ian Murdock ) qui avait été présenté à un consortium de sécurité, en 2007. La version officielle n'est plus maintenue et le site également, depuis 2012. On retrouve sur le site, la version de 2007. Le deuxième développeur de cette version 2007, aura ouvert un dépôt Github et poussé des correctifs jusqu'en 2009. J'ai vu qu'en parallèle le projet de 2007 avait évolué vers une versions alternative mise à jour jusqu'en 2015. Un autre projet encore a utilisé la version de 2007 il me semble, pour proposé une version alternative en 2018/2019 mais avec très peu de correctifs. J'ai déposé ses quatre versions sur le dépôt suivant. https://github.com/ZerooCool/phpsecinfo J'utilise actuellement la version de 2007, qui était à l'origine conçue pour php4 / php5. Il se peut parfaitement que ce soit ce programme PHP qui ne sache pas, ne sache plus, ou, n'ai jamais su correctement identifier si oui ou non le dossier est non-world readable. Le problème, c'est que la définition n'est pas claire ! On ne sait clairement pas ce qui est attendu ! Un 700 ? Un 1700 ? Ou, d'autres umask avec lesquels je ne serais pas familiarisé ? Il faudrait que je regarde les 3 projets 2009 / 2015 / 2019 pour voir si le fichier de ce test, concernant le dossier upload_tmp_dir, a été mis à jour. N'hésitez pas à tester ce paquet, il ne nécessite aucune installation, il s'uffit de télécharger l'archive sur le serveur. C'est un équivalent à phpinfo() en très simpliste, qui se concentre sur certaines valeurs propres à PHP. Merci de vos avis complémentaires.
Re: Comment faire - set upload_tmp_dir to a non-world-readable directory
Bonjour, Le vendredi 02 août 2019, G2PC a écrit... > upload_tmp_dir is disabled, or is set to a common world-writable > directory. This typically allows other users on this server to access > temporary copies of files uploaded via your PHP scripts. You should set > upload_tmp_dir to a non-world-readable directory > Current Value: /var/www/temporaire_php (0755) > Recommended Value: A non-world readable/writable directory Avec 755 il n'est pas non-world-readable, tu dois bien t'en douter. > J'ai testé différents CHMOD : > 0700 / 1700 / 0007 / 1007 À 700, il devrait l'être. As tu eu des erreurs quelconques lorsque tu as passé ton répertoire en 700 ? -- jm