我有一个 Tornado 应用服务器,运行在 Nginx Web 服务器后面。应用服务器包含用于处理客户端请求、数据库调用、运行业务逻辑等任务的 Python 脚本。
当然,代码必须通过操作系统用户帐户执行。现在我发现在 Linux 中,有两种类型的操作系统帐户:普通用户帐户和系统帐户(后者使用 --system 选项创建,使用 /usr/false 并且没有主目录)。
我的问题是:
[1] 我应该使用系统用户帐户而不是普通用户帐户来部署和运行代码吗?
[2] 系统用户账户比普通用户账户更安全吗?
[3] 我应该将代码文件保存在哪个目录中(从安全角度来看)?
信息:
1)我不打算将运行python代码的帐户用于任何其他目的。
2)我在生产环境中使用supervisord和virtualenv。
3)我打算对日志文件进行详细的监控。
作为系统管理员,我从安全的角度提出这个问题。很乐意向你们学习。提前致谢。
答案1
如果您可以使用帐户进行部署,则意味着该帐户具有一些远程访问功能 - 这对于“系统帐户”来说毫无意义 - 系统帐户将代码放入文件系统的唯一方法是将其拉到服务器上。这并非不可能,但需要一点思考。
运行代码则是另一回事。大多数服务器以特定的非 root uid 运行 - 但通常由 root 启动,然后调用 setuid()(这也意味着它们可以打开特权端口) - 但包装启动脚本以便由 root 运行但以不同用户身份创建守护进程是微不足道的。
系统用户账户是否更安全
取决于 - 安全对于很多不同的事情来说是一个非常广泛的标志。但就运行守护进程而言,它确实提供了一些保护。
我应该将我的代码文件保存在哪个目录中(从安全角度来看)?
您的安全模型是什么?您的日志在哪里?谁应该有合法的系统访问权限?这台机器是专门用来运行您的代码还是用来做其他事情?