我很清楚,从安全角度来看,运行 tomcat6 确实很糟糕 - 并且会使其运行的环境面临各种安全风险和攻击媒介。话虽如此:
当我将 /etc/init.d/tomcat6 中的条目更改为
TOMCAT6_USER=root
然后运行
sudo /etc/init.d/tomcat6 start
我明白了
[fail]
/var/log/tomcat6 下的日志中没有任何内容写入,并且 /var/run 下没有为 tomcat6 创建任何条目
我该如何诊断出了什么问题?
附加 - 请注意 catalina.err 和 catalina.out 尚未创建。
您想要这样做的原因是(a)这是一个在开发箱上运行的虚拟机,并且(b)它在 chroot jail 中执行一个进程,该进程只有在由 root 执行时才会运行(c)在 chroot jail 中运行的进程是从外部获取的软件包
答案1
直接运行 Tomcat 并不比运行任何其他应用程序服务器更不安全。
更确切地说,常识性安全概念将保证您的设备安全。您绝对应该使用某种防火墙,尤其是当您的设备面向公众时。
如果您部署的应用程序不安全且容易受到 SQL 注入的攻击,那么即使是最昂贵的 servlet 容器也无法拯救您,您只会得到糟糕的代码。
不要以 root 身份运行 tomcat6。我实在想不出你为什么需要/想要这样做,如果你有“权限问题”,那么你做错了。
我维护过(并将继续维护)许多以各自 tomcat 用户身份运行的 tomcat 5 和 6 服务器,部署 webapps 毫无问题。以 root 身份运行服务器的安全风险太大,而且通常是完全不必要的。
如果您真的想弄清楚它到底是什么,catalina.out 和 catalina.err 文件可能会包含更多信息,但我认为以 root 身份运行是一个潜在的致命想法,所以我可能会将其保留为默认的 tomcat 系统用户。
答案2
这里提出的问题似乎是 - 如何调试 shell 脚本以查看发生了什么 - 要做到这一点你可以这样运行它:
sudo bash -x -v /etc/init.d/tomcat6 start
并阅读输出来查看发生了什么。
实际上,Ubuntu 似乎已设置为不允许这种事情发生。大量目录的所有权已设置为仅由 tomcat6 用户(即非 root 用户)拥有。要查看它们是什么 - 运行命令
find / -user tomcat6
出于安全考虑,出于尊重 Ubuntu/Tomcat6 打包者的目的 - 我不会发布你之后会做什么。