| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | [[modules-scripting-security]]== Scripting and securityPainless and {es} implement layers of security to build a defense in depthstrategy for running scripts safely.Painless uses a fine-grained allowlist. Anything that is not part of theallowlist results in a compilation error. This capability is the first layer ofsecurity in a defense in depth strategy for scripting.The second layer of security is the https://www.oracle.com/java/technologies/javase/seccodeguide.html[Java Security Manager]. As part of its startupsequence, {es} enables the Java Security Manager to limit the actions thatportions of the code can take. <<modules-scripting-painless,Painless>> uses the Java Security Manager as an additional layer of defense to prevent scripts from doing things like writing files and listening to sockets.{es} uses{wikipedia}/Seccomp[seccomp] in Linux,https://www.chromium.org/developers/design-documents/sandbox/osx-sandboxing-design[Seatbelt]in macOS, andhttps://msdn.microsoft.com/en-us/library/windows/desktop/ms684147[ActiveProcessLimit]on Windows as additional security layers to prevent {es} from forking or running other processes.You can modify the following script settings to restrict the type of scriptsthat are allowed to run, and control the available {painless}/painless-contexts.html[contexts] that scripts can run in. Toimplement additional layers in your defense in depth strategy, follow the <<es-security-principles,{es} security principles>>.[[allowed-script-types-setting]][discrete]=== Allowed script types setting{es} supports two script types: `inline` and `stored`. By default, {es} is configured to run both types of scripts. To limit what type of scripts are run, set `script.allowed_types` to `inline` or `stored`. To prevent any scripts from running, set `script.allowed_types` to `none`.IMPORTANT: If you use {kib}, set `script.allowed_types` to `both` or `inline`.Some {kib} features rely on inline scripts and do not function as expectedif {es} does not allow inline scripts.For example, to run `inline` scripts but not `stored` scripts:[source,yaml]----script.allowed_types: inline----[[allowed-script-contexts-setting]][discrete]=== Allowed script contexts settingBy default, all script contexts are permitted. Use the `script.allowed_contexts`setting to specify the contexts that are allowed. To specify that no contextsare allowed, set `script.allowed_contexts` to `none`.For example, to allow scripts to run only in `scoring` and `update` contexts:[source,yaml]----script.allowed_contexts: score, update----
 |