web-dev-qa-db-fra.com

Autorisations Apache, PHP file create, MKDir fail

Il semble que je ne puisse pas créer de fichiers. Lorsque je définit les autorisations sur 777 Sur le dossier, j'essaie de créer un dossier, le script fonctionne bien. Si le dossier est défini sur 755, il échoue. Je ne connais pas grand-chose à Linux, mais je suis supposé comprendre ce genre de choses. J'ai passé quelques heures à essayer des trucs. Est-ce que quelqu'un sait comment faire en sorte qu'Apache dispose d'autorisations suffisamment élevées.



Je sais que c'est un problème d'autorisations et d'Apache, je ne sais tout simplement pas comment résoudre ce problème. J'ai édité le fichier httpd.conf, mais je ne sais vraiment pas ce que je fais ... Une aide? (J'ai sauvegardé la sauvegarde.)

23
Michael

S'il vous plaît arrêtez de suggérer d'utiliser 777. Vous rendez votre fichier accessible en écriture par tout le monde, ce qui signifie à peu près que vous perdez toute la sécurité pour laquelle le système d'autorisation a été conçu. Si vous le suggérez, pensez aux conséquences que cela peut avoir sur un serveur Web mal configuré: il deviendrait incroyablement facile de "pirater" le site Web, en écrasant les fichiers. Alors, non.

Michael: il y a une raison parfaitement viable pour laquelle votre script ne peut pas créer le répertoire, l'utilisateur exécutant PHP (qui pourrait être différent d'Apache) n'a tout simplement pas les autorisations suffisantes pour le faire. de changer les autorisations, je pense que vous devriez résoudre le problème sous-jacent, ce qui signifie que vos fichiers ont le mauvais propriétaire, ou Apache ou PHP s'exécute sous le mauvais utilisateur.

Maintenant, il semble que vous ayez installé votre propre serveur. Vous pouvez déterminer quel utilisateur exécute PHP en exécutant un script simple qui appelle le programme 'whoami' installé dans la plupart des linux:

<?php
echo `whoami`;

Si tout va bien, vous devriez voir le nom d'utilisateur PHP fonctionne sous. Selon votre système d'exploitation, cela peut être 'www-data', 'nobody', 'http' ou toute autre variation. Si votre site Web est le seul site Web en cours d'exécution, cela est facile à changer en changeant l'utilisateur sous lequel Apache est exécuté. Si vous avez Debian, comme j'ai tendance à le faire, vous pouvez éditer le fichier/etc/Apache2/envvars (en tant que root) et changer la valeur pour Apache_RUN_USER. Selon votre système d'exploitation, cette variable peut être définie dans un fichier de configuration différent, donc si vous ne la trouvez pas dans/etc/Apache2/envvars, essayez de rechercher la déclaration de variable en utilisant:

$ grep -R "Apache_RUN_USER=" .

Depuis le répertoire, tous les fichiers Apache-config se trouvent.

Si vous n'êtes pas le seul sur le serveur, vous voudrez peut-être envisager de créer des comptes d'utilisateurs pour chaque site Web et d'utiliser quelque chose comme Apache2-MPM-ITK pour changer RUN_USER en fonction du site Web appelé. Assurez-vous également que l'utilisateur sous lequel s'exécute le processus PHP est le propriétaire des fichiers et des répertoires. Vous pouvez accomplir cela en utilisant chown:

% chown theuser:theuser -R /var/www/website/

Si PHP fonctionne avec son propre utilisateur et est le propriétaire des fichiers et répertoires qu'il doit écrire, l'autorisation 700 serait suffisante. J'ai tendance à utiliser 750 pour la plupart des fichiers moi-même cependant , car j'ai généralement plusieurs utilisateurs dans ce groupe et ils peuvent avoir des autorisations de lecture. Vous pouvez donc modifier les autorisations:

% chmod 0750 -R /var/www/website/

Ça devrait être ça. Si vous rencontrez des problèmes, faites-le nous savoir, et veuillez ne pas le faire suivez jamais un conseil qui vous dit essentiellement: si la sécurité vous dérange, supprimez la sécurité.

91
Berry Langerak

J'ai un problème similaire mais dans mon cas, j'ai SELinux en cours d'exécution et il a échoué même avec l'autorisation 0777. Il s'avère que je dois autoriser explicitement httpd à avoir un accès en écriture sur le répertoire en utilisant:

chcon -R -t httpd_sys_rw_content_t <PARENT_OF_MKDIR_TARGET>

L'utilitaire de résolution des problèmes SELinux peut contenir plus de détails.

13
user1533634

Sur ubuntu, vous modifiez/etc/Apache2/envvars comme Berry l'a suggéré.

Lorsque vous changez d'utilisateur Apache, méfiez-vous des conséquences imprévues. L'un d'eux est les sessions PHP qui peuvent être stockées dans/var/lib/php5. Vous devrez peut-être également changer la propriété de ce dossier.

6
JG Estiot

L'utilisateur php (www-data, php, Apache, quel qu'il soit) doit avoir des droits d'écriture sur le 755 dir. Je suppose que ce n'est pas un membre du groupe du créateur du dossier, sinon il pourrait y écrire. Ajoutez l'utilisateur php au groupe ou modifiez les autorisations sur le dossier en 777. Si aucune des deux n'est une option, vous pouvez utiliser l'extension PECL SSH2 pour vous connecter avec un utilisateur du groupe (ou le propriétaire du fichier) et créez les fichiers à la place.

1
Explosion Pills