Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用sudo以另一个用户的身份执行命令_Java_Linux_Tomcat_Sudo - Fatal编程技术网

Java 无法使用sudo以另一个用户的身份执行命令

Java 无法使用sudo以另一个用户的身份执行命令,java,linux,tomcat,sudo,Java,Linux,Tomcat,Sudo,我有一段代码,在tomcat上运行: try { Process p = Runtime.getRuntime().exec("sh /home/user/script.sh"); p.waitFor(); BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); BufferedReader errorReader = new BufferedRe

我有一段代码,在tomcat上运行:

try {
    Process p = Runtime.getRuntime().exec("sh /home/user/script.sh");
    p.waitFor();
    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
    BufferedReader errorReader = new BufferedReader(new InputStreamReader(p.getErrorStream()));

    StringBuilder result = new StringBuilder();
    String line = "";
    while ((line = reader.readLine()) != null) {
        result.append(line).append('\n');
    }

    while ((line = errorReader.readLine()) != null) {
        System.err.println(line);
    }
    return result.toString();
} catch (IOException | InterruptedException e) {
    System.err.println(e.getMessage());
}
和我的
script.sh
文件:

#/bin/sh
echo 'USER_PASSWORD'| sudo -S -u USER ls
在命令行中,脚本执行得非常出色,我看到了结果

但是当从tomcat执行它时,我得到以下消息:

[sudo] password for tomcat: Sorry, try again.
[sudo] password for tomcat:
sudo: 1 incorrect password attempt
我不能解决这个问题。我需要你的帮助


对不起,我英语不好。谢谢

当我从命令行尝试此操作时,如果我提供了正确的密码,它就会起作用。(在您的情况下,正确的密码是Tomcat帐户的密码;请参阅
man sudo

因此,我建议您检查以下内容:

  • 尝试从命令行运行完全相同的shell脚本
  • 检查您在命令行上是否有正确的Tomcat用户名,并回显正确的密码:
    • 如所述,Tomcat帐户名取决于系统,也可能取决于您的Tomcat版本
    • 当用户名不正确时,我会收到不同的错误消息。。。但是YMMV
  • 检查
    sudo
    策略中的
    ignore\u local\u sudoers
    是否无效
  • 检查
    requirety
    sudo
    策略中是否无效
  • 检查
    visiblepw
    sudo
    策略中是否无效
  • 检查Tomcat用户在
    sudoers
    文件中是否有适当的条目
  • 如果您在SELinux处于强制模式的系统上运行,请尝试暂时禁用该模式(!)
有关
sudo
策略的更多详细信息,请参见
mansudoers
。(请注意,从文档中不清楚所述的3个策略选项如何与
-S
选项交互。)


我想指出,你所做的不是很安全。通过运行
ps-efl | grep echo
,具有shell访问权限的用户可以清楚地看到密码。(如果他们在正确的时间运行……)

您可以通过使用
Process
为您提供一个从Java向其中写入密码的流来保护密码,从而避免使用
echo
命令

一个更重要的问题是,如果Tomcat帐户被破坏或有人试图破坏您的Tomcat服务器,允许Tomcat用户运行
sudo
命令会使您的系统处于风险之中。想象一下,如果黑客能够诱使Tomcat运行,会发生什么:

   echo tomcat-passwd | sudo -S -u root rm -rf /

当我从命令行尝试此操作时,当我提供正确的密码时,它就会工作。(在您的情况下,正确的密码是Tomcat帐户的密码;请参阅
man sudo

因此,我建议您检查以下内容:

  • 尝试从命令行运行完全相同的shell脚本
  • 检查您在命令行上是否有正确的Tomcat用户名,并回显正确的密码:
    • 如所述,Tomcat帐户名取决于系统,也可能取决于您的Tomcat版本
    • 当用户名不正确时,我会收到不同的错误消息。。。但是YMMV
  • 检查
    sudo
    策略中的
    ignore\u local\u sudoers
    是否无效
  • 检查
    requirety
    sudo
    策略中是否无效
  • 检查
    visiblepw
    sudo
    策略中是否无效
  • 检查Tomcat用户在
    sudoers
    文件中是否有适当的条目
  • 如果您在SELinux处于强制模式的系统上运行,请尝试暂时禁用该模式(!)
有关
sudo
策略的更多详细信息,请参见
mansudoers
。(请注意,从文档中不清楚所述的3个策略选项如何与
-S
选项交互。)


我想指出,你所做的不是很安全。通过运行
ps-efl | grep echo
,具有shell访问权限的用户可以清楚地看到密码。(如果他们在正确的时间运行……)

您可以通过使用
Process
为您提供一个从Java向其中写入密码的流来保护密码,从而避免使用
echo
命令

一个更重要的问题是,如果Tomcat帐户被破坏或有人试图破坏您的Tomcat服务器,允许Tomcat用户运行
sudo
命令会使您的系统处于风险之中。想象一下,如果黑客能够诱使Tomcat运行,会发生什么:

   echo tomcat-passwd | sudo -S -u root rm -rf /

我猜出现这个问题是因为Tomcat进程使用的用户(权限不同)与您手动执行命令的用户不同

通常,tomcat用户被命名为“tomcat”或类似“tomcat7”、“tomcat8”等,具体取决于版本

要解决您的问题,您必须为tomcat用户添加sudo权限

如果您不知道tomcat用户的确切姓名,可以在tomcat运行时在终端中使用以下命令进行检查:

ps aux | grep-v grep | grep tomcat

它将返回如下内容:

tomcat9 26840 1.4 49.1 7920356 1904504?Sl APR26201:44/usr/lib/jvm/java/bin/java

如您所见,tomcat用户的名称将出现在显示输出的第一列中

然后,您为该用户添加sudo权限,并通过在文件“/etc/sudoers”中添加以下行启用无需密码即可使用sudo(您可以通过在终端中输入“sudo visudo”进行编辑,这是编辑该文件的某种快捷方式)

tomcat9 ALL=(ALL)NOPASSWD:ALL


我猜出现这个问题是因为Tomcat进程使用的用户(权限不同)与您手动执行命令的用户不同

通常,tomcat用户被命名为“tomcat”或类似“tomcat7”、“tomcat8”等,具体取决于版本

要解决您的问题,您必须为tom添加sudo权限