Úvod do Java SecurityManagera

Java Top

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

1. Prehľad

V tomto výučbe sa pozrieme na integrovanú bezpečnostnú infraštruktúru Javy, ktorá je v predvolenom nastavení zakázaná. Konkrétne preskúmame jeho hlavné komponenty, body rozšírenia a konfigurácie.

2. SecurityManager v akcii

Mohlo by to byť prekvapenie, ale predvolené SecurityManager nastavenia nepovoliťveľa štandardných operácií:

System.setSecurityManager (nový SecurityManager ()); nová URL ("// www.google.com"). openConnection (). connect ();

Tu programovo povolíme bezpečnostný dohľad s predvolenými nastaveniami a pokúsime sa pripojiť na google.com.

Potom dostaneme nasledujúcu výnimku:

java.security.AccessControlException: access denied ("java.net.SocketPermission" "www.google.com:80" "pripojiť, vyriešiť")

V štandardnej knižnici je množstvo ďalších prípadov použitia - napríklad čítanie vlastností systému, čítanie premenných prostredia, otvorenie súboru, reflexia a zmena miestneho nastavenia.

3. Prípad použitia

Táto bezpečnostná infraštruktúra je k dispozícii od verzie Java 1.0. Bolo to obdobie, keď boli applety - Java aplikácie zabudované do prehliadača - úplne bežné. Prirodzene, bolo potrebné obmedziť ich prístup k systémovým zdrojom.

V dnešnej dobe sú applety zastarané. Avšak vynucovanie bezpečnosti je stále aktuálnym konceptom, keď existuje situácia, keď sa kód tretej strany spustí v chránenom prostredí.

Zvážte napríklad, že máme inštanciu Tomcat, kde môžu klienti tretích strán hostovať ich webové aplikácie. Nechceme im umožniť vykonávať operácie ako System.exit () pretože by to ovplyvnilo ďalšie aplikácie a možno aj celé prostredie.

4. Dizajn

4.1. SecurityManager

Jednou z hlavných súčastí vstavanej bezpečnostnej infraštruktúry je java.lang SecurityManager. Má ich niekoľko checkXxx metódy ako checkConnect, ktorá vo vyššie uvedenom teste autorizovala náš pokus o pripojenie k službe Google. Všetci sú delegáti do checkPermission (java.security.Permission) metóda.

4.2. Povolenie

java.bezpečnosť.Povolenie inštancie znamenajú žiadosti o autorizáciu. Štandardné triedy JDK ich vytvárajú pre všetky potenciálne nebezpečné operácie (napríklad čítanie / zápis súboru, otváranie zásuviek atď.) A odovzdávajú ich SecurityManager na správne povolenie.

4.3. Konfigurácia

Povolenia definujeme v špeciálnom formáte politiky. Tieto povolenia majú formu: grant záznamy:

udeliť codeBase "súbor: $ {{java.ext.dirs}} / *" {povolenie java.security.AllPermission; };

The zdrojový kód vyššie uvedené pravidlo je voliteľné. Nemôžeme tam určiť vôbec žiadne pole alebo použiť podpísaný (integrovaný s príslušnými certifikátmi v sklade kľúčov) alebo principál (java.bezpečnosť.Principal pripojený k aktuálnemu vláknu cez javax.security.auth.Subject). Môžeme použiť ľubovoľnú kombináciu týchto pravidiel.

V predvolenom nastavení JVM načíta súbor spoločnej systémovej politiky umiestnený na <java.home> /lib/security/java.policy. Ak sme definovali nejaké miestne pravidlá pre používateľov v /.java.policy, JVM pripojí k systémovej politike.

Je tiež možné určiť súbor politiky pomocou príkazového riadku: -Djava.security.policy = / my / policy-file. Týmto spôsobom môžeme pripájať politiky k predtým načítaným systémovým a užívateľským politikám.

Na nahradenie všetkých systémových a používateľských politík (ak existujú) existuje špeciálna syntax - dvojité znamienko rovnosti: -Djava.security.policy == / my / policy-file

5. Príklad

Definujme vlastné povolenie:

public class CustomPermission extends BasicPermission {public CustomPermission (String name) {super (name); } verejné CustomPermission (názov reťazca, akcie reťazca) {super (názov, akcie); }}

a zdieľaná služba, ktorá by mala byť chránená:

public class Service {public static final String OPERATION = "my-operation"; public void operation () {SecurityManager securityManager = System.getSecurityManager (); if (securityManager! = null) {securityManager.checkPermission (new CustomPermission (OPERATION)); } System.out.println ("Operácia je vykonaná"); }}

Ak sa ho pokúsime spustiť s povoleným správcom zabezpečenia, vyvolá sa výnimka:

java.security.AccessControlException: access denied ("com.baeldung.security.manager.CustomPermission" "my-operation") na java.security.AccessControlContext.checkPermission (AccessControlContext.java:472) na java.security.AccessController.checkPermission ( AccessController.java:884) na java.lang.SecurityManager.checkPermission (SecurityManager.java:549) na com.baeldung.security.manager.Service.operation (Service.java:10)

Môžeme vytvárať svoje /.java.policy súbor s nasledujúcim obsahom a skúste aplikáciu znova spustiť:

udeliť codeBase "súbor:" {povolenie com.baeldung.security.manager.CustomPermission "my-operation"; };

Teraz to funguje dobre.

6. Záver

V tomto článku sme skontrolovali, ako je organizovaný zabudovaný bezpečnostný systém JDK a ako ho môžeme rozšíriť. Aj keď je cieľový prípad použitia pomerne zriedkavý, je dobré si to uvedomiť.

Úplný zdrojový kód tohto článku je ako obvykle k dispozícii na serveri GitHub.

Java dole

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

$config[zx-auto] not found$config[zx-overlay] not found