Permissões adequadas no FreeBSD com nginx e php para múltiplos usuários

1

Estou tentando configurar um servidor FreeBSD multiusuário usando nginx.

Aqui estão os meus passos até agora:

No meu arquivo /usr/local/etc/nginx/nginx.conf , defino user www www; para que o nginx atue como o usuário www, parte do grupo www. Eu também defino user = www e group = www no meu /usr/local/etc/php-fpm.conf .

O que eu quero alcançar é que eu (como administrador) possa adicionar usuários ao meu sistema e criar uma pasta para eles (e, é claro, a entrada do servidor correspondente no nginx.conf) em /usr/local/www para eles usarem , um pouco como um ambiente de hospedagem compartilhada (sem qualquer configuração automática).

Depois de instalar o nginx e o php, criei um primeiro usuário de teste anon e criei uma pasta para ele /usr/local/www/anonsite .

Em seguida, executei chown anon:www anonsite para torná-lo o proprietário, e configurei o grupo para www, permissão da pasta e fiquei assim: drwxr-xr-x 3 anon www 4 Apr 11 22:00 anonsite .

Criando um info.php nesta pasta como anon e apontando um navegador para ele agora funciona. Eu então testei o download e extrai grav , no entanto ele só mostra uma página em branco (por causa da minha configuração de permissão errada, eu suponho). Se eu alterar o php-fpm.conf user=anon , ele funciona como pretendido ou, alternativamente, usando chmod -R g+w /usr/local/www/anonsite , depois de extrair a pasta grav gravada, ele também funcionará.

E aqui é onde eu estou presa atualmente e não consigo envolver minha cabeça. Ambas as "correções" parecem erradas ou más práticas para mim. Se eu comparar minha configuração com um provedor de host compartilhado que eu uso, minha pasta webroot só tem drwxr-x--- 5 username apache 4096 Apr 2 05:00 username permissões, e depois de extrair uma configuração de teste gravativo ele funcionará imediatamente (é por causa da maneira como o Apache funciona?).

Alguém poderia me explicar por que esse é o caso e talvez me acompanhar nas etapas para configurar isso corretamente ou o que estou fazendo de errado?

A abordagem que tentei considerou a prática ruim como um todo?

    
por Jessica Nowak 11.04.2017 / 21:11

1 resposta

1

O nginx provavelmente será capaz de ler os arquivos conforme necessário definindo explicitamente o proprietário do grupo do arquivo como usuário nginx. e para o php-fpm o usuário nginx pode simplesmente ser configurado como o ouvinte. php-fpm.d / php-fpm-user1.conf

[grav]
user = user1
group = use1

listen = /var/run/php-fpm-user1.sock

listen.owner = www
listen.group = www

pm = dynamic 
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

php.ini
cgi.fix_pathinfo=0

nginx.conf

user www;
worker_processes auto;
worker_rlimit_nofile 8192; # should be bigger than worker_connections
pid /run/nginx.pid;

events {
    use kqueue; # No epoll on FreeBSD
    worker_connections 8000;
    multi_accept on;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    keepalive_timeout 30; # longer values are better for each ssl client, but take up a worker connection longer
    types_hash_max_size 2048;
    server_tokens off;

    # maximum file upload size
    # update 'upload_max_filesize' & 'post_max_size' in /etc/php5/fpm/php.ini accordingly
    client_max_body_size 32m;
    # client_body_timeout 60s; # increase for very long file uploads

    # set default index file (can be overwritten for each site individually)
    index index.html;

    # load MIME types
    include mime.types; # get this file from https://github.com/h5bp/server-configs-nginx
    default_type application/octet-stream; # set default MIME type

    # logging
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    # turn on gzip compression
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 5;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_min_length 256;
    gzip_types
        application/atom+xml
        application/javascript
        application/json
        application/ld+json
        application/manifest+json
        application/rss+xml
        application/vnd.geo+json
        application/vnd.ms-fontobject
        application/x-font-ttf
        application/x-web-app-manifest+json
        application/xhtml+xml
        application/xml
        font/opentype
        image/bmp
        image/svg+xml
        image/x-icon
        text/cache-manifest
        text/css
        text/plain
        text/vcard
        text/vnd.rim.location.xloc
        text/vtt
        text/x-component
        text/x-cross-domain-policy;

    # disable content type sniffing for more security
    add_header "X-Content-Type-Options" "nosniff";

    # force the latest IE version
    add_header "X-UA-Compatible" "IE=Edge";

    # enable anti-cross-site scripting filter built into IE 8+
    add_header "X-XSS-Protection" "1; mode=block";

}
server {
    #listen 80;
    index index.html index.php;

    ## Begin - Server Info
    root /home/user1/www/html;
    server_name localhost;
    ## End - Server Info

    ## Begin - Index
    # for subfolders, simply adjust:
    # 'location /subfolder {'
    # and the rewrite to use '/subfolder/index.php'
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    ## End - Index

    ## Begin - Security
    # deny all direct access for these folders
    location ~* /(\.git|cache|bin|logs|backup|tests)/.*$ { return 403; }
    # deny running scripts inside core system folders
    location ~* /(system|vendor)/.*\.(txt|xml|md|html|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
    # deny running scripts inside user folder
    location ~* /user/.*\.(txt|md|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
    # deny access to specific files in the root folder
    location ~ /(LICENSE\.txt|composer\.lock|composer\.json|nginx\.conf|web\.config|htaccess\.txt|\.htaccess) { return 403; }
    ## End - Security

    ## Begin - PHP
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php-fpm-user1.sock;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    }
    ## End - PHP
}'
    
por 04.11.2018 / 12:31