{"record":{"id":"e299e9fd35127a99","repo":"apache/flink","slug":"could-not-register-security-manager-due-to-no-perm","errorCode":null,"errorMessage":"Could not register security manager due to no permission to set a SecurityManager. Either update your existing SecurityManager to allow the permission or do not use security manager features (e.g., '%s: %s', '%s: %s')","messagePattern":"Could not register security manager due to no permission to set a SecurityManager\\. Either update your existing SecurityManager to allow the permission or do not use security manager features \\(e\\.g\\., '(.+?): (.+?)', '(.+?): (.+?)'\\)","errorType":"validation","errorClass":"IllegalConfigurationException","httpStatus":null,"severity":"error","filePath":"flink-core/src/main/java/org/apache/flink/core/security/FlinkSecurityManager.java","lineNumber":113,"sourceCode":"            return null;\n        }\n        LOG.info(\n                \"FlinkSecurityManager is created with {} user system exit mode and {} exit\",\n                userSystemExitMode,\n                haltOnSystemExit ? \"forceful\" : \"graceful\");\n        // Add more configuration parameters that need user security manager (currently only for\n        // system exit).\n        return new FlinkSecurityManager(userSystemExitMode, haltOnSystemExit);\n    }\n\n    public static void setFromConfiguration(Configuration configuration) {\n        final FlinkSecurityManager flinkSecurityManager =\n                FlinkSecurityManager.fromConfiguration(configuration);\n        if (flinkSecurityManager != null) {\n            try {\n                System.setSecurityManager(flinkSecurityManager);\n            } catch (Exception e) {\n                throw new IllegalConfigurationException(\n                        String.format(\n                                \"Could not register security manager due to no permission to \"\n                                        + \"set a SecurityManager. Either update your existing \"\n                                        + \"SecurityManager to allow the permission or do not use \"\n                                        + \"security manager features (e.g., '%s: %s', '%s: %s')\",\n                                ClusterOptions.INTERCEPT_USER_SYSTEM_EXIT.key(),\n                                ClusterOptions.INTERCEPT_USER_SYSTEM_EXIT.defaultValue(),\n                                ClusterOptions.HALT_ON_FATAL_ERROR.key(),\n                                ClusterOptions.HALT_ON_FATAL_ERROR.defaultValue()),\n                        e);\n            }\n        }\n        FlinkSecurityManager.flinkSecurityManager = flinkSecurityManager;\n    }\n\n    public static void monitorUserSystemExitForCurrentThread() {\n        if (flinkSecurityManager != null) {\n            flinkSecurityManager.monitorUserSystemExit();","sourceCodeStart":95,"sourceCodeEnd":131,"githubUrl":"https://github.com/apache/flink/blob/2f3c205e9266cb30240eb7f4fdab15cad629a70f/flink-core/src/main/java/org/apache/flink/core/security/FlinkSecurityManager.java#L95-L131","documentation":"FlinkSecurityManager.setFromConfiguration installs a JVM-wide SecurityManager (used to intercept System.exit and halt-on-fatal-error behavior). If System.setSecurityManager throws — most commonly because the runtime or an already-installed manager forbids it — Flink wraps it in IllegalConfigurationException, suggesting either allowing the permission or disabling the features (config keys printed in the message, cluster.intercept-user-system-exit / cluster.halt-on-fatal-error).","triggerScenarios":"Starting on JDK 17+ where installing a SecurityManager is disallowed by default (System.setSecurityManager throws UnsupportedOperationException unless -Djava.security.manager=allow); or running under an existing SecurityManager whose policy denies setSecurityManager permission.","commonSituations":"Migrating a Flink deployment from Java 8/11 to Java 17/21 without adding -Djava.security.manager=allow to env.java.opts.all; running Flink inside a restricted container/launcher that installs its own SecurityManager; future JDKs removing SecurityManager support entirely.","solutions":["On JDK 17+, add -Djava.security.manager=allow to env.java.opts.all (JAVA_OPTS) in flink-conf.yaml.","If you do not need system-exit interception, disable the features: set cluster.intercept-user-system-exit: DISABLED so Flink does not install its SecurityManager.","If an external SecurityManager is present, grant it the setSecurityManager permission via the JVM policy file instead of working around it.","Long term, plan to run without SecurityManager features — they are deprecated for removal in the JDK."],"exampleFix":"# before (flink-conf.yaml, Java 17+)\ncluster.intercept-user-system-exit: TASK_EXECUTORS  # IllegalConfigurationException at startup\n\n# after\nenv.java.opts.all: \"-Djava.security.manager=allow\"\n# or: cluster.intercept-user-system-exit: DISABLED","handlingStrategy":"fallback","validationCode":"// before starting Flink on JDK 17+, ensure the JVM will allow it:\n// env.java.opts.all: -Djava.security.manager=allow\n// or avoid installing the manager entirely:\n// cluster.intercept-user-system-exit: DISABLED","typeGuard":null,"tryCatchPattern":"try {\n    FlinkSecurityManager.setFromConfiguration(conf);\n} catch (IllegalConfigurationException e) {\n    // do not swallow at startup: fix JVM flags or disable intercept options, then restart\n    throw e;\n}","preventionTips":["On Java 17+ always set -Djava.security.manager=allow when using security-manager features.","Track JDK deprecation of SecurityManager; prefer the DISABLED modes for exit interception where possible.","When running under a foreign SecurityManager, ensure its policy grants setSecurityManager."],"tags":["security","configuration","flink-core","java-17","startup"],"backgroundTag":null,"analyzedSha":"2f3c205e9266cb30240eb7f4fdab15cad629a70f","analyzedAt":"2026-08-14T08:48:24.518Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}