Skip to content

Commit

Permalink
[SPARK-41958][CORE] Disallow arbitrary custom classpath with proxy us…
Browse files Browse the repository at this point in the history
…er in cluster mode

This PR proposes to disallow arbitrary custom classpath with proxy user in cluster mode by default.

To avoid arbitrary classpath in spark cluster.

Yes. User should reenable this feature by `spark.submit.proxyUser.allowCustomClasspathInClusterMode`.

Manually tested.

Closes apache#39474 from Ngone51/dev.

Lead-authored-by: Peter Toth <[email protected]>
Co-authored-by: Yi Wu <[email protected]>
Signed-off-by: Hyukjin Kwon <[email protected]>
  • Loading branch information
2 people authored and yhcast0 committed Dec 19, 2023
1 parent 3df986f commit ce4e7b7
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 0 deletions.
16 changes: 16 additions & 0 deletions core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,10 @@ private[spark] class SparkSubmit extends Logging {
val isKubernetesClient = clusterManager == KUBERNETES && deployMode == CLIENT
val isKubernetesClusterModeDriver = isKubernetesClient &&
sparkConf.getBoolean("spark.kubernetes.submitInDriver", false)
val isCustomClasspathInClusterModeDisallowed =
!sparkConf.get(ALLOW_CUSTOM_CLASSPATH_BY_PROXY_USER_IN_CLUSTER_MODE) &&
args.proxyUser != null &&
(isYarnCluster || isMesosCluster || isStandAloneCluster || isKubernetesCluster)

if (!isMesosCluster && !isStandAloneCluster) {
// Resolve maven dependencies if there are any and add classpath to jars. Add them to py-files
Expand Down Expand Up @@ -860,6 +864,14 @@ private[spark] class SparkSubmit extends Logging {
if (args.verbose) {
childArgs ++= Seq("--verbose")
}

if (childClasspath.nonEmpty && isCustomClasspathInClusterModeDisallowed) {
childClasspath.clear()
logWarning(s"Ignore classpath ${childClasspath.mkString(", ")} with proxy user specified " +
s"in Cluster mode when ${ALLOW_CUSTOM_CLASSPATH_BY_PROXY_USER_IN_CLUSTER_MODE.key} is " +
s"disabled")
}

(childArgs.toSeq, childClasspath.toSeq, sparkConf, childMainClass)
}

Expand Down Expand Up @@ -913,6 +925,10 @@ private[spark] class SparkSubmit extends Logging {
logInfo(s"Classpath elements:\n${childClasspath.mkString("\n")}")
logInfo("\n")
}
assert(!(args.deployMode == "cluster" && args.proxyUser != null && childClasspath.nonEmpty) ||
sparkConf.get(ALLOW_CUSTOM_CLASSPATH_BY_PROXY_USER_IN_CLUSTER_MODE),
s"Classpath of spark-submit should not change in cluster mode if proxy user is specified " +
s"when ${ALLOW_CUSTOM_CLASSPATH_BY_PROXY_USER_IN_CLUSTER_MODE.key} is disabled")
val loader = getSubmitClassLoader(sparkConf)
for (jar <- childClasspath) {
addJarToClasspath(jar, loader)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2256,4 +2256,11 @@ package object config {
.version("3.2.0")
.stringConf
.createOptional

private[spark] val ALLOW_CUSTOM_CLASSPATH_BY_PROXY_USER_IN_CLUSTER_MODE =
ConfigBuilder("spark.submit.proxyUser.allowCustomClasspathInClusterMode")
.internal()
.version("3.4.0")
.booleanConf
.createWithDefault(false)
}

0 comments on commit ce4e7b7

Please sign in to comment.