Linux用户权限运行Web应用程序的最佳做法是什么?

use*_*368 8 django permissions nginx uwsgi

我在网上看到了许多不同的建议,关于在哪里为你的web应用程序提供服务,用什么用户来运行它等等.

例如,我见过它来自:/ var/www/site,/ srv/www/site,/ home/$ USER/site.

我已经看到用户是www-data,$ USER(即我的用户帐户),或者是专门为此目的创建的自定义用户(例如用户uwsgi).

在安全性方面,我可以选择的最佳方案是什么?

作为参考,我正在尝试使用Nginx和uwsgi部署Django站点.

现在,uwsgi在emperor模式下以root身份运行,uid/gid设置为www-data,因此vassals以与Nginx worker相同的权限生成.我在家里服务,但想着搬家.

bon*_*ing 6

对于位置,选择最适合您的位置.以下是一些需要帮助的注意事项:

  • 下面的位置/var是用于大小变化的文件,或者通常是"可变的".
  • /srv 通常表示与计算机上运行的某些服务相关的文件.
  • /home通常应该为交互式用户保留.但是,您可以将系统用户的主目录设置为任何内容.

为了安全起见,您应该尽可能地进行细分.应用程序不应与Web服务器作为同一用户运行,因此不能滥用它来读取与服务器本身(.htaccess或其他)相关的敏感文件.应用程序的二进制文件(或Django,python源)应由root拥有,而无需对应用程序用户的写访问权.

这是关于如何设置它的2美分:

  • Django应用程序:/usr/lib/appname/或者/usr/lib/python/site-packages/appname/如果已安装.由root拥有,chmod 644.
  • 应用程序的文件(例如SQLite的数据库文件,Unix套接字的FastCGI为,上传的文件储存等): /var/lib/appname/.由app-user拥有,chmod 600.
  • app-user的shell是/bin/nologin,home是/var/lib/appname/.用户没有配置密码.