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 (#722)

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]>

Signed-off-by: Hyukjin Kwon <[email protected]>
Co-authored-by: Peter Toth <[email protected]>
Co-authored-by: Yi Wu <[email protected]>
  • Loading branch information
3 people authored Dec 26, 2023
1 parent 3df986f commit 10fcfea
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 10fcfea

Please sign in to comment.