我已成功设置一个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>
答案 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
目录,那么可能是问题。