Merge pull request #12668 from rmuir/configure_script
Add path.scripts directory
This commit is contained in:
commit
0ecd7b8ccf
|
@ -122,6 +122,7 @@ final class Security {
|
||||||
addPath(policy, environment.libFile(), "read,readlink");
|
addPath(policy, environment.libFile(), "read,readlink");
|
||||||
addPath(policy, environment.pluginsFile(), "read,readlink");
|
addPath(policy, environment.pluginsFile(), "read,readlink");
|
||||||
addPath(policy, environment.configFile(), "read,readlink");
|
addPath(policy, environment.configFile(), "read,readlink");
|
||||||
|
addPath(policy, environment.scriptsFile(), "read,readlink");
|
||||||
// read-write dirs
|
// read-write dirs
|
||||||
addPath(policy, environment.tmpFile(), "read,readlink,write,delete");
|
addPath(policy, environment.tmpFile(), "read,readlink,write,delete");
|
||||||
addPath(policy, environment.logsFile(), "read,readlink,write,delete");
|
addPath(policy, environment.logsFile(), "read,readlink,write,delete");
|
||||||
|
|
|
@ -53,6 +53,8 @@ public class Environment {
|
||||||
|
|
||||||
private final Path configFile;
|
private final Path configFile;
|
||||||
|
|
||||||
|
private final Path scriptsFile;
|
||||||
|
|
||||||
private final Path pluginsFile;
|
private final Path pluginsFile;
|
||||||
|
|
||||||
/** location of bin/, used by plugin manager */
|
/** location of bin/, used by plugin manager */
|
||||||
|
@ -100,6 +102,12 @@ public class Environment {
|
||||||
configFile = homeFile.resolve("config");
|
configFile = homeFile.resolve("config");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (settings.get("path.scripts") != null) {
|
||||||
|
scriptsFile = PathUtils.get(cleanPath(settings.get("path.scripts")));
|
||||||
|
} else {
|
||||||
|
scriptsFile = configFile.resolve("scripts");
|
||||||
|
}
|
||||||
|
|
||||||
if (settings.get("path.plugins") != null) {
|
if (settings.get("path.plugins") != null) {
|
||||||
pluginsFile = PathUtils.get(cleanPath(settings.get("path.plugins")));
|
pluginsFile = PathUtils.get(cleanPath(settings.get("path.plugins")));
|
||||||
} else {
|
} else {
|
||||||
|
@ -233,6 +241,13 @@ public class Environment {
|
||||||
return configFile;
|
return configFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Location of on-disk scripts
|
||||||
|
*/
|
||||||
|
public Path scriptsFile() {
|
||||||
|
return scriptsFile;
|
||||||
|
}
|
||||||
|
|
||||||
public Path pluginsFile() {
|
public Path pluginsFile() {
|
||||||
return pluginsFile;
|
return pluginsFile;
|
||||||
}
|
}
|
||||||
|
|
|
@ -171,7 +171,7 @@ public class ScriptService extends AbstractComponent implements Closeable {
|
||||||
this.scriptModes = new ScriptModes(this.scriptEnginesByLang, scriptContextRegistry, settings);
|
this.scriptModes = new ScriptModes(this.scriptEnginesByLang, scriptContextRegistry, settings);
|
||||||
|
|
||||||
// add file watcher for static scripts
|
// add file watcher for static scripts
|
||||||
scriptsDirectory = env.configFile().resolve("scripts");
|
scriptsDirectory = env.scriptsFile();
|
||||||
if (logger.isTraceEnabled()) {
|
if (logger.isTraceEnabled()) {
|
||||||
logger.trace("Using scripts directory [{}] ", scriptsDirectory);
|
logger.trace("Using scripts directory [{}] ", scriptsDirectory);
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,6 +74,7 @@ public class SecurityTests extends ESTestCase {
|
||||||
Settings.Builder settingsBuilder = Settings.builder();
|
Settings.Builder settingsBuilder = Settings.builder();
|
||||||
settingsBuilder.put("path.home", esHome.resolve("home").toString());
|
settingsBuilder.put("path.home", esHome.resolve("home").toString());
|
||||||
settingsBuilder.put("path.conf", esHome.resolve("conf").toString());
|
settingsBuilder.put("path.conf", esHome.resolve("conf").toString());
|
||||||
|
settingsBuilder.put("path.scripts", esHome.resolve("scripts").toString());
|
||||||
settingsBuilder.put("path.plugins", esHome.resolve("plugins").toString());
|
settingsBuilder.put("path.plugins", esHome.resolve("plugins").toString());
|
||||||
settingsBuilder.putArray("path.data", esHome.resolve("data1").toString(), esHome.resolve("data2").toString());
|
settingsBuilder.putArray("path.data", esHome.resolve("data1").toString(), esHome.resolve("data2").toString());
|
||||||
settingsBuilder.put("path.logs", esHome.resolve("logs").toString());
|
settingsBuilder.put("path.logs", esHome.resolve("logs").toString());
|
||||||
|
@ -109,6 +110,8 @@ public class SecurityTests extends ESTestCase {
|
||||||
assertExactPermissions(new FilePermission(environment.libFile().toString(), "read,readlink"), permissions);
|
assertExactPermissions(new FilePermission(environment.libFile().toString(), "read,readlink"), permissions);
|
||||||
// config file: ro
|
// config file: ro
|
||||||
assertExactPermissions(new FilePermission(environment.configFile().toString(), "read,readlink"), permissions);
|
assertExactPermissions(new FilePermission(environment.configFile().toString(), "read,readlink"), permissions);
|
||||||
|
// scripts file: ro
|
||||||
|
assertExactPermissions(new FilePermission(environment.scriptsFile().toString(), "read,readlink"), permissions);
|
||||||
// plugins: ro
|
// plugins: ro
|
||||||
assertExactPermissions(new FilePermission(environment.pluginsFile().toString(), "read,readlink"), permissions);
|
assertExactPermissions(new FilePermission(environment.pluginsFile().toString(), "read,readlink"), permissions);
|
||||||
|
|
||||||
|
|
|
@ -85,10 +85,12 @@ supported scripting languages:
|
||||||
To increase security, Elasticsearch does not allow you to specify scripts for
|
To increase security, Elasticsearch does not allow you to specify scripts for
|
||||||
non-sandboxed languages with a request. Instead, scripts must be placed in the
|
non-sandboxed languages with a request. Instead, scripts must be placed in the
|
||||||
`scripts` directory inside the configuration directory (the directory where
|
`scripts` directory inside the configuration directory (the directory where
|
||||||
elasticsearch.yml is). Scripts placed into this directory will automatically be
|
elasticsearch.yml is). The default location of this `scripts` directory can be
|
||||||
picked up and be available to be used. Once a script has been placed in this
|
changed by setting `path.scripts` in elasticsearch.yml. Scripts placed into
|
||||||
directory, it can be referenced by name. For example, a script called
|
this directory will automatically be picked up and be available to be used.
|
||||||
`calculate-score.groovy` can be referenced in a request like this:
|
Once a script has been placed in this directory, it can be referenced by name.
|
||||||
|
For example, a script called `calculate-score.groovy` can be referenced in a
|
||||||
|
request like this:
|
||||||
|
|
||||||
[source,sh]
|
[source,sh]
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue