我正在使用 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
有人可以帮我找出我的问题在哪里吗?
谢谢
最佳答案
要调试问题,请将用户更改为 tomcat(假设 tomcat 正在使用 tomcat 用户运行)
sudo su - tomcat
执行命令:
sudo -u B (cmd)
调试任何错误。您可能必须将 /etc/passwd
中的 /sbin/nologin
更新为 /bin/bash
为 su
使用 tomcat。
关于bash - sudo -u(用户)cmd 在 bash 脚本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40404050/