Дженкинс: Доступ запрещен после включения глобальной безопасности. Как вернуть?

14

Нужна помощь в выяснении этого. Как я могу исправить эту проблему? Я думаю, что я включил глобальную безопасность и сразу увидел эту ошибку.

(при доступе к localhost: 8080 я получаю следующее ...)

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
источник

Ответы:

14

отредактируйте файл config.xml и замените следующие два тега XML следующей версией. Затем перезагрузите ваш сервер.

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

Остерегайтесь, ваши существующие теги, вероятно, занимают несколько строк каждая.

Питер Шютце
источник
И где мне искать config.xml?
sobi3ch
ОК, я нашел это .. обычно включен, $JENKINS_HOMEно в моем случае он был пустым. На моем Ubuntu я нашел это в /var/lib/jenkins/.
sobi3ch
В то время как хороший ответ на этот вопрос, этот ответ также немного более общий. Если вы испортили настройки безопасности (или ИТ-специалисты изменили LDAP), и вам нужно вернуться в заблокированный Jenkins, стирание безопасности в config.xml и добавление вышеупомянутых тегов xml поможет вам снова.
gnuchu
11

Вы получаете эту ошибку, потому что вы включили защиту, но у вас нет пользователя с разрешениями. Чтобы решить эту проблему, сначала измените config.xmlи набор useSecurityдляfalse

Я предполагаю, что вы хотите использовать локальную аутентификацию (локальную базу данных пользователей), а не внешнюю базу данных (т. Е. LDAP). Следуйте инструкциям ниже, взятым из документации Jenkins .

  1. Перейдите к экрану настройки глобальной безопасности ( http: // server / jenkins / configureSecurity / ) и выберите «включить безопасность». Альтернативный URL-адрес, который нужно попробовать, - http: // server: 8080 / configureSecurity .
  2. Выберите "собственную пользовательскую базу данных Jenkins" в качестве области безопасности
  3. Поставьте галочку напротив «Разрешить пользователям регистрироваться»
  4. Выберите «Безопасность на основе матрицы» в качестве авторизации
  5. Предоставить анонимному пользователю доступ на чтение
  6. В текстовом поле под таблицей введите свое имя пользователя (вы создадите его позже) и нажмите «добавить»
  7. Дайте себе полный доступ, проверив всю строку на ваше имя пользователя
  8. Прокрутите весь путь до конца, нажмите «Сохранить»

Протестировано с версией 1.566.


Я предлагаю отменить изменения, предложенные в принятом ответе, поскольку это может повлиять на действия, описанные выше.

amertkara
источник
Что делает <useSecurity>false</useSecurity>?
Алекс
@alex отключает безопасность в Jenkins, так что вы можете войти и перенастроить. jenkins.io/doc/book/system-administration/security/...
amertkara
2

Двухлинейное исправление (запуск на сервере):

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

Примечание: sudoразрешение требуется, или запустить как root.

Затем войдите в систему Jenkins как обычно и заново настройте параметры безопасности.

kenorb
источник
0

С подобной проблемой я столкнулся, но с плагином GitHub OAuth, благодаря согласованному ответу здесь, моя проблема и решение объяснены здесь

sandejai
источник
0

В Windows: когда я включил LDAP в разделе Глобальная безопасность, я тоже потерял права администратора. с ошибкой «Отказано в доступе отсутствует окно Дженкинс разрешения Полное / чтение».

В таком случае, пожалуйста, сохраните существующий экземпляр, установите новую версию jenkins на другой машине или виртуальной машине. Скопируйте файл config.xml из Jenkins_Home и замените его на config.xml из своего каталога Jenkin_Home. При выполнении этого убедитесь, что служба Jenkins остановлена. После замены запустите экземпляр и VOILA.

user3346620
источник