This is an automated email from the ASF dual-hosted git repository.

kirs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new a6a1b94  [Feature-#5128]Support turning off sudo permissions (#5129)
a6a1b94 is described below

commit a6a1b94df4f5c4d22845fe99f2f778ba53d60e5c
Author: guohaozhang <[email protected]>
AuthorDate: Mon Mar 29 11:07:39 2021 +0800

    [Feature-#5128]Support turning off sudo permissions (#5129)
    
    * [Feature-#5128]Support turning off sudo permissions
    
    * [Feature-#5128] without sudo permission do not create tenant user
---
 .../java/org/apache/dolphinscheduler/common/Constants.java  |  5 +++++
 .../apache/dolphinscheduler/common/utils/CommonUtils.java   |  7 +++++++
 .../org/apache/dolphinscheduler/common/utils/OSUtils.java   | 10 +++++++---
 .../src/main/resources/common.properties                    |  3 +++
 .../server/worker/processor/TaskExecuteProcessor.java       |  3 ++-
 .../server/worker/task/AbstractCommandExecutor.java         | 13 ++++++++-----
 6 files changed, 32 insertions(+), 9 deletions(-)

diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
index c4b6243..0a46a35 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
@@ -156,6 +156,11 @@ public final class Constants {
     public static final String DEVELOPMENT_STATE_DEFAULT_VALUE = "true";
 
     /**
+     * sudo enable
+     */
+    public static final String SUDO_ENABLE = "sudo.enable";
+
+    /**
      * string true
      */
     public static final String STRING_TRUE = "true";
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/CommonUtils.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/CommonUtils.java
index cf307b4..e68c342 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/CommonUtils.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/CommonUtils.java
@@ -69,6 +69,13 @@ public class CommonUtils {
     }
 
     /**
+     * @return sudo enable
+     */
+    public static boolean isSudoEnable() {
+        return PropertyUtils.getBoolean(Constants.SUDO_ENABLE, true);
+    }
+
+    /**
      * if upload resource is HDFS and kerberos startup is true , else false
      *
      * @return true if upload resource is HDFS and kerberos startup
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OSUtils.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OSUtils.java
index 92a06fe..09b4e06 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OSUtils.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OSUtils.java
@@ -22,12 +22,12 @@ import 
org.apache.dolphinscheduler.common.shell.ShellExecutor;
 
 import org.apache.commons.configuration.Configuration;
 
-import java.lang.management.OperatingSystemMXBean;
 import java.io.BufferedReader;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.lang.management.ManagementFactory;
+import java.lang.management.OperatingSystemMXBean;
 import java.lang.management.RuntimeMXBean;
 import java.math.RoundingMode;
 import java.text.DecimalFormat;
@@ -406,13 +406,17 @@ public class OSUtils {
     }
 
     /**
-     *  get sudo command
+     * get sudo command
+     *
      * @param tenantCode tenantCode
      * @param command command
      * @return result of sudo execute command
      */
     public static String getSudoCmd(String tenantCode, String command) {
-        return StringUtils.isEmpty(tenantCode) ? command : "sudo -u " + 
tenantCode + " " + command;
+        if (!CommonUtils.isSudoEnable() || StringUtils.isEmpty(tenantCode)) {
+            return command;
+        }
+        return String.format("sudo -u %s %s", tenantCode, command);
     }
 
     /**
diff --git a/dolphinscheduler-common/src/main/resources/common.properties 
b/dolphinscheduler-common/src/main/resources/common.properties
index 833e049..e46dd15 100644
--- a/dolphinscheduler-common/src/main/resources/common.properties
+++ b/dolphinscheduler-common/src/main/resources/common.properties
@@ -76,3 +76,6 @@ datasource.encryption.salt=!@#$%^&*
 
 # Network IP gets priority, default inner outer
 #dolphin.scheduler.network.priority.strategy=default
+
+# use sudo or not, if set true ,executing user is tenant user and deploy user 
need sudo permissions ; if set false, executing user is the deploy user, don't 
need sudo permissions.
+sudo.enable=true
diff --git 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteProcessor.java
 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteProcessor.java
index f03d86b..00f4956 100644
--- 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteProcessor.java
+++ 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskExecuteProcessor.java
@@ -20,6 +20,7 @@ package org.apache.dolphinscheduler.server.worker.processor;
 import org.apache.dolphinscheduler.common.enums.Event;
 import org.apache.dolphinscheduler.common.enums.ExecutionStatus;
 import org.apache.dolphinscheduler.common.enums.TaskType;
+import org.apache.dolphinscheduler.common.utils.CommonUtils;
 import org.apache.dolphinscheduler.common.utils.DateUtils;
 import org.apache.dolphinscheduler.common.utils.FileUtils;
 import org.apache.dolphinscheduler.common.utils.JSONUtils;
@@ -147,7 +148,7 @@ public class TaskExecuteProcessor implements 
NettyRequestProcessor {
         FileUtils.taskLoggerThreadLocal.set(taskLogger);
         try {
             FileUtils.createWorkDirIfAbsent(execLocalPath);
-            if (workerConfig.getWorkerTenantAutoCreate()) {
+            if (CommonUtils.isSudoEnable() && 
workerConfig.getWorkerTenantAutoCreate()) {
                 
OSUtils.createUserIfAbsent(taskExecutionContext.getTenantCode());
             }
         } catch (Throwable ex) {
diff --git 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java
 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java
index 392d279..88af2d7 100644
--- 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java
+++ 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractCommandExecutor.java
@@ -25,6 +25,7 @@ import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.enums.ExecutionStatus;
 import org.apache.dolphinscheduler.common.thread.Stopper;
 import org.apache.dolphinscheduler.common.thread.ThreadUtils;
+import org.apache.dolphinscheduler.common.utils.CommonUtils;
 import org.apache.dolphinscheduler.common.utils.HadoopUtils;
 import org.apache.dolphinscheduler.common.utils.LoggerUtils;
 import org.apache.dolphinscheduler.common.utils.OSUtils;
@@ -84,7 +85,7 @@ public abstract class AbstractCommandExecutor {
      * log list
      */
     protected final List<String> logBuffer;
-    
+
     protected boolean logOutputIsScuccess = false;
 
     /**
@@ -134,9 +135,11 @@ public abstract class AbstractCommandExecutor {
         processBuilder.redirectErrorStream(true);
 
         // setting up user to run commands
-        command.add("sudo");
-        command.add("-u");
-        command.add(taskExecutionContext.getTenantCode());
+        if (CommonUtils.isSudoEnable()) {
+            command.add("sudo");
+            command.add("-u");
+            command.add(taskExecutionContext.getTenantCode());
+        }
         command.add(commandInterpreter());
         command.addAll(commandOptions());
         command.add(commandFile);
@@ -595,4 +598,4 @@ public abstract class AbstractCommandExecutor {
     public void setTaskResultString(String taskResultString) {
         this.taskResultString = taskResultString;
     }
-}
\ No newline at end of file
+}

Reply via email to