在 Debian 服务器上运行 Django 应用程序时,您是否应该创建某种应用程序用户(例如“myappuser”)并以该用户身份运行 gunicorn 进程,或者是否可以/应该以 root 身份运行 gunicorn?以 root 身份运行它会产生安全风险吗?我使用 APT 安装了 gunicorn,而不是在虚拟环境中安装它。以应用程序用户身份运行它似乎会使配置更加困难,因为您必须授予该用户写入日志文件、PID 文件等的权限。以 root 身份运行它似乎更容易。
exec gunicorn $DJANGO_WSGI_MODULE:application \
--name myapp \
--user=$USER \ # <- who should this be?
--group=$GROUP \
答案1
作为一般规则,最好在单独的用户下运行 worker 和类似的东西,并且只授予其运行所需的权限。以 root 身份运行通常更容易,因为您很少需要担心权限问题,但它总是不太安全,因为任何能够成功利用您的应用程序的人都会立即获得您系统的 root 访问权限,而不必找到某种方式进一步升级。即使没有故意的利用,如果应用程序以某种方式出现灾难性错误,它最终可能会破坏文件系统的重要部分。现在就咬紧牙关,处理权限方面的轻微复杂性,而不是接受以 root 身份运行的安全风险。在某些情况下,如果这会让事情变得更容易,那么重用已经存在的其他用户(例如,用于 webapp 的 www-data)可能是合适的。