我通过在Jetty 9
中提取存档来安装/opt/jetty
(最新版本)。
start.jar
运行正常,但我希望bash服务bin/jetty.sh
由非root用户运行。
我对bash脚本的问题是:当我没有在$JETTY_USER
中指定/etc/default/jetty
的值时(它使用root
用户),Jetty
作品。但是当我为它分配一个值时,Jetty会失败并显示消息:Starting Jetty: FAILED
,并且没有日志。
那么,我如何创建一个可以运行码头的用户?
答案 0 :(得分:3)
我知道这个问题已经过时了,但是由于这种行为最近也让我感到烦恼,所以这是我的暗示。 在我的情况下,它是Centos 6.5上的Jetty 8.x,我有完全类似的行为:jetty在命令行上以root用户身份和新创建的jetty用户启动时完美无缺,但是无论何时尝试运行它都无法启动服务并通过/ etc / default / jetty中的变量JETTY_USER指定用户。 日志完全是空的。
我的案例中的技巧是没有为JETTY_LOGS变量中的日志公开指定目录。当直接作为用户运行时,当Jetty无法访问日志的正常目录时,它将尝试为用户创建一个。但是,使用Centos / RH系统中的启动脚本,该过程由“su - -c”命令“user”运行,该命令似乎打破了这种行为。 日志文件中没有提交任何抱怨,因为在尝试访问它们时进程中断了,并且stdout和stderr都被重定向到日志。
要调试确切的权限问题,请尝试通过脚本执行的“su -c”运行服务器;区别在于你最终会在控制台上安装你的stderr。并且在将来,还可以手动创建具有正确权限的jetty日志目录,并在JETTY_LOGS变量中指定它:更不用说头疼了!
答案 1 :(得分:3)
我遇到了同样的问题。在我的例子中,我按照逐步安装指南“使用jetty.sh启动Unix服务”在pcDuino v3,Ubuntu 14.04上安装了Jetty v 9.2.10.v201503(参见eclipse.org上的文档)。
由于这些步骤是以root用户身份运行的,因此我最终获得了$ JETTY_BASE目录中文件和目录的混合所有权(root和jetty)。
我将JETTY_LOGS = $ JETTY_BASE / logs和JETTY_USER = jetty添加到/ etc / default / jetty文件中,然后重新发出chown -R jetty:jetty $ JETTY_BASE。
在这些步骤之后,Jetty在jetty用户的凭据下运行。虽然这很容易,但我希望这个说明可能对那些不是专业管理员的人有用。
答案 2 :(得分:2)
你的问题似乎有些混乱,所以你并不是100%清楚你实际上在寻找什么结果。
你所采取的步骤不起作用,你可以做的很少,但是如果你能解释你所追求的结果,那么我们可以提供另一种选择。
简短的回答是:
JETTY_USER
,那么jetty.sh
必须由root运行
根据您的操作系统,它将尝试以JETTY_USER
或su
至JETTY_USER
启动Jetty守护程序,两者都假设您以root身份运行。所以,这条道路不适合你。
以下是您可以做的事情:
如果您只是想以特定用户身份运行Jetty (例如jetty
)
JETTY_USER
jetty
登录并运行jetty.sh
如果您希望能够在端口80上运行但不能以root身份运行
init.d
和service
)如果您想所有用户 (或某些用户) 到开始< / em> jetty,但让运行作为1个特定用户
答案 3 :(得分:1)
检查${jetty.home}/logs/start.log
(或类似命名的日志文件)
这会告诉你它失败的原因。
此外,您可能希望查看可选的setuid支持。
http://www.eclipse.org/jetty/documentation/current/setuid.html
答案 4 :(得分:1)
我遇到了同样的问题;目录/var/run/jetty/
上存在正确的访问问题,并且jetty正在尝试在该目录中写入日志。
chmod 777 /var/run/jetty/
为我解决了这个问题。
答案 5 :(得分:1)
问题是由JETTY_RUN
的写访问权限引起的,默认设置为/var/run
,只有在每次重启(守护进程初始化)时才会有效地重新生成权限并将权限重置为root。实际上jetty.sh
已涵盖JETTY_RUN
,例如:
..默认为/ var / run,/ usr / var / run的第一个可用, 如果没有设置JETTY_BASE和/ tmp。
但是我的情况并非如此。该解决方案明确设置JETTY_RUN
/etc/init.d/jetty
指向jetty用户(组)具有写访问权限的目录(即/opt/jetty/temp
)。
ps:Debian 8 vs Jetty 9.4
答案 6 :(得分:1)
此问题的几个已发布的答案是正确的,可能需要组合使用。设置JETTY_USER也可以有一些间接要求。
以root用户身份运行jetty需要正确的权限,允许该用户访问某些文件/目录/树。这些文件系统对象包括<jetty-home>
树,/var/run/jetty
或JETTY_RUN
,JETTY_START_LOG
和JETTY_LOGS
设置为“/var/run/jetty
,如果不是默认为{{1} }}
通过设置JETTY_USER
(例如JETTY_USER=jetty
以非root用户身份运行OS服务)作为用户运行jetty也要求OS用户拥有有效的shell(例如/var/sh
})在/ etc / passwd中设置。一个好的做法是将该用户设置为具有无效的shell(例如/usr/sbin/nologin
),关闭此服务用户的安全漏洞以允许登录。在这种情况下,jetty启动环境还必须设置JETTY_SHELL(例如。JETTY_SHELL=/bin/sh
),为非登录会话提供一个shell,用于执行jetty可执行文件。
这些设置可以在服务启动脚本中进行(例如,/etc/init.d/jetty
默认注释掉它们),但最好在/etc/default/jetty
中设置它们,留下启动脚本因为它包含的逻辑和其他内容更好地保持不受干扰。
另请注意,以root身份运行jetty(例如将其作为服务启动而不更改已配置的jetty运行时用户)将创建root所拥有的文件(例如日志文件)。将运行时用户更改为非root用户可能会导致jetty失败,因为它尝试将非root用户重写为root拥有的文件。例如<jetty-base>/logs/<YYYY>_<MM>_<DD>.jetty.log
。将该文件的所有者更改为非root用户或删除它是解决该问题所必需的。
请注意,当jetty由于这些问题而无法启动时,它不会写入日志(无法访问,jetty实际上没有运行),仅输出Starting Jetty: FAILED <datetime>
。
答案 7 :(得分:0)
您所要做的就是更改/var/run/jetty
目录的所有权:
sudo chown -R jetty:jetty /var/run/jetty