2012-10-17 9 views
7

Vedo molti consigli diversi online su dove servire la tua applicazione web, su quale utente eseguirlo come, ecc.Best practice per le autorizzazioni utente linux per l'esecuzione dell'applicazione web come?

Per esempio, l'ho visto servito da:/var/www/site ,/srv/www/site,/home/$ USER/sito.

Ho visto l'utente essere www-data, $ USER (ovvero il mio account utente) o un utente personalizzato creato appositamente per tale scopo (ad esempio, utente uwsgi).

In termini di sicurezza, qual è lo schema migliore che potrei scegliere?

Per riferimento, sto cercando di installare un sito Django con Nginx e uwsgi.

In questo momento, uwsgi è in esecuzione come root in modalità imperatore, con uid/gid impostato come www-data, quindi i vassalli generano le stesse autorizzazioni degli operatori Nginx. Sto servendo da/a casa, ma pensando di trasferirmi.

risposta

3

Per la posizione, scegliere ciò che sembra meglio per voi. Ecco alcune considerazioni a dare una mano:

  • posizioni sotto /var sono i file che change in size, o in generale sono "variabile".
  • /srv indica generalmente file relativi ad alcuni servizi in esecuzione sulla macchina.
  • /home di solito deve essere riservato per gli utenti interattivi. Tuttavia, puoi impostare la directory home di un utente di sistema su qualsiasi cosa.

Per motivi di sicurezza, è necessario segmentare il più possibile. L'app non deve essere eseguita come lo stesso utente del server Web, in modo che non possa essere utilizzata in modo improprio per leggere i file sensibili relativi al server stesso (.htaccess o qualsiasi altra cosa). I file binari dell'app (o per Django, l'origine python) dovrebbero essere di proprietà di root, senza accesso in scrittura all'utente dell'applicazione.

Ecco i miei 2 centesimi su come configurarlo:

  • Django app: /usr/lib/appname/ o /usr/lib/python/site-packages/appname/ se installato. Di proprietà di root, chmod 644.
  • File dell'applicazione (ad esempio, file sqlite db, socket Unix per FastCGI, archiviazione file caricata, ecc.): /var/lib/appname/. Di proprietà dell'utente app, chmod 600.
  • La shell utente dell'applicazione è /bin/nologin, la casa è /var/lib/appname/. L'utente non ha una password configurata.
+0

Se si dispone di un virtualenv, sarebbe andare in/var/lib/appname/venv? Inoltre, per essere chiari, l'utente dell'app potrebbe essere ad es. 'uwsgi', ma non l'utente che accedo come via ssh (e ha i permessi sudo)? – user1431368

+0

FWIW, il mio codice Python vive in/home a causa di [il tutorial di Django] (https://docs.djangoproject.com/en/1.4/intro/tutorial01/) (sezione "Dove dovrebbe vivere questo codice?") – user1431368

+0

Sì , 'uwsgi' sarebbe una buona scelta per il tuo utente dell'app, a meno che tu non abbia più di un'app in esecuzione, nel qual caso potresti volere degli utenti per app. L'utente NON dovrebbe avere sudo o autorizzazioni di accesso. Come sottolinea il tutorial, la cosa più importante è non avere il tuo codice sotto la tua web root. – bonsaiviking

Problemi correlati