nginx php fastcgi incapable d'écrire , de refus d'autorisation, même à l'aide de sa propre autorisation
Hi " j'ai la permission refusée lors de l'utilisation d'écriture de texte fonctionnent comme des file_put_contents. je suis l'aide de nginx à l'intérieur de centos 6 de l'environnement, j'utilise php-fcgi
le problème résolu par le jeu de la dir permission 777, mais je ne veux pas que la solution.
voici le code php
<?php
error_reporting(E_ALL);
header("content-type:text/plain");
if(isset($_GET['akarapaci'])) {phpinfo();}
echo getcwd();
echo "\nscript owner : ".get_current_user()."\n";
echo "\nscript getmyuid : ".getmyuid()."\n";
echo "\nscript getmygid : ".getmygid()."\n";
file_put_contents(dirname(__FILE__)."/X","1");
?>
voici le résultat :
/var/www/html
script owner : nginx
script getmyuid : 496
script getmygid : 493
le code est simple à écrire dans le fichier /var/www/html/X (le fichier n'est pas encore créé), et d'avoir d'erreur comme ceci
2012/10/27 19:51:59 [error] 1010#0: *32 FastCGI sent in stderr: "PHP Warning: file_put_contents(/var/www/html/X): failed to open stream: Permission denied in /var/www/html/info.php on line 10" while reading response header from upstream, client: 111.94.49.72, server: vprzl.com, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "vprzl.com"
et voici la liste des dir dans le répertoire /var/www/
total 40
drwxr-xr-x 2 root root 4096 Oct 27 08:44 backup
drwxr-xr-x 2 root root 4096 Feb 14 2012 cgi-bin
drwxrwxrwx 3 root root 12288 Oct 27 08:47 devel
drwxr-xr-x 3 root root 4096 Oct 20 04:48 error
drwxrwxr-x 2 nginx nginx 4096 Oct 27 19:24 html
drwxr-xr-x 3 root root 4096 Oct 17 18:19 icons
drwxr-xr-x 5 root root 4096 Oct 27 16:57 images
drwxr-xr-x 2 root root 4096 Oct 26 14:28 secret
et voici mon nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name vprzl.com www.vprzl.com;
index index.html;
root /var/www/html/;
location / {
# Rewrite rules and other criterias can go here
# Remember to avoid using if() where possible (http://wiki.nginx.org/IfIsEvil)
index index.html index.htm;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
server {
listen 80;
server_name images.vprzl.com;
index index.html;
root /var/www/images/;
location / {
# Rewrite rules and other criterias can go here
# Remember to avoid using if() where possible (http://wiki.nginx.org/IfIsEvil)
index index.html index.htm;
}
}
server {
listen 80;
server_name secret.vprzl.com;
index index.html;
root /var/www/secret/;
location / {
index index.html index.htm;
}
}
}
En vertu de l'utilisateur qui ne les démons fastcgi exécuter et en vertu de laquelle l'utilisateur ne le script PHP exécuté? Vous n'avez normalement pas besoin de global "rwx" quand vous connaître les besoins de l'utilisateur d'avoir l'accès en écriture.
Qu'est-ce que la sortie de
c'est le résultat du ps aux | grep nginx
Qu'est-ce que la sortie de
ps aux | grep nginx
?c'est le résultat du ps aux | grep nginx
root 1009 0.0 0.1 44624 1176 ? Ss Oct27 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf nginx 1010 0.0 0.2 45048 2140 ? S Oct27 0:00 nginx: worker process root 3588 0.0 0.0 103228 848 pts/0 S+ 02:09 0:00 grep nginx
OriginalL'auteur Shin Dapaty | 2012-10-27
Vous devez vous connecter pour publier un commentaire.
trouvé le coupable! (de ma propre réponse), j'ai juste à changer une ligne dans le fichier /etc/init.d/php-fcgi
de
à
puis redémarrez
user
(à côté de lagroup
). Changer deuser=nginx
également fait le tour.Comment puis-je trouver ce fichier? il n'est pas là
/init.d
. J'ai eu CentOS 7 et php7.2Qui ne fonctionne pas bien dans mon cas 🙁 Pourriez-vous s'il vous plaît jetez un oeil à ma question?
Essayez de définir
user = nginx
dans/etc/php-fpm.d/www.conf
OriginalL'auteur Shin Dapaty
(i) si vous avez défini l'utilisateur:groupe de nginx et les autorisations sont 0755 alors vous êtes ok
(ii) si vous avez encore le refus d'une autorisation, puis vérifier selinux. j'.e
$sudo setenforce 0
(iii) Avec selinux désactivé, vérifiez si vous êtes maintenant en mesure d'écrire.
OriginalL'auteur joe mwirigi
Merci de ne pas vous désactiver SELinux.
voici les étapes que vous devez prendre avec soin pour surmonter ce problème:
tout d'abord selinux est le centre de sécurité de votre système. et il gère tous lire et écrire dans des fichiers.
1) tous les dossier dans /var/www doit avoir la permission 755.
ce faire, vous pouvez : trouver "dossier" -type d -exec chmod 755 {} \;
2) tous les fichiers doivent avoir l'autorisation 644 :
trouver "dossier" -type f -exec chmod 644 {} \;
3) le dossier spécifique, vous devez écrire ou de créer le fichier doit avoir 0777
la permission.
chmod 0777 "dossier"
4) puis de dire SELinux pour permettre l'écriture de dir ou un fichier spécifique:
chcon -t httpd_sys_rw_content_t test.txt
Ni régler l'ensemble de vos dossiers d'autorisation 777, pas de désactiver votre Selinux.
OriginalL'auteur Dariush Hojabrian