Aller au contenu

Débrider PHP sur un dédié


renaud63

Sujets conseillés

Bonjour à tous,

Sur mon serveur dédié Linux / PLesk 8.3 (qui n'héberge que mes sites), je voudrais "débrider" les fonctions php...c'est à dire pouvoir utiliser les fonctions dites "dangereuses" qui sont souvent interdites sur les mutus pour des raisons de sécurité : par exemple exec(), chmod(), readfile(), mkdir() et autres...tout en laissant le safe_mode à On.

Je suis allé voir dans le php.ini et :

disable_functions = 
;open_basedir =

Donc ça doit être ailleurs... oui mais où ?

Mon test porte sur la fonction chmod("dossier", 0777) qui ne fonctionne pas chez moi, mais ailleurs oui.

chmod() [function.chmod]: Operation not permitted.....

Je sais que c'est une question de droits d'utilisateur...mais comment le modifier ?

Si quelqu'un a une idée, je suis preneur et merci d'avance.

Modifié par renaud63
Lien vers le commentaire
Partager sur d’autres sites

Elles ne sont pas bridées par défaut, en tout cas pas sur une installation standard. Je ne sais pas pour Plesk par contre...

Lien vers le commentaire
Partager sur d’autres sites

Merci de ta réponse...

Je n'ai vu nulle part, sur plesk, quelque chose qui ressemble à "config php" ou dans le genre...

Je vais devoir aller dans le camboui, mais j'aimerais savoir où...

Tu sais, éviter les warning du genre open_basedir restriction in effect...

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

@ Dan : je vais faire des recherches sur la config PHP depuis Plesk... parce que fouillé partout dans l'admin et rien vu.

Dans Ce post, tu dis :

C'est vraisemblablement parce que ton hébergeur a désactivé cette fonction.

Ben c'est justement ce qui m'interesse...mais le contraire.

@ Marc: question idiote : le php.ini que tu m'indiques... en quoi est il différent de celui qui est dans /etc/ ? Lequel modifier ?

phpinfo me dit : /etc/php.ini

ils ont l'air d'être configurés idem... et notamment :

; open_basedir, if set, limits all file operations to the defined directory
; and below. This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
;open_basedir =

; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
disable_functions =

Faut-il passer open_basedir à On ?

Je précise que je veux faire ces modifs pour tout le serveur, et non pas site par site avec un vhost.conf, puisque je ne suis pas hébergeur (et heureusement, hein... :D )

Modifié par renaud63
Lien vers le commentaire
Partager sur d’autres sites

Salut,

Plusieurs pistes pour t'aider :

- As tu le safe_mode a on coche par defaut lorsque tu cree ton domaine sous plesk (je n'ai pas encore tester de le desactiver perso) ?

- Pour ton php.ini, si tu modifies dans /etc, les modifications seront effectives sur tous tes sites (normal puisque c'est le fichier de conf du moteur php).

- Pour le php.in que _AT_Marc t'as indique, les modifications de ce fichier n'affecteront que les sites que tu creeras avec Plesk, et UNIQUEMENT ces sites (En fait Plesk se base sur ce fichier et ajoute des directives dans le fichier /var/www/vhosts/tondomaine/conf/httpd.include).

Donc dans ton cas, soit la 2eme ou 3eme solution, tout depend de ton utilisation. Si tu utilises uniquement Plesk, la solution de _AT_Marc est la meilleure. (Verifie dans ton dossier conf de ton domaine pour voir si tes modifs ont ete ajoutees).

Voila, en esperant t'aider un minimum.

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Bonjour et merci pour ces précisions.

Alors: je suis allé modifier le etc/php.ini et passé le safe mode à On.

Le phpinfo() me dit maintenant :

safe_mode Off Off 
safe_mode_exec_dir no value no value
safe_mode_gid Off Off

Et pourtant, sur une page test :

Warning: mkdir() [function.mkdir]: Permission denied

et aussi

Warning: chmod() [function.chmod]: Operation not permitted in

Je deviens fou !!!

Modifié par renaud63
Lien vers le commentaire
Partager sur d’autres sites

Tu dis que tu passes le Safe Mode à On ... et le Phpinfo le montre à off !

Il ne faut pas l'activer (mettre à on) sinon quantité de fonctions seront inaccessibles (dont mkdir et chmod)

http://fr.php.net/manual/en/features.safe-mode.functions.php

Recherche dans Plesk, vraisemblablement dans Domaines->Cliquer sur le domaine->Setup (ou équivalent en français) . Il doit être activé pour ton domaine.

Dan

PS: je n'ai pas Plesk sous la main et ne suis certainement pas expert en Plesk, mais tu dois pouvoir activer/désactiver le safe mode par domaine. Idem pour open_basedir.

Lien vers le commentaire
Partager sur d’autres sites

Il faut tout de même aller changer cela sous Plesk ... voir mon post précédent.

A mon avis, Plesk doit modifier les httpd.conf des domaines en ce sens (et l'activer par défaut?)

Lien vers le commentaire
Partager sur d’autres sites

J'ai bien sûr suivi ton conseil... dans domaines/le domaine/config/ la coche safe mode est bien décochée !

J'ai regardé si on pouvait le faire pour tout le serveur, mais rien trouvé...

Le prob se situe peut être dans le httpd.conf...mais comme tu dis, je crois que Plesk le remet par défaut à la moindre modif.

J'ai vu aussi qu'on pouvait utiliser un vhost.conf et lui donner des directives "stables", mais je n'ai pas trop capté où le mettre et comment l'écrire...

Prise en charge de PHP  ('safe_mode' de PHP activé )

Lien vers le commentaire
Partager sur d’autres sites

Pour le fichier vhost.conf, il faut que tu le place dans /var/www/vhosts/tondomain/conf/

Tu met ceci a l'interieur de ton fichier :

<Directory /var/www/vhosts/tondomain/httpdocs>
php_admin_value safe_mode off
php_admin_value open_basedir none
</Directory>

Et tu reconstruit tes fichiers de conf avec la commmande suivante :

/usr/local/psa/admin/sbin/websrvmng -u --vhost-name=tondomain

Il faudra alors le faire pour chaque domain. Si tu a plusieurs domain a gerer, tu creer un vhost.conf pour chaque et au lieu d'utiliser la commande ci-dessus, tu peux utiliser celle ci :

/usr/local/psa/admin/sbin/websrvmng -a

qui va regenerer tous tes fichiers de conf

Lien vers le commentaire
Partager sur d’autres sites

Merci à toi rdd, j'ai suivi tes consignes à la lettre, mais, 3 fois hélas, ma page de test affiche toujours les warning pour les fonctions chmod et mkdir : permission denied.

C'est quand même un truc de fou furieux !

Lien vers le commentaire
Partager sur d’autres sites

Question bête : où as tu vu que le chmod() et le mkdir() étaient bloqués à cause du safe_mode ?

Il faudrait les lire les messages d'erreur en entier, mais tu ne nous en as mis que le début...

Du coup ça pourrait être un "simple" problème de droits unix, et non une restriction du safe_mode ou de l'open_basedir.

Modifié par Kioob
Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Et bien, en fait, j'ai lu un peu partout sur le net que le safe mode à Off rendait toutes les fonctions exécutables...

Les messages d'erreurs sont ceux que j'ai indiqués avec le chemin en plus :

Warning: chmod() [function.chmod]: Operation not permitted in /var/www/vhosts/vt-boutique-net.com/httpdocs/boutique/installer.php on line 254
Warning: mkdir() [function.mkdir]: Permission denied in /var/www/vhosts/vt-boutique-net.com/httpdocs/boutique/installer.php on line 8

Effectivement j'ai aussi vu des problèmes de droits groups/users.... mais en tant qu'admin du serveur, comment et où je peux déclarer ça pour chaque site ?

Dans le httpd.conf, j'ai :

User apache
Group apache

Faut il que je me déclare quelque part group et user (avec un vhost.conf au même niveau que httpd.conf ?) pour tout le serveur, puis qu'ensuite j'aille également mettre ces données dans les vhost de chaque domaine ?

Modifié par renaud63
Lien vers le commentaire
Partager sur d’autres sites

Quand il s'agit d'une restriction du safe_mode ou bien d'open_basedir c'est généralement clairement indiqué dans le message d'erreur.

Là il s'agit vraiment d'erreurs "unix" classiques : pour pouvoir faire un chmod sur un fichier (ou dossier), il faut soit être root (ce qui n'est pas le cas là, ton PHP tournant sous le compte apache) soit être propriétaire du fichier en question. Si c'est un fichier uploadé par FTP le propriétaire n'est pas Apache non plus ; chmod ne sera utilisable que sur les fichiers créés via PHP.

Quant à mkdir il faut avoir les droits d'écriture dans le dossier supérieur pour pouvoir y créer un dossier.

Bref, je ne suis pas certain de savoir ce que tu cherchais à faire, mais pour ton chmod à priori c'est à toi de le faire manuellement via FTP, ce qui te permettra ensuite de faire le mkdir via PHP.

Et ré-active le safe_mode et l'open_basedir, tu as retiré la seule protection des environnement configurés via Plesk :D

Modifié par Kioob
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

hummm... oui c'est sûr, je pourrais faire les chmods à la main...mais sur 100 sites c'est un peu fastidieux, lol. En fait, j'installe des boutiques clés en main, toutes les mêmes, et je voudrais automatiser la procédure d'install. Donc chmod(), tu vois, c'est un peu indispensable.

Quant à mkdir, mes scripts en ont besoin. Si je remets safe mode à On, fini les unlink(), les fopen() et autres fonctions indispensables...

Et puis, je loue un dédié... c'est pas pour m'emm... comme sur un mutu.

D'ailleurs, je suis étonné de constater que sur 1 and 1 (qui vaut ce qu'il vaut, là n'est pas la question), un hébergement mutu lambda à 9/mois donne ceci au niveau du phpinfo() :

safe_mode Off Off 
safe_mode_exec_dir /usr/local/php/bin /usr/local/php/bin
safe_mode_gid Off Off

Et dans cette formule de base, chmod, mkdir, unlink et toute la bande des "dangereuses" tournent comme sur des roulettes...

Pourquoi moi, je peux pas faire pareil ???

Lien vers le commentaire
Partager sur d’autres sites

Si c'est une erreur de droit ou juste de group user, tu peux deja essayer de faire un test pour voir.

Tu vas dans /var/www/vhosts/vt-boutique-net.com et tu fais un ls -l dans ce rep.

Tu recuperes alors ton user et group qui s'affiche pour le httpdocs.

Ensuite tu tapes dans ton shell en tant que root :

chown -R userhttpdocs:grouphttpdocs httpdocs

userhttpdocs et grouphttpdocs seront bien sur les resultats de ton ls -l.

Et retest pour voir si ca donne quelque chose.

Paste aussi ce que te donne le ls -l au dessus.

Test aussi un petit

chmod -R 775 boutique dans ton dossier httpdocs

si jamais ca ne fonctionne toujours pas.

Lien vers le commentaire
Partager sur d’autres sites

Encore merci...

dans le shell, cette commande /var/www/vhosts/vt-boutique-net.com me répond :

   
-bash: /var/www/vhosts/vt-boutique-net.com: is a directory

et idem pour /var/www/vhosts/vt-boutique-net.com/httpdocs

ls -l ne serait pas la bonne commande ?

Lien vers le commentaire
Partager sur d’autres sites

Pardon je ne t'ai pas mis la premiere commande a taper donc je recapitule dans l'ordre :rolleyes:

cd /var/www/vhosts/vt-boutique-net.com
ls -l

Tu recuperes alors ton user et group qui s'affiche pour le httpdocs.

chown -R userhttpdocs:grouphttpdocs httpdocs
cd httpdocs
chmod -R 775 boutique

(En faisant les 2 commandes on sera sur)

Modifié par rdd
Lien vers le commentaire
Partager sur d’autres sites

hummm... oui c'est sûr, je pourrais faire les chmods à la main...mais sur 100 sites c'est un peu fastidieux, lol. En fait, j'installe des boutiques clés en main, toutes les mêmes, et je voudrais automatiser la procédure d'install. Donc chmod(), tu vois, c'est un peu indispensable.

Il s'agit là d'une sécurité UNIX, donc soit tu fais la modif depuis le compte root soit tu le fais par FTP, mais tu n'aurais guère plus de solutions.

Quant à mkdir, mes scripts en ont besoin. Si je remets safe mode à On, fini les unlink(), les fopen() et autres fonctions indispensables...

Ca n'a absolument aucun rapport. mkdir(), unlink(), fopen() et toutes les fonctions de manipulation de fichiers fonctionnent parfaitement en safe_mode, y compris avec open_basedir actif.

Et puis, je loue un dédié... c'est pas pour m'emm... comme sur un mutu.

Si tu veux conserver un minimum de sécurité, il faut que l'utilisateur exécutant les scripts soit différent de l'utilisateur propriétaire des scripts... et ça, peu importe le modèle choisi (mod_php, fastcgi+suexec, ou suphp).

Après tu peux évidement t'assoir sur l'aspect sécurité et faire sauter ça...

D'ailleurs, je suis étonné de constater que sur 1 and 1 (qui vaut ce qu'il vaut, là n'est pas la question), un hébergement mutu lambda à 9/mois donne ceci au niveau du phpinfo() :

Comme la plupart des hébergeurs mutualisés d'assez grosse taille, ils sont certainement en FastCGI + suExec, ce qui est généralement plus sécurisé que le "mod_php" classique.

Et dans cette formule de base, chmod, mkdir, unlink et toute la bande des "dangereuses" tournent comme sur des roulettes...

Pourquoi moi, je peux pas faire pareil ???

Parce que tu ne cherches pas à comprendre pourquoi ça ne marche pas ?

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à vous

_AT_rdd

cd /var/www/vhosts/vt-boutique-net.com ls -l

me retourne

drwxr-x--- 5 vt-boutique-net psaserv   48 Jun  6 17:05 httpdocs

mais ensuite :

chown -R vt-boutique-net httpdocs:psaserv httpdocs cd httpdocs

me retourne

chown: cannot access `httpdocs:psaserv': No such file or directory
chown: cannot access `httpdocs': No such file or directory
chown: cannot access `cd': No such file or directory
chown: cannot access `httpdocs': No such file or directory

Peut être que j'ai mal compris ta consigne...

Bon le chmod 775 sur le dossier boutique je peux le faire par ftp...actuellement il est à 755

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Kioob,

Il s'agit là d'une sécurité UNIX, donc soit tu fais la modif depuis le compte root soit tu le fais par FTP, mais tu n'aurais guère plus de solutions

///

Comme la plupart des hébergeurs mutualisés d'assez grosse taille, ils sont certainement en FastCGI + suExec, ce qui est généralement plus sécurisé que le "mod_php" classique.

Tu as sûrement raison...mais n'empêche que la fonction chmod() de php fonctionne parfaitement sur un hébergement de base 1 and 1...et j'aimerais bien qu'il en soit de même sur mon dédié...quant à mkdir() et unlink(), elles me retournent systématiquement permission denied... et je vois pas comment je peux exécuter ces fonctions en tant que root depuis le script.

FastCGI + suExec : oui, là, j'avoue que je n'ai jamais entendu parler de ça.

Parce que tu ne cherches pas à comprendre pourquoi ça ne marche pas ?

Oh mais si, je t'assure ! une semaine que je bouffe des tutos, que je lis les forums, j'ai le feu à la tronche ! mais ce monde est, comment dire, un peu fermé...

En tout cas, vous êtes des gens cool sur ce forum, et ça il fallait le dire.

;)

Lien vers le commentaire
Partager sur d’autres sites

Ce qu'il faut bien voir c'est que tu as une installation de type Plesk, donc quoi que tu fasses tu seras toujours limité à ce que propose Plesk... et justement à ma connaissance Plesk ne gère qu'un seul type d'installation Apache/PHP.

Pour les autres schémas qui te font tellement envie, il faut repartir sur un OS "propre", quitte à déléguer l'installation/infogérance à Dan par exemple.

En attendant, il te faudra bien faire avec les contraintes de l'installation actuelle... en essayant d'en comprendre le fonctionnement. Faire du chmod ou chown à droite et à gauche sans savoir pourquoi, c'est risqué.

Par exemple si le "chown" indiqué par rdd fonctionne (si tu ne te trompes pas dans la syntaxe quoi), il y aura fort à parier que tu perdras ton accès FTP, en écriture du moins... le "access denied" ne sera plus pour tes scripts PHP mais pour ton accès FTP, quel est le mieux ?

Modifié par Kioob
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...