2015-05-19 16 views
23

Tôi đang sử dụng JConsole để truy cập MBean đang chạy.Bỏ qua yêu cầu JConsole cho tên người dùng/mật khẩu - khi sử dụng mô-đun đăng nhập tùy chỉnh Jaas với JMX để xử lý ủy quyền và xác thực

Các MBean sử dụng một module đăng nhập tùy chỉnh JAAS và đang chạy với lệnh sau:

java -classpath UserLGUGroupHandlingApplication.jar;MBeanSecure.jar 
-com.sun.management.jmxremote.login.config=management.properties 
-Djava.security.auth.login.config=./sample_jaas.config 
com.test.running.RunningImplementation 

Với file management.properties tìm kiếm như thế này:

com.sun.management.jmxremote.access.file=jmxremote.access 
com.sun.management.jmxremote=true 
com.sun.management.jmxremote.authenticate=true 
com.sun.management.jmxremote.port=1234 
com.sun.management.jmxremote.login.config=Sample 
com.sun.management.jmxremote.ssl=false 
com.sun.management.jmxremote.ssl.need.client.auth=false 

và sample_jaas.config:

Sample { 
    test.module.AETTLoginModule required debug=true; 
}; 

và sau đó người dùng sẽ truy cập quy trình đang chạy này bằng cách đăng nhập vào throug h JConsole từ dòng lệnh.

jconsole -debug //or just jconsole 

Người dùng chọn 'kết nối từ xa', với RemoteProcess 'localhost: 1234'

Các LoginModule xử lý các xác nhận người sử dụng và thiết lập gốc dựa trên người sử dụng hiện đang đăng nhập vào Windows, được sử dụng để truy vấn logic ủy quyền riêng biệt để xác định cấp truy cập.

Những gì tôi muốn xảy ra: enteres

  1. tài jconsole vào cmd
  2. Cửa sổ jconsole mở ra.
  3. Người dùng nhập địa chỉ của quá trình, ví dụ: "localhost: 1234"
  4. Người dùng không nhập tên người dùng hoặc mật khẩu (vì điều này là không bắt buộc vì ủy quyền được xử lý bởi mô-đun đăng nhập tùy chỉnh jaas).
  5. Mô-đun xác định xem người dùng có ghi đè, chỉ đọc hoặc không có quyền truy cập hay không.
  6. Cửa sổ Jconsole để mở quy trình hoặc không đăng nhập được.

Các Vấn đề:

Để truy cập vào quá trình jmx trong cửa sổ jconsole tôi phải nhập tên người dùng và mật khẩu giả, ví dụ U: a, P: a, nếu không tôi nhận được lỗi sau:

java.lang.SecurityException: Authentication failed! Credentials required 
    at com.sun.jmx.remote.security.JMXPluggableAuthenticator.authenticationFailure(JMXPluggableAuthenticator.java:193) 
    at com.sun.jmx.remote.security.JMXPluggableAuthenticator.authenticate(JMXPluggableAuthenticator.java:145) 
    at sun.management.jmxremote.ConnectorBootstrap$AccessFileCheckerAuthenticator.authenticate(ConnectorBootstrap.java:201) 
    at javax.management.remote.rmi.RMIServerImpl.doNewClient(RMIServerImpl.java:213) 
    at javax.management.remote.rmi.RMIServerImpl.newClient(RMIServerImpl.java:180) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:303) 
    at sun.rmi.transport.Transport$1.run(Transport.java:159) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 
    at java.lang.Thread.run(Thread.java:662) 
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255) 
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233) 
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142) 
    at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source) 
    at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2327) 
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:277) 
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:225) 
    at sun.tools.jconsole.ProxyClient.tryConnect(ProxyClient.java:334) 
    at sun.tools.jconsole.ProxyClient.connect(ProxyClient.java:296) 
    at sun.tools.jconsole.VMPanel$2.run(VMPanel.java:280) 

Câu hỏi

Đối với các module đăng nhập JAAS để chạy tôi cần tập sau:

-Dcom.sun.management.jmxremote.authenticate=true 

Nhưng , điều này cũng tạo ra một điều kiện trong JConsole, nơi các trường username và passowrd phải được mở trong trường.

Nếu điều này được đặt thành false, mô-đun đăng nhập sẽ không bao giờ được gọi.

Có thể một trong hai mở rộng chức năng jconsole cho một trường hợp đặc biệt, áp dụng một thiết lập cấu hình, hoặc kích hoạt một module JAAS đăng nhập mà không cần phải thiết lập:

-Dcom.sun.management.jmxremote.authenticate=true 

Để ngăn chặn sự cần thiết phải bước vào một tên truy nhập và mật khẩu trong các lĩnh vực sau tô sáng bên dưới:

enter image description here

tôi đang tìm kiếm một giải pháp tương tự như một trong những chứng minh here. Nhưng không cần người dùng nhập vào trường tên người dùng hoặc mật khẩu. EDIT: Ngoài ra, để làm rõ, điều này sẽ cần phải được thực hiện mà không cần sửa đổi phía khách hàng JCONSOLE, do đó, hoàn toàn bằng cách sử dụng thay đổi phía máy chủ và các thiết lập.

Trả lời

4

Đi qua số link này. Xem trường hợp 3 đặc biệt, nó có thể giúp bạn.

***** cập nhật thêm sau khi làm rõ thêm về câu hỏi được yêu cầu *****************
Điều cơ bản bạn đang cố gắng đạt được là bỏ qua (bảo mật JAAS) cho một kết nối khách hàng cụ thể là JCONSOLE trong trường hợp của bạn .... Tôi sẽ đề nghị hoặc: - 1) Có hai cổng cho máy chủ JMX: bảo mật và không an toàn ... sử dụng cổng không an toàn cho JCONSOLE hoặc
2) trong trường hợp bạn đang viết mô-đun JAAS tùy chỉnh của riêng bạn, hãy thử mã để bỏ qua kết nối cho máy khách cụ thể trong phương thức login()-Tôi không chắc liệu điều này có khả thi hay không vì bạn sẽ biết bối cảnh yêu cầu ...

+1

Cảm ơn bạn, tuy nhiên, câu hỏi của tôi là cụ thể về sửa đổi cần jconsole cho người sử dụng đầu vào theo yêu cầu. Nghiên cứu điển hình tập trung vào JaasLoginModule và mã phía máy khách. – Loco234

+0

Vui lòng không đăng câu trả lời chỉ vì các liên kết có thể bị hỏng. – NathanOliver

+0

Re: chỉnh sửa. Tôi tò mò muốn biết liệu có cách tiếp cận thẳng về phía trước này hay không, vì việc sử dụng mô-đun đăng nhập Jaas là một yêu cầu chung. Nó sẽ có vẻ lạ để chỉ giới hạn người dùng và mật khẩu đầu vào thông tin xác thực bằng cách sử dụng các lĩnh vực trong Jconsole. Suy nghĩ tức thì của tôi là trỏ đến tệp cấu hình jaas trong khi thiết lập com.sun.management.jmxremote.authenticate = false. Tạo ngữ cảnh được xử lý bởi một tập lệnh riêng biệt được gọi trong loginmodule, bỏ qua sự cần thiết cho các thông tin người dùng được kiểm tra vì chúng sẽ dựa trên người dùng hiện đang đăng nhập. – Loco234

0

Hãy thử cách này:

https://blogs.oracle.com/alanb/entry/one_password_to_rule_them giả định sau đây không phải là những gì bạn muốn (dựa trên câu trả lời của @ ag112)

-J-Djmx.remote.x.password.file =/path/to/file/jmx.password và sau đó đặt tên người dùng/thông tin đăng nhập của bạn với không gian tại đó.

+0

Cảm ơn, nhưng nó không phải là thiết lập của một tập tin mật khẩu. Thay vào đó, sự cần thiết phải nhập chi tiết tên người dùng và mật khẩu trong khung nhìn jconsole, nơi xác thực được xử lý bởi mô-đun jaas. Vì vậy, ngay cả khi các trường đầy, đầu vào sẽ bị hủy vì mô-đun đăng nhập jaas xử lý dữ liệu người dùng thay thế. – Loco234

+0

Từ liên kết, bạn không thể chỉ định mô-đun đăng nhập của riêng mình? -Dcom.sun.management.jmxremote.login.config = SunConfig -Djava.security.auth.login.config = ldap.config – Optional

+0

Có, tôi có thể chỉ định mô-đun đăng nhập của riêng mình, nhưng chỉ có thể kích hoạt nó bằng com.sun.management.jmxremote.authenticate = true setting. Vấn đề là, Jconsole yêu cầu đầu vào người dùng intop các trường tên người dùng và mật khẩu, mặc dù chúng không được xem xét trong loginmodule. – Loco234

0

tôi có thêm câu trả lời khác, từ những nốt nhạc như tôi tìm thấy dưới đây:

Điều hướng đến dụ máy chủ bạn muốn kết nối từ xa (không có userid/mật khẩu). Điều hướng cá thể máy chủ 'server.xml'. Tìm kiếm từ khóa, bạn có thể tìm thấy như dưới đây

Nếu đây được cấu hình trong trường hợp máy chủ, nó có thể được theo dõi mà không cần bất kỳ truy cập:

Sử dụng dưới chuỗi kết nối để truy cập jconsole cho điều khiển từ xa quá trình.

dịch vụ: jmx: rmi: //10.10.10.11: 8082/jndi/rmi: //10.10.10.11: 8081/máy chủ

Các vấn đề liên quan