我试图理解Ubuntu 10.04服务器上运行在Apache下的Web应用程序的安全和环境variables的一些概念。
我有几个应用程序,我想作为一个用户没有shell或密码运行(我明白,这是一个好主意,但我不是专家)。 其中一个应用程序是一个通过系统初始化脚本启动的Web应用程序,另一个是通过sudo和-u开关通过sudo行在特定情况下启动的实用程序。
每个应用程序都需要访问相同的一组环境variables。 我可以修改启动每个应用程序的脚本,并在那里设置环境variables,但是如果环境variables以某种方式为运行应用程序的用户设置,我更喜欢它。
我的问题是:
可以为没有shell的用户设置“每个用户”的环境variables吗? 我读过“ 在Debian上设置没有loginshell的服务的环境variables ”,但给定的解决scheme与修改我的每个应用程序脚本基本相同。
如果我不能为每个用户设置环境variables,那么与给用户一个shell相关的安全风险是什么?
如果有的话,对于这种可能普遍的情况,有什么替代scheme或build议?
使用configuration文件,并通过应用程序的启动脚本添加variables是真正的处理这个问题的正确方法。 如果您需要为非shell脚本或二进制文件(如perl,python或java)提供某些环境variables,则可以使用shell包装程序调用它们,提供所需的variables,然后exec实际的脚本。
如果您的应用程序是通过某种脚本启动的,则必须通过调用shell(文件顶部的shebang)来启动应用程序,即使用户没有loginshell。 您可以通过shell的rc文件修改环境variables,就像您对常规用户所做的一样。 我相信你仍然需要插入BASH_ENVvariables来让rc文件触发,因为你是非交互式地调用脚本。
我将强烈build议您使用以前的方法,并为应用程序创build某种configuration。 从长远来看,pipe理起来要容易得多。
环境variables是shell的一个方面。 所以我相当肯定,没有shell ==没有环境variables。
作为一般规则,我不会给服务帐户login权限。 简单的答案是,这只是别的担心。 这只是一个潜在的入侵点。
就个人而言,这是我将使用configuration文件(/etc/myapp.conf)。 您只需要启动该Web应用程序的初始化脚本,获取该文件,并让其他应用程序在默认位置查看或在命令行上input参数。