无法使用sudo以其他用户身份执行命令

鲁斯兰·图马索夫(Ruslan Tumasov)

我有这段代码,正在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

我不能解决这个问题。我需要你的帮助。

PS:对不起,我的英语不好。谢谢!

Marko Previsic

我猜发生此问题是因为Tomcat进程正在以与您用来手动执行命令的用户(具有不同的权限)不同的用户(具有不同的权限)运行。

通常,取决于版本,tomcat用户的名称为“ tomcat”或类似“ tomcat7”,“ tomcat8”之类的名称。

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

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

ps aux | grep -v grep | grep雄猫

这将返回如下内容:

tomcat9 26840 1.4 49.1 7920356 1904504吗?Sl Apr26 201:44 / usr / lib / jvm / java / bin / java ...

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

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

tomcat9 ALL =(全部)NOPASSWD:全部

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章