在 Amaon EC2 上执行 Tomcat 8 webapp 时权限被拒绝

Gre*_*reg 5 java tomcat amazon-ec2 14.04

我找不到如何获得对 tomcat 文件夹的写入和读取权限。

我按照DigitalOcean 的教程设置 Tomcat。我唯一不同的是我使用了 Java 8 而不是 7,但我不认为这是导致问题的原因。

当我登录到 tomcat Web 应用程序管理器并上传战争时,我收到以下错误:

失败 - 部署上传失败,异常:java.io.FileNotFoundException:/opt/tomcat/webapps/SimpleServlet.war(权限被拒绝)

当我使用 Filezilla 连接到 EC2 并且我想将文件放入 webapps 文件夹时:

错误:/opt/tomcat/webapps/SimpleServlet.war:打开写入:权限被拒绝
错误:文件传输失败

的输出ls -la /opt/tomcat/webapps是:

total 28
drwxr-xr-x  7 root root 4096 Nov 20 09:19 .
drwxr-xr-x  9 root root 4096 Nov 28 16:34 ..
drwxr-xr-x 14 root root 4096 Nov 28 16:34 docs
drwxr-xr-x  6 root root 4096 Nov 28 16:34 examples
drwxr-xr-x  5 root root 4096 Nov 28 16:34 host-manager
drwxr-xr-x  5 root root 4096 Nov 28 16:34 manager
drwxr-xr-x  3 root root 4096 Nov 28 16:34 ROOT
Run Code Online (Sandbox Code Playgroud)

但这是在FileZilla中可以看到的文件夹结构

镜像文件zilla ec2结构

在教程中,我遵循了以下步骤:

然后新建一个tomcat用户。我们会让这个用户成为 tomcat 组的成员,主目录为 /opt/tomcat(我们将在其中安装 Tomcat),外壳为 /bin/false(因此没有人可以登录该帐户):

sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat
Run Code Online (Sandbox Code Playgroud)

这可能是问题吗?

Jen*_*rat 9

/opt/tomcat被声明为tomcat用户的主目录,但属于root用户(tomcat用户没有写权限)。

仔细阅读教程,尤其是权限部分,我对教程的质量感觉很复杂。它谈到在更改文件夹的权限时“授予 tomcat 用户对 conf 目录的写访问权限”。没有 web 应用服务器的用户对运行的软件的写权限对于生产用途似乎是合理的(利用 tomcat 进程的攻击者将无法修改软件),这也将阻止您使用 tomcat web 应用程序管理器部署应用程序.

我会去设置tomcatwebapps组:

chgrp -R tomcat /opt/tomcat/webapps
Run Code Online (Sandbox Code Playgroud)

当您需要部署新应用程序时,请为该组添加写入权限:

chmod -R g+w /opt/tomcat/webapps
Run Code Online (Sandbox Code Playgroud)

部署后再次删除:

chmod -R g-w /opt/tomcat/webapps
Run Code Online (Sandbox Code Playgroud)

(您将需要以超级用户权限运行这些命令,因此sudo根据需要添加前缀)。这也适合Tomcat 安全注意事项 HowTo

  • 终于有足够的声誉来投票你的问题。;) (2认同)