diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/CommonConfigurationKeysPublic.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/CommonConfigurationKeysPublic.java index e12735039f3..5b20d96294a 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/CommonConfigurationKeysPublic.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/CommonConfigurationKeysPublic.java @@ -565,6 +565,9 @@ public class CommonConfigurationKeysPublic { public static final String HADOOP_SECURITY_DNS_NAMESERVER_KEY = "hadoop.security.dns.nameserver"; + public static final String HADOOP_HTTP_AUTHENTICATION_TYPE = + "hadoop.http.authentication.type"; + @Deprecated /** Only used by HttpServer. */ public static final String HADOOP_SSL_ENABLED_KEY = "hadoop.ssl.enabled"; diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/AppBlock.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/AppBlock.java index 44ed22345da..3ffe48571bd 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/AppBlock.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/AppBlock.java @@ -29,6 +29,7 @@ import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.CommonConfigurationKeys; import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.util.StringUtils; import org.apache.hadoop.yarn.api.ApplicationBaseProtocol; @@ -66,6 +67,8 @@ public class AppBlock extends HtmlBlock { protected ApplicationBaseProtocol appBaseProt; protected Configuration conf; protected ApplicationId appID = null; + private boolean unsecuredUI = true; + @Inject protected AppBlock(ApplicationBaseProtocol appBaseProt, ViewContext ctx, @@ -73,6 +76,9 @@ public class AppBlock extends HtmlBlock { super(ctx); this.appBaseProt = appBaseProt; this.conf = conf; + // check if UI is unsecured. + String httpAuth = conf.get(CommonConfigurationKeys.HADOOP_HTTP_AUTHENTICATION_TYPE); + this.unsecuredUI = (httpAuth != null) && httpAuth.equals("simple"); } @Override @@ -125,10 +131,16 @@ public class AppBlock extends HtmlBlock { setTitle(join("Application ", aid)); + // YARN-6890. for secured cluster allow anonymous UI access, application kill + // shouldn't be there. + boolean unsecuredUIForSecuredCluster = UserGroupInformation.isSecurityEnabled() + && this.unsecuredUI; + if (webUiType != null && webUiType.equals(YarnWebParams.RM_WEB_UI) && conf.getBoolean(YarnConfiguration.RM_WEBAPP_UI_ACTIONS_ENABLED, - YarnConfiguration.DEFAULT_RM_WEBAPP_UI_ACTIONS_ENABLED)) { + YarnConfiguration.DEFAULT_RM_WEBAPP_UI_ACTIONS_ENABLED) + && !unsecuredUIForSecuredCluster) { // Application Kill html.div() .button()