【问题标题】:Best practices for linux user permissions to run web application as?linux用户权限运行Web应用程序的最佳实践?
【发布时间】:2012-10-08 06:15:36
【问题描述】:

我在网上看到了很多不同的建议,比如从哪里为您的 Web 应用程序提供服务、以什么用户身份运行它等等。

例如,我看到它从以下位置提供服务:/var/www/site、/srv/www/site、/home/$USER/site。

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

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

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

现在,uwsgi 以 root 身份在帝王模式下运行,uid/gid 设置为 www-data,因此 vassal 与 Nginx worker 具有相同的权限。我在 /home 服务,但正在考虑搬家。

【问题讨论】:

    标签: django permissions nginx uwsgi


    【解决方案1】:

    对于位置,请选择最适合您的位置。以下是一些可以提供帮助的注意事项:

    • /var 下的位置用于change in size 或通常是“变量”的文件。
    • /srv 一般表示机器上运行的某些服务相关的文件。
    • /home 通常应保留给交互式用户。不过,您可以将系统用户的主目录设置为任何内容。

    为了安全起见,您应该尽可能地分段。该应用程序不应以与 Web 服务器相同的用户身份运行,以免被滥用来读取与服务器本身相关的敏感文件(.htaccess 或其他)。应用程序的二进制文件(或者对于 Django,python 源)应该由 root 拥有,对应用程序用户没有写入权限。

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

    • Django 应用程序:/usr/lib/appname//usr/lib/python/site-packages/appname/(如果已安装)。由 root 拥有,chmod 644。
    • 应用程序的文件(例如 sqlite db 文件、用于 FastCGI 的 Unix 套接字、上传的文件存储等):/var/lib/appname/。归应用用户 chmod 600 所有。
    • app-user的shell是/bin/nologin,home是/var/lib/appname/。用户没有配置密码。

    【讨论】:

    • 如果我有一个 virtualenv,它会放在 /var/lib/appname/venv 下吗?此外,需要明确的是,app-user 可以是例如'uwsgi',但不是我通过 ssh 登录的用户(并且具有 sudo 权限)?
    • FWIW,由于the Django tutorial,我的 python 代码位于 /home (“这段代码应该在哪里?”部分)
    • 是的,uwsgi 对您的应用用户来说是一个不错的选择,除非您运行多个应用,在这种情况下,您可能需要每个应用的用户。用户不应具有 sudo 或登录权限。正如教程所指出的,最重要的是不要将代码放在 Web 根目录下。
    • 我无法让它工作。我发现 uwsgi 需要在目录上执行权限才能导入 python 模块、在 sqlite 文件上的 rw 和在 sqlite 的包含目录上的 wx。我最终让 root 拥有所有文件(除了 unix 套接字)并使用具有读取权限的组来允许 www-data 和 uwsgi 读取他们需要的文件,从最严格的权限开始并放宽直到它真正起作用。这个建议让我开始了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 2011-02-18
    • 2015-06-07
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多