Jenkins: odmowa dostępu po włączeniu globalnego bezpieczeństwa. Jak przywrócić?

14

Potrzebujesz pomocy przy rozwiązywaniu tego problemu. Jak mogę rozwiązać ten problem? Myślę, że włączyłem globalne bezpieczeństwo i natychmiast zobaczyłem ten błąd.

(podczas uzyskiwania dostępu do localhost: 8080 dostaję następujące ...)

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)
serverFaulter
źródło

Odpowiedzi:

14

edytuj config.xml i zastąp następujące dwa tagi xml poniższą wersją. Następnie uruchom ponownie serwer.

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

Uwaga, istniejące tagi prawdopodobnie rozciągają się na kilka linii.

Peter Schuetze
źródło
A gdzie powinienem szukać config.xml?
sobi3ch
OK, znalazłem to. Normalnie jest włączone, $JENKINS_HOMEale w moim przypadku było puste. Na moim Ubuntu znalazłem go /var/lib/jenkins/.
sobi3ch
Chociaż jest to dobra odpowiedź na to pytanie, ta odpowiedź jest nieco bardziej ogólna. Jeśli zepsułeś ustawienia zabezpieczeń (lub dział IT zmienił LDAP) i musisz wrócić do zablokowanego serwera Jenkins, wyczyszczenie zabezpieczeń w pliku config.xml i dodanie powyższych znaczników xml sprawi, że znów zaczniesz.
gnuchu
11

Ten błąd pojawia się, ponieważ włączyłeś zabezpieczenia, ale nie masz żadnego użytkownika z uprawnieniami. Aby rozwiązać ten problem, najpierw edytuj config.xmli ustaw useSecuritynafalse

Zakładam, że chcesz użyć lokalnego uwierzytelnienia (lokalnego db użytkowników) zamiast zewnętrznego db (tj. LDAP). Wykonaj poniższe kroki zaczerpnięte z dokumentacji Jenkinsa .

  1. Przejdź do ekranu Konfiguruj zabezpieczenia globalne ( http: // server / jenkins / configureSecurity / ) i wybierz „włącz zabezpieczenia”. Alternatywny adres URL do wypróbowania to http: // server: 8080 / configureSecurity .
  2. Wybierz „własną bazę danych użytkowników Jenkins” jako dziedzinę bezpieczeństwa
  3. Umieść znacznik wyboru obok „Zezwalaj użytkownikom na rejestrację”
  4. Wybierz „Zabezpieczenia oparte na macierzy” jako autoryzację
  5. Daj anonimowemu użytkownikowi dostęp do odczytu
  6. W polu tekstowym pod tabelą wpisz swoją nazwę użytkownika (utworzysz ją później) i kliknij „dodaj”
  7. Daj sobie pełny dostęp, sprawdzając cały wiersz dla swojej nazwy użytkownika
  8. Przewiń do samego końca, kliknij „zapisz”

Testowane z wersją 1.566.


Sugeruję wycofanie zmian sugerowanych w zaakceptowanej odpowiedzi, ponieważ może to wpłynąć na powyższe kroki.

amertkara
źródło
Co ma <useSecurity>false</useSecurity>zrobić?
alex
@alex wyłącza zabezpieczenia w Jenkins, dzięki czemu można się zalogować i ponownie skonfigurować. jenkins.io/doc/book/system-administration/security/…
amertkara
2

Poprawka dwuliniowa (uruchamiana na serwerze):

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

Uwaga: Wymagane sudojest zezwolenie lub uruchom jako root.

Następnie zaloguj się do Jenkins jak zwykle i ponownie skonfiguruj zabezpieczenia.

kenorb
źródło
0

Podobny problem, z którym się spotkałem, ale z wtyczką GitHub OAuth, dzięki uzgodnionej odpowiedzi tutaj, mój problem i rozwiązanie wyjaśnione tutaj

sandejai
źródło
0

W systemie Windows: kiedy włączyłem LDAP w ramach globalnych zabezpieczeń, straciłem również uprawnienia administratora. z błędem, ponieważ „Brak dostępu do okna jenkins uprawnienia ogólnego / odczytu”.

W takim przypadku zachowaj istniejącą instancję, zainstaluj nową jenkins na innej maszynie lub maszynie wirtualnej. Skopiuj config.xml z Jenkins_Home i zastąp go config.xml z katalogu Jenkin_Home. Podczas wykonywania tej czynności upewnij się, że usługa Jenkins jest zatrzymana. po wymianie uruchom instancję i VOILA.

użytkownik3346620
źródło