sudo -u(用户)cmd无法在bash脚本中工作

时间:2016-11-03 14:25:48

标签: bash shell tomcat sudo

我正在使用bash脚本。

此bash脚本必须使用sudo -u (B) cmd运行命令。

我使用用户A执行此脚本。

在我的/etc/sudoers中,我宣布了所有命令。

当我使用终端执行它时,一切都很好。

当我在tomcat服务器中使用java程序执行它时,我有错误。

我如何从我的java程序执行我的脚本:

command = "/path/my-script.sh arg1"

 private String executeCommand(String command) {

        StringBuffer output = new StringBuffer();

        Process p;
        try {
            p = Runtime.getRuntime().exec(command);
            p.waitFor();
            BufferedReader reader =
                    new BufferedReader(new InputStreamReader(p.getInputStream()));

            String line = "";
            while ((line = reader.readLine())!= null) {
                output.append(line + "\n");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return output.toString();

 }

在(终端或Java程序)的情况下,我执行这些命令:

user=$(whoami)
echo "[INFO]: user = $user"

结果:[INFO]: user = A

mkdircmd=$(sudo -u B mkdir -p $project_path)
return_mkdircmd=$?

echo "[INFO]: mkdircmd: $mkdircmd / return mkdircmd: $return_mkdircmd"

cpcmd=$(sudo -u B cp $file_path $project_path)
return_cpcmd=$?


echo "[INFO]: cpcmd: $cpcmd / return cpcmd: $return_cpcmd"

结果:

使用Tomcat服务器执行脚本

[INFO]: mkdircmd:  / return mkdircmd: 1
[INFO]: cpcmd:  / return cpcmd: 1

终端执行脚本(./myscript)

[INFO]: mkdircmd:  / return mkdircmd: 0
[INFO]: cpcmd:  / return cpcmd: 0

有人可以帮我弄清楚我的问题在哪里?

由于

1 个答案:

答案 0 :(得分:0)

调试问题将用户更改为tomcat(假设tomcat使用tomcat用户运行)

sudo su - tomcat

执行命令:

sudo -u B (cmd)

调试任何错误。您可能需要使用tomcat将/sbin/nologin中的/bin/bash /etc/passwd更新为su