在java代码中以root身份执行shell脚本

时间:2014-12-26 07:29:03

标签: java shell

如何在此代码中以。root文件的形式运行? 在主要部分我从欲望目录运行我的.sh文件。但是当我跑步时,我得到了许可。我希望我的.sh代码以root身份运行。有什么办法吗?



    import java.io.IOException;
    import org.apache.commons.exec.CommandLine;
    import org.apache.commons.exec.DefaultExecutor;
    import org.apache.commons.exec.ExecuteException;

    public class TestScript {
        int iExitValue;
        String sCommandString;

        public void runScript(String command){
            sCommandString = command;
            CommandLine oCmdLine = CommandLine.parse(sCommandString);
            DefaultExecutor oDefaultExecutor = new DefaultExecutor();
            oDefaultExecutor.setExitValue(0);
            try {
                iExitValue = oDefaultExecutor.execute(oCmdLine);
            } catch (ExecuteException e) {
                // TODO Auto-generated catch block
                System.err.println("Execution failed.");
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                System.err.println("permission denied.");
                e.printStackTrace();
            }
        }

        public static void main(String args[]){
            TestScript testScript = new TestScript();
            testScript.runScript("sh /home/deepak/Desktop/ftpusers.sh");
        }
    }




2 个答案:

答案 0 :(得分:1)

您应该以root身份运行Java应用程序,或者使用某些sudo命令执行ftpusers.sh。我可以在这里看到两种可能的选择:

  1. 如果您的应用程序是使用X服务器启动的,则可以使用ftpusers.shgksudo或类似方式调用kdesudo - 它会提示用户是否可以将应用程序作为root并可能要求输入密码。
  2. 如果您的应用程序是控制台应用程序,则必须使用sudo命令并手动将此命令中的IO重定向到应用程序的IO
  3. 请注意,此方法不适用于所有环境(例如,sudo可能不可用),因此我只需将"permission denied."消息更改为"Application foor must be started as root",并要求用户运行具有适当权限的Java应用程序

答案 1 :(得分:0)

以root用户身份运行java程序,或运行setuid脚本来提升权限。如果是后者,请确保没有未经授权的用户可以访问该脚本。