簡體   English   中英

無法使用sudo以其他用戶身份執行命令

[英]Cannot execute command as another user with 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 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:對不起,英語不好。 謝謝!

當我從命令行嘗試此操作時,只要提供正確的密碼即可使用。 (在您的情況下,正確的密碼是Tomcat帳戶的密碼;請參閱man sudo 。)

因此,我建議您檢查以下內容:

  • 嘗試從命令行運行完全相同的Shell腳本。
  • 在命令行上檢查您是否具有正確的Tomcat用戶名,並回顯了正確的密碼:
    • mprev0所述,Tomcat帳戶名稱取決於系統,並且也可能取決於您的Tomcat版本。
    • 用戶名不正確時收到另一條錯誤消息……但是YMMV。
  • 檢查ignore_local_sudoerssudo策略中是否無效。
  • 檢查requirettysudo策略中是否無效。
  • 檢查sudo策略中的visiblepw無效。
  • 檢查Tomcat用戶在sudoers文件中是否具有適當的條目。
  • 如果您在具有SELinux的系統上以強制模式運行,請嘗試暫時將其禁用(!)

有關sudo策略的更多詳細信息,請參見man sudoers (請注意,從文檔中尚不清楚所提到的3個策略選項如何與-S選項交互。)


我要指出的是,您所做的不是很安全。 具有shell訪問權限的人可能可以通過運行ps -efl | grep echo清除密碼。 ps -efl | grep echo (如果他們在正確的時間運行它...)

您可以通過使用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雄貓

這將返回如下內容:

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:全部

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM