Qual è il modo più sicuro per impostare le autorizzazioni utente del server Web? [chiuso]

2

Il modo Debian predefinito di configurare un server web comune (Nginx) è di eseguire il processo principale come lavoratori root e non privilegiati come www-data. Per consentire ai processi di lavoro di leggere / eseguire i file delle applicazioni Web, alcuni utenti eseguono il chesh dei file sull'utente www-data.

Recentemente ho letto una buona argomentazione secondo cui non si dovrebbe mai consentire a www-data di accedere in scrittura ai file di applicazioni Web, ma piuttosto di leggere ed eseguire i diritti attraverso l'appartenenza a un gruppo. Credo che sarebbe il set più sicuro che abbia mai visto, ma mi piacerebbe sapere se qualcuno ha strategie migliori.

Qual è il modo più sicuro per configurare le autorizzazioni utente per un'applicazione Web?

E come bonus (senza lasciare l'argomento del server stesso), quali altri suggerimenti relativi alla configurazione puoi fornire per proteggere un server web oltre a quello che potresti ottenere dai repository?

    
posta e-sushi 08.10.2013 - 00:47
fonte

3 risposte

0

Personalmente mi piace attivare HTTP, attivare SElinux e fare qualcosa di simile nel file vhost:

## Deny access based on HTTP method
if ($bad_method = 1) {
        return 444;
}

location = /robots.txt  { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }
## Disable access to hidden files
location ~ /\.          { access_log off; log_not_found off; deny all; }
location ~ ~$           { access_log off; log_not_found off; deny all; }

Prova anche a controllare gli attacchi di overflow del buffer da nginx.conf

 ## Start: Size Limits & Buffer Overflows ##
  client_body_buffer_size  1K;
  client_header_buffer_size 1k;
  client_max_body_size 1k;
  large_client_header_buffers 2 1k;
 ## END: Size Limits & Buffer Overflows ##

E poi:

  1. Dovrebbe essere attivato il modulo NginxHttpLimitZone.
  2. Limita le connessioni Nginx in uscita
  3. Restrizioni alla directory (configura il tuo CMS in modo che sia in grado di leggere solo i file di cui ha bisogno o qualsiasi cosa tu abbia bisogno)

L'elenco è lungo e questa è solo una precauzione.

    
risposta data 08.10.2013 - 05:03
fonte
0

What is the most secure way to configure the user permissions for a web application?

bene, questo dipende dal tuo server web e (dalla tecnologia della) tua applicazione. se hai qualcosa come php e apache / mod_php, sarebbe idealmente così:

  • ha un utente-sviluppatore
  • lascia che l'utente di sviluppo possieda il tuo docroot
  • lascia che il tuo utente del web server possieda le sue directory cache / tmp-(o usi una webapp moderna come contao che non ha nemmeno bisogno di un cosiddetto "safe mode hack")

Perché? beh, se il server web stesso non possiede i file, non può essere trascurato nel sovrascrivere / alterare i file, quindi non sono possibili attacchi molto lontani.

un altro punto nel proteggere esp. php usa disable_funtions in php.ini, ma questo è fuori tema.

se usi apache / suphp allora questa separazione non funzionerebbe; non sono sicuro di fastcgi.

se usi il tuo server web solo come proxy inverso e un server / appserver (come django, rails, tomcat, ecc.) avrai bisogno di un altro concetto perché non c'è nulla come un docroot.

btw, nginx non esegue esegue i file di applicazione web o esegue php.

And as a bonus (without leaving the topic of the server itself), what other related configuration tips can you give to securing a web server beyond what you might get from the repos?

usa il tuo google-foo per "proteggere il manuale di debian", il mio padawan molto giovane :) a questa domanda è stata data molta risposta su questa piattaforma.

    
risposta data 08.10.2013 - 09:43
fonte
0

Nel caso si stia parlando di siti Web PHP ho una soluzione funzionante.

Se hai più utenti che hanno più siti web (tutti in esecuzione con PHP) e vuoi isolarli gli uni dagli altri, puoi provare a usare php-fpm insieme a Nginx. Quindi si crea per ogni sito Web un proprio pool fpm in cui viene utilizzato quell'utente specifico per l'esecuzione di quel specifico fpm-pool, in quanto gli utenti non possono interferire con i siti Web degli altri utenti, poiché a un livello di autorizzazione non possono eseguire codice in altre directory o persino accedervi. Passando variabili php come 'basedir' al fpm-pool puoi impostare ad esempio la directory di lavoro per quel particolare interprete PHP.

In pratica stai creando un contesto di esecuzione per ogni singolo utente e quindi li isola.

Sfortunatamente Internet manca di un buon tutorial che mostra come impostare tutto, ma puoi lavorare con questo tutorial per configurare tale ambiente: link

Si darebbe la proprietà di una particolare directory del sito Web a un utente, che è anche nel gruppo www-data, in modo che i file statici (html, css, js) possano ancora essere chiamati da Nginx.

Diventiamo più astratti. La soluzione sopra riportata ti dice fondamentalmente che devi separare l'esecuzione di quel programma che esegue i tuoi file dell'applicazione. Hai solo bisogno di questa sicurezza se hai bisogno di servire file non statici (cioè una chiamata a uno script php).

    
risposta data 05.06.2014 - 14:36
fonte

Leggi altre domande sui tag