通过Java模拟Linux中的用户

时间:2019-05-08 08:26:54

标签: java linux sudo impersonation

我有一个在Linux服务器上运行的Java应用程序,并执行一系列操作(创建目录,复制几个文件,检查应用程序是否正在运行等)。我正在使用log4j2记录消息,并且运行良好。

我需要读取一个帐户并将其模拟为该帐户(无密码sudo切换用户),然后执行上述一系列操作。已获得执行无密码sudo的权限。

我已经使用外壳(首先切换用户,然后执行Java程序)来完成此操作,但是我提出了这个问题以了解是否可以在Java程序中完成此操作?

Execution:  java -jar xyz.jar parm1  

为了进行评估,我更改了Java代码以运行如下所示的shell命令(我正在使用processbuilder):

当我运行Java程序时,日志仅显示到sudo shell命令执行时为止,并且在该步骤之后未显示任何日志。

有没有办法在切换用户(模拟)之前和之后保留所有日志? (我正在使用log4j2并写入对其他用户具有写访问权的日志文件。)

请分享是否有已知解决方案?

[EDIT]添加用于触发sudo的Java代码段

public boolean switchUser(String account)  {

        ShellCommand shellCommand = new ShellCommand();

        List<String> cmd = new ArrayList<String>();
        cmd.add("su");
            //....I construct asu command for the passed account here. I have passwordless sudo su access and tested fine manually
        //I've some logger messages here
        shellCommand.runCommand(cmd);    //Class with method that uses ProcessBuilder and executes shell command        
    }

[EDIT]我想当我从Java触发su时,它将在Java等待它完成时打开一个新的shell。这可能是之后没有可见日志的原因。因此,一种解决方案是将其包装在外壳中,使用命令执行su以运行jar。

0 个答案:

没有答案