Avatar billede ihtezaz Praktikant
23. november 2003 - 14:48 Der er 17 kommentarer og
2 løsninger

Kan nogen giv mig en kort præsentation af RMI security og hvornår

Kan nogen giv mig en kort præsentation af RMI security og hvornår det er nødvendigt at implementer det. Jeg tænker på RMI security manager. 

Der må også gives henvisninger til hvilke klasser der benyttes. 

På forhånd tak.
Avatar billede arne_v Ekspert
23. november 2003 - 14:54 #1
Der er meget lidt at forklare.

Du sætter:

System.setSecurityManager(new RMISecurityManager());

ind i både client og server.

Angiver:

-Djava.security.policy=noget.policy

ved opstart af både client og server.

Og angiver passende security i noget.policy ...
Avatar billede ihtezaz Praktikant
23. november 2003 - 15:05 #2
Hvor skal jeg angiv "-Djava.security.policy=noget.policy", i min main metode ?  og skal den - bindestreg i starten med ?

Ok fint indtil videre, men hvad kan jeg sikre mig imod ved at lave en security policy ?
Avatar billede arne_v Ekspert
23. november 2003 - 15:09 #3
Det er en option til start af programmet:

java -classpath noget.jar -Djava.security.policy=noget.policy DitProgram
Avatar billede dsj Nybegynder
23. november 2003 - 15:10 #4
RMI og sikkerhed er noget af det mest irriterende at arbejde med. Man skal tillade alt RMI foretager sig udover localhost, dette være sig tilslutte, modtage forbindelser, modtage og sende.

Jeg har prøvet at åbne for kun de nødvendige funktioner, hvilket viste sig ikke at virke. En exception blev smidt hvor jeg fik at vide, at det krævede tilladelse til connecte til et RMI-register på en anden maskine end localhost. Dette gjorde gav jeg så tilladelse til, men virke gjorde det stadig ikke. Den eneste måde jeg har fået det til at virke på uden besvær er at give tilladelse til alt. Hvis du sidder og bare skal have skidtet til at virke uden for megen besvær, kan du gøre som beskrevet nedenfor, dog skal du være opmærksom på at al sikkerhed er slået fra. Hvis du sørger for at lukke de porte RMI-registrene anvender med mod internettet firewall eller router, skulle de værste sikkerhedsproblemer være overkommet.

Du opretter en fil (simpel tekst-fil) med navnet 'rmi.policy' med følgende indhold:

grant {
  permission java.security.AllPermission;
};

Det første du gør i main-metoden på både klient- og server-siden som arne beskriver er at sætte en SecurityManager:

System.setSecurityManager(new RMISecurityManager());

Herefter starter du applikationerne med følgende parametre:

-Djava.security.manager -Djava.security.policy=rmi.policy

Ex.: java.exe -classpath="..." -Djava.security.manager -Djava.security.policy=rmi.policy stien.til.min.Klasse
Avatar billede arne_v Ekspert
23. november 2003 - 15:18 #5
Security er nødvendigt, hvis du kontrollere hvem der har adgang til
din RMI service.

Security er nødvendig, hvis du vil beskytte dig mod ondsindet kode.

Lad os sige at du får denne lille fikse RMI klient som du kan installere
på din PC og få seneste sports nyheder vist løbende. Samtidigt læse
klienten lige alle dine filer på din harddisk og sender dem til serveren.
Ups. Derfor skal man eksplicit grante den adgang som man nu tør
give applikationen.
Avatar billede arne_v Ekspert
23. november 2003 - 15:19 #6
Det bør kunne lade sig gøre ikke at grante all permissions.
Avatar billede ihtezaz Praktikant
23. november 2003 - 15:27 #7
Ok lyder meget interessant, foreløbig tak til jeg begge. Vender tilbage skal lige teste det.
Avatar billede arne_v Ekspert
23. november 2003 - 15:28 #8
Så vil jeg ligge et svar.
Avatar billede dsj Nybegynder
23. november 2003 - 15:31 #9
Det kan det sikkert også, men hvis nu bare det skal virke uden besvær, så er det løsningen. RMI er fyldt med udokumenterede begræsninger, og derfor kan man let komme til at sidde fast i et problem. To eksempler er:

1. Det er kun muligt at have ét RMI-register startet i samme JVM, man kan altså ikke i samme applikation binde to registre til hver deres port.
2. Det er ikke muligt at binde eller unbinde objeker i registre andre steder end på localhost, man kan altså kunne binde sine Remote's i et RMI-register kørende på localhost.
Avatar billede ihtezaz Praktikant
23. november 2003 - 15:41 #10
Er det korrekt forstået, at det stor i security i RMI, går på at give den bruger der skal anvende klient delen, muligheden for at grante permisions han synes han tør grante.
Avatar billede arne_v Ekspert
23. november 2003 - 15:47 #11
Principielt gælder det samme for server p.g.a. muligheden for callback !
Avatar billede arne_v Ekspert
23. november 2003 - 15:48 #12
Derudover er der spørgsmålet om hvem der har lov at bruge serveren.
Avatar billede arne_v Ekspert
23. november 2003 - 15:50 #13
Umiddelbart vil jeg sige at til interne løsninger behøver man ikke
sig så meget om det security og at til eksterne løsninger vil jeg idag
anbefale web service fremfor RMI. Men de var ikke opfundet da RMI
blev designet.
Avatar billede ihtezaz Praktikant
23. november 2003 - 15:50 #14
Du mener hvilke klienter man giver retten til at bruge serveren ?
Hvilken klasse gøre man brug af der ?
Avatar billede arne_v Ekspert
23. november 2003 - 15:52 #15
Samme metode - du angiver bare i din policy fil hvilke IP adresser
serveren vil acceptere connections fra.
Avatar billede dsj Nybegynder
23. november 2003 - 15:52 #16
Det handler nu især også om at beskytte din server. Mest af alt er det jo klienten der kalder metoder på objekter serveren har bundet. Klienten skal bare sørge for at få åbnet præcis de nødvendige tilladelser for at kunne connecte til serveren og udføre de ønskede funktioner. For serveren gælder det om at være tilstrækkelig beskyttet mod afvikling af ondsindet. Hvis serveren udvikles ud fra et princip om at den ikke kalder metoder på klienten, men kun at klienten kalder metoder på serveren, burde du være nogenlunde sikker.

Som nævnt er det ikke muligt for klienter at ændre i serverens RMI-register, hvorfor det ikke just er let at afvikle ondsindet kode. Noget andet der kunne hjælpe sikkerheden var at binde RMI-registeret til en anden port end default rmi-porten 1099, og i stedet til f.eks. 1100 eller 10000 for den sags skyld. Det gør at eventuelle hackere ikke kan regne ud, at det er et RMI-register der kører på den givne port.
Avatar billede ihtezaz Praktikant
23. november 2003 - 16:07 #17
En sidste spørgsmål for at være sikker på, jeg har forstået princippet:
Når server og klient delen udvikles, sørger man for at lave én policy fil, der fortæller, hvilke operationer der må udføres på klienten, samt hvilke klienter der må opret forbindelse til serveren.
Avatar billede dsj Nybegynder
23. november 2003 - 16:18 #18
Du skal vel bruge en polizy-fil til henholdsvis klienten og serveren. Hvis du har en firewall, kan du gøre præcis det samme med den, som hvis du sætter begrænsningerne i en policy-fil.
Avatar billede arne_v Ekspert
23. november 2003 - 16:21 #19
Normalt vil der være forskellig policy fil på client og server fordi
der kræves forskellig permissions.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester