在将JBoss AS作为* nix服务运行时,权限被拒绝

时间:2014-07-21 13:52:54

标签: java linux service jboss permissions

主要问题

我已成功设置一个JBoss登台服务器作为Linux服务运行(Debian发行版,更具体地说是一个Linux Mint 15)。

当我运行服务时(不使用root profile = no sudo):

~ $ service jboss start

一切正常,除了我曾经创建一个文件以写入某些报告内容的模块,并且由于权限限制,似乎文件创建被拒绝。

我创建新File的代码的来源如下:

// My Report class constructor
public class Report

   private BufferedWriter writer;

   public Report() throws IOException
   {
      final File reportFile =
         new File("report-" + new SimpleDateFormat("dd-MMM-yy-HH-mm").format(new Date()) + ".txt");

      AccessController.doPrivileged(new PrivilegedExceptionAction<Void>()
      {
         public Void run() throws IOException
         {
            writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(reportFile)));
            return null;
         }
      });
   }
...
}


public class ReportGenerator {
   ...
   public void createNewReport() {
      //Here is where the Report is created
      Report report = new Report();
      ...
   }
}

所有的痛苦都来自于我作为* nix服务启动AS这一事实,但对我来说这似乎很奇怪,因为我已经完成了所有可以制作的指令以及下面的小提示。

我试图绕过此安全限制

  • 我已将 jboss-user 设置为jboss服务脚本的所有者:

    ~ $ sudo chown jboss-user:jboss-group /etc/init.d/jboss
    
  • 我试图以一种简单的方式运行该服务:

    ~ $ service jboss start
    

    然后尝试确保它以 jboss-user 作为用户运行:

    ~ $ sudo -u jboss-user service jboss start
    
  • 在一些调试会话之后,我意识到最初{<1}}是在根文件夹下创建的(“ / “),所以我设法初始化 user.dir 系统属性并将其设置为 jboss-user下的目录路径( / report 主目录(以确保用户具有读/写权限):

    reportFile

    JAVA_OPTS="${JAVA_OPTS} -Duser.dir="/home/jboss-user/report"" 表示报告文件下的所有用户都允许所有操作:

      

    drwxrwxrwx 9 jboss-user jboss-user 4096 juil。 21 10:16报告

  • 我添加了ls -l /home/jboss-user并声明了安全策略文件:

    SecurityManager

    /home/jboss-user/.java.policy 具有以下内容,(授予所有权限):

    JAVA_OPTS="${JAVA_OPTS} -Djava.security.manager -Djava.security.policy=/home/jboss-user/.java.policy"
    

    还尝试明确添加文件权限

    grant {
      permission java.security.AllPermission;
    };
    

在应用了上述所有技巧之后,我仍然无法创建我的文件,而且仍然使用:

进行堆叠
grant codeBase "file:${jboss.home}/*" {
  permission java.io.FilePermission "${user.home}${/}*", "write, read";
};
grant {
  permission java.security.AllPermission;
};

我还尝试使用目录权限,jboss服务脚本所有者,java策略规则,但这些规则都没有成功。

我应该指出的另一个附录是,基本上从启动脚本运行JBoss AS时没有问题,我可以成功创建文件。 < / p>

1 个答案:

答案 0 :(得分:0)

据说您在系统上创建了一个jboss用户。我想这是因为您使用的是路径/home/jboss-user/report

这意味着如果您运行命令grep -n "jboss-user" /etc/passwd,您应该在输出中看到一些内容,表明1)系统上有一个jboss-user,以及2)该用户的用户主目录是{ {1}}。

您在OP中提到您尝试使用命令/home/jboss-user启动服务。

但是这个命令并不是真正用jboss-user启动服务,而是exo用户。试试这个:

sudo -u exo service jboss start

此外,sudo -u jboss-user service jboss start 的输出是多少?看起来ls -a /home/jboss-user目录上的文件权限应该允许操作,但如果/home/jboss-user/report上的权限不允许/home/jboss-user用户访问exo目录,那么可能是问题。