From 191f801f8c90802801ce48e8e022895d252a8bc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lorenzo=20Dematt=C3=A9?= Date: Mon, 17 Feb 2025 08:42:08 +0100 Subject: [PATCH] [Entitlements] Add logsDir to entitlement bootstrap parameters (#122605) While testing https://github.com/elastic/elasticsearch/pull/122591, I realized we need to grand read/write permission to the logs dir to server. This PR adds the `logsDir` to the bootstrap parameters, and uses it in the `server` policy. --- .../bootstrap/EntitlementBootstrap.java | 15 +++++++++------ .../initialization/EntitlementInitialization.java | 6 +++++- .../elasticsearch/bootstrap/Elasticsearch.java | 3 ++- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/libs/entitlement/src/main/java/org/elasticsearch/entitlement/bootstrap/EntitlementBootstrap.java b/libs/entitlement/src/main/java/org/elasticsearch/entitlement/bootstrap/EntitlementBootstrap.java index 19acd0decdca7..364c81bf2d263 100644 --- a/libs/entitlement/src/main/java/org/elasticsearch/entitlement/bootstrap/EntitlementBootstrap.java +++ b/libs/entitlement/src/main/java/org/elasticsearch/entitlement/bootstrap/EntitlementBootstrap.java @@ -38,7 +38,8 @@ public record BootstrapArgs( Function, String> pluginResolver, Path[] dataDirs, Path configDir, - Path tempDir + Path tempDir, + Path logsDir ) { public BootstrapArgs { requireNonNull(pluginPolicies); @@ -64,22 +65,24 @@ public static BootstrapArgs bootstrapArgs() { * * @param pluginPolicies a map holding policies for plugins (and modules), by plugin (or module) name. * @param pluginResolver a functor to map a Java Class to the plugin it belongs to (the plugin name). - * @param dataDirs data directories for Elasticsearch - * @param configDir the config directory for Elasticsearch - * @param tempDir the temp directory for Elasticsearch + * @param dataDirs data directories for Elasticsearch + * @param configDir the config directory for Elasticsearch + * @param tempDir the temp directory for Elasticsearch + * @param logsDir the log directory for Elasticsearch */ public static void bootstrap( Map pluginPolicies, Function, String> pluginResolver, Path[] dataDirs, Path configDir, - Path tempDir + Path tempDir, + Path logsDir ) { logger.debug("Loading entitlement agent"); if (EntitlementBootstrap.bootstrapArgs != null) { throw new IllegalStateException("plugin data is already set"); } - EntitlementBootstrap.bootstrapArgs = new BootstrapArgs(pluginPolicies, pluginResolver, dataDirs, configDir, tempDir); + EntitlementBootstrap.bootstrapArgs = new BootstrapArgs(pluginPolicies, pluginResolver, dataDirs, configDir, tempDir, logsDir); exportInitializationToAgent(); loadAgent(findAgentJar()); selfTest(); diff --git a/libs/entitlement/src/main/java/org/elasticsearch/entitlement/initialization/EntitlementInitialization.java b/libs/entitlement/src/main/java/org/elasticsearch/entitlement/initialization/EntitlementInitialization.java index 9c8e5c33632d7..97b7eed01cc2c 100644 --- a/libs/entitlement/src/main/java/org/elasticsearch/entitlement/initialization/EntitlementInitialization.java +++ b/libs/entitlement/src/main/java/org/elasticsearch/entitlement/initialization/EntitlementInitialization.java @@ -129,6 +129,7 @@ private static PolicyManager createPolicyManager() { EntitlementBootstrap.BootstrapArgs bootstrapArgs = EntitlementBootstrap.bootstrapArgs(); Map pluginPolicies = bootstrapArgs.pluginPolicies(); var pathLookup = new PathLookup(bootstrapArgs.configDir(), bootstrapArgs.dataDirs(), bootstrapArgs.tempDir()); + Path logsDir = EntitlementBootstrap.bootstrapArgs().logsDir(); // TODO(ES-10031): Decide what goes in the elasticsearch default policy and extend it var serverPolicy = new Policy( @@ -147,7 +148,10 @@ private static PolicyManager createPolicyManager() { new LoadNativeLibrariesEntitlement(), new ManageThreadsEntitlement(), new FilesEntitlement( - List.of(FilesEntitlement.FileData.ofPath(EntitlementBootstrap.bootstrapArgs().tempDir(), READ_WRITE)) + List.of( + FilesEntitlement.FileData.ofPath(EntitlementBootstrap.bootstrapArgs().tempDir(), READ_WRITE), + FilesEntitlement.FileData.ofPath(EntitlementBootstrap.bootstrapArgs().logsDir(), READ_WRITE) + ) ) ) ), diff --git a/server/src/main/java/org/elasticsearch/bootstrap/Elasticsearch.java b/server/src/main/java/org/elasticsearch/bootstrap/Elasticsearch.java index ea7a0b5dcf47b..6e07c7012cc06 100644 --- a/server/src/main/java/org/elasticsearch/bootstrap/Elasticsearch.java +++ b/server/src/main/java/org/elasticsearch/bootstrap/Elasticsearch.java @@ -247,7 +247,8 @@ private static void initPhase2(Bootstrap bootstrap) throws IOException { pluginsResolver::resolveClassToPluginName, nodeEnv.dataDirs(), nodeEnv.configDir(), - nodeEnv.tmpDir() + nodeEnv.tmpDir(), + nodeEnv.logsDir() ); } else { assert RuntimeVersionFeature.isSecurityManagerAvailable();