2013-03-24 3 views
0

JAAS의 초보자이고 여전히 한 가지를 얻을 수 없습니다. 악의적 인 사용자가 주체와 주체를 수동으로 만들면 어떻게됩니까?JAAS - 악의적 인 주체 및 주요 생성

사용자가 위임 한 경우에 대비하여 제목/보안 주체에 대한 유효성을 검사해야합니까? 내가 본 적이있는 자습서 중 아무 것도 이것을 언급하지 않습니다. 이 예에서

봐 (jaasbook.com에서 CH02) :

Subject subject = new Subject(); 
Principal p = new SysAdminPrincipal(username); 
subject.getPrincipals().add(p); 
Subject.doAsPrivileged(subject, new PrivilegedAction() { ... 

그냥뿐만 아니라 작동 (적어도이의 :

SimpleCallbackHandler cb = new SimpleCallbackHandler(username, 
    password); 
LoginContext ctx = new LoginContext("chp02", cb); 
ctx.login(); 
Subject subject = ctx.getSubject(); 
System.out.println("Logged in " + subject); 
Subject.doAsPrivileged(subject, new PrivilegedAction() { ... 

그리고 나는이 일이 코드를 교체하는 경우 샘플 코드).

그렇지 않으면 나는 jaas를 전혀 사용하지 않을 것입니다. 감사합니다.

답변

0

신뢰할 수있는 코드와 신뢰할 수없는 코드는 구별됩니다.

믿을 수없는 JVM 내에서 코드를 실행할 수있게하려면 구성된 정책으로 JVM을 보호하고 SecurityManager를 활성화 한 채 실행해야합니다. 이것은 Java 애플릿 환경과 유사합니다. 이러한 환경 내에서 일반적으로 신뢰할 수있는 소스 코드 (선택적으로 암호로 서명 된 코드) 만 코드의 다른 부분을 실행하거나 호출 할 수 있도록 코드베이스의 일부를 잠글 것입니다.

Java 보안 내에서 권한 검사가 수행되면 전체 호출 스택이 검사되어 스택의 모든 부분에서 권한을 사용할 수 있는지 확인합니다.

이 경우, 주제를 AccessControlContext에 연관시키는 PrivilegedAction이 시작됩니다. 당신이이 작업을 수행하려면 기본 Java 보안 정책에서

javax.security.auth.AuthPermission "doAs"; 

,이 Java 확장을 설치 할 수있는 유일한 코드 : 그래서, 당신은 소스 코드에 보면 당신은 그 권한 검사를 수행 볼 수 있습니다 자신의 코드를 실행중인 SecurityManager와 함께 수동으로 설정해야합니다.

따라서 Subject 클래스는 AccessControlContext와 연결되어 있지 않으면 영향을 미치지 않으므로 보호되지 않습니다.

AccesssControlContext는 AuthPermission에 의해 보호됩니다.

AuthPermission의 설정은 JVM 시작시 구성되는 보안 Policy 및 SecurityManager에 의해 보호됩니다.

이 경우, SecurityManager를 사용하지 않거나 모든 코드베이스에 AllPermission을 부여하는 사용자 정의 정책을 실행하고 꼬 집없는 코드를 실행하도록 허용하면 큰 보안 문제가 발생합니다.

당신이 다음 정책 파일 등이 뜻을 뭔가 수행하는 코드 보호 신뢰할 수없는 코드를 실행하고 AccessControlContexts에 주제를 지정하려면 :

grant codebase "file://home/me/myapp.jar" signedby "me" { 
    javax.security.auth.AuthPermission "doAs"; 
} 

이 호출 스택을 포함하여, 단지 당신의 코드베이스 것을 보호를, 제목 할당을 수행 할 수 있습니다.

또는 앱에 배포하는 코드를 신뢰할 수 있는지 확인하십시오.대부분의 응용 프로그램이 호스트 환경 내에서 보호되고 원격 코드 실행을 허용하지 않는 99 % 배포 시나리오입니다.

+0

이것은 모두 옳은 것이며 아마도 밀도가 높거나 sth이지만 내 질문에 전혀 대답합니까? 내 관심사는이 책에서이 ch02 예제를 _with_ security manager _and_ 보안 정책으로 실행하면 정상적인 방법 (사용자 이름과 암호 확인은'LoginModule') 대신 직접 작성하여'Subject'를 가짜로 만들 수 있다는 것입니다. – Klinham