Jenkins: Truy cập bị từ chối sau khi bật bảo mật toàn cầu. Làm thế nào để hoàn nguyên?


14

Cần giúp đỡ để tìm ra cái này. Làm thế nào tôi có thể khắc phục vấn đề này? Tôi nghĩ rằng tôi đã kích hoạt bảo mật toàn cầu và thấy lỗi này ngay lập tức.

(trong khi truy cập localhost: 8080 tôi nhận được ...)

A problem occurred while processing the request. Please check our bug tracker to see if a similar problem has already been reported. If it is already reported, please vote and put a comment on it to let us gauge the impact of the problem. If you think this is a new issue, please file a new issue. When you file an issue, make sure to add the entire stack trace, along with the version of Jenkins and relevant plugins. The users list might be also useful in understanding what has happened.

Stack trace
hudson.security.AccessDeniedException2: anonymous is missing the Overall/Read permission
    at hudson.security.ACL.checkPermission(ACL.java:54)
    at hudson.model.Node.checkPermission(Node.java:418)
    at jenkins.model.Jenkins.getTarget(Jenkins.java:3658)
    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:656)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.java:858)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.java:631)
    at org.kohsuke.stapler.Stapler.service(Stapler.java:225)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1494)
    at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:96)
    at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:88)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
    at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:48)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
    at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
    at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
    at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:46)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
    at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1474)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
    at org.eclipse.jetty.server.Server.handle(Server.java:370)
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
    at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949)
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1011)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
    at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
    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:695)

Câu trả lời:


14

chỉnh sửa tệp config.xml và thay thế hai thẻ xml sau bằng phiên bản bên dưới. Sau đó khởi động lại máy chủ của bạn.

  <authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
  <securityRealm class="hudson.security.SecurityRealm$None"/>

Coi chừng, các thẻ hiện tại của bạn có thể trải dài trên một vài dòng mỗi dòng.


Và tôi nên tìm ở config.xmlđâu?
sobi3ch

OK tôi tìm thấy nó .. bình thường được đặt $JENKINS_HOMEnhưng trong trường hợp của tôi nó trống rỗng. Trên Ubuntu của tôi, tôi tìm thấy nó trong /var/lib/jenkins/.
sobi3ch

Trong khi một câu trả lời tốt cho câu hỏi này, câu trả lời này cũng chung chung hơn một chút. Nếu bạn đã làm hỏng các cài đặt bảo mật của mình (hoặc CNTT đã thay đổi LDAP) và bạn cần quay lại với Jenkins bị khóa, xóa sạch bảo mật trong config.xml và thêm vào các thẻ xml ở trên sẽ giúp bạn quay lại.
gnuchu

11

Bạn đang gặp lỗi này vì bạn đã bật bảo mật nhưng không có bất kỳ người dùng nào có quyền. Để giải quyết vấn đề này, trước tiên hãy chỉnh sửa config.xmlvà đặt useSecuritythànhfalse

Tôi giả sử rằng bạn muốn sử dụng xác thực cục bộ (db cục bộ của người dùng) thay vì db bên ngoài (nghĩa là LDAP). Thực hiện theo các bước dưới đây được lấy từ Tài liệu Jenkins .

  1. Chuyển đến màn hình Cấu hình Bảo mật Toàn cầu ( http: // server / jenkins / configureSecurity / ) và chọn "bật bảo mật". Một URL thay thế để thử là http: // server: 8080 / configureSecurity .
  2. Chọn "Cơ sở dữ liệu người dùng của Jenkins" làm lĩnh vực bảo mật
  3. Đặt dấu kiểm bên cạnh "Cho phép người dùng đăng ký"
  4. Chọn "Bảo mật dựa trên ma trận" làm ủy quyền
  5. Cung cấp cho người dùng ẩn danh quyền truy cập đọc
  6. Trong hộp văn bản bên dưới bảng, nhập tên người dùng của bạn (bạn sẽ tạo cái này sau) và nhấp vào "thêm"
  7. Cung cấp cho bạn quyền truy cập đầy đủ bằng cách kiểm tra toàn bộ hàng cho tên người dùng của bạn
  8. Cuộn tất cả xuống phía dưới, nhấp vào "lưu"

Đã thử nghiệm với phiên bản 1.566.


Tôi đề nghị hoàn nguyên các thay đổi được đề xuất trong câu trả lời được chấp nhận vì nó có khả năng ảnh hưởng đến các bước trên.


Không gì <useSecurity>false</useSecurity>làm gì?
alex

@alex nó vô hiệu hóa bảo mật trong Jenkins để bạn có thể đăng nhập và cấu hình lại. jenkins.io/doc/book/system-adftime/security/ từ
amertkara

2

Sửa lỗi hai lớp (chạy trên máy chủ):

sudo ex +g/useSecurity/d +g/authorizationStrategy/d -scwq /var/lib/jenkins/config.xml
sudo /etc/init.d/jenkins restart

Lưu ý: Cần có sự sudocho phép hoặc chạy dưới dạng root.

Sau đó đăng nhập vào Jenkins như bình thường và cấu hình lại bảo mật.


0

Vấn đề tương tự tôi gặp phải nhưng với plugin GitHub OAuth, nhờ câu trả lời đồng ý ở đây, vấn đề và giải pháp của tôi đã giải thích ở đây


0

Trong Windows: Khi tôi kích hoạt LDAP trong Bảo mật toàn cầu, tôi cũng mất quyền quản trị viên. với lỗi là "Truy cập bị từ chối bị thiếu các cửa sổ jenkins cho phép Tổng thể / Đọc".

Trong trường hợp như vậy, Vui lòng giữ lại phiên bản hiện có, cài đặt jenkins mới trên máy hoặc máy ảo nào đó. Sao chép tệp config.xml từ Jenkins_Home và thay thế nó bằng config.xml từ thư mục Jenkin_Home của bạn. Trong khi thực hiện điều này, đảm bảo dịch vụ Jenkins bị dừng. Sau khi thay thế, Bắt đầu cá thể và VOILA.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.