Как сбросить настройки безопасности Дженкинса из командной строки?


есть ли способ сбросить все (или просто отключить настройки безопасности) из командной строки без пользователя/пароля, поскольку мне удалось полностью заблокировать себя из Jenkins?

19 169

19 ответов:

самое простое решение-полностью отключить security-change true до false на .

<useSecurity>true</useSecurity>

затем просто перезапустить Дженкинс, по

sudo service jenkins restart

а затем перейдите в панель администратора и установите все еще раз.

еще один способ-вручную отредактировать файл конфигурации для вашего пользователя (например, /var/lib/jenkins/users/username/config.xml) и обновить содержимое passwordHash:

<passwordHash>#jbcrypt:a$razd3L1aXndFfBNHO95aj.IVrFydsxkcQCcLmujmFQzll3hcUrY7S</passwordHash>

Как только вы это сделаете, просто перезапустите Jenkins и войдите в систему, используя этот пароль:

test

Я нашел файл, о котором идет речь, расположенный в /var/lib/jenkins под названием config.xml, изменение которого исправило проблему.

The <passwordHash> элемент users/<username>/config.xml будет принимать данные в формате

salt:sha256("password{salt}")

Итак, если ваша соль bar и пароль foo тогда вы можете произвести SHA256 следующим образом:

echo -n 'foo{bar}' | sha256sum

вы должны 7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349 как результат. Возьмите гашиш и положите его с солью в <passwordHash>:

<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>

перезагрузите Дженкинс, а затем попробуйте войти в систему с паролем foo. Затем сбросьте пароль на что-то другое. (Дженкинс использует bcrypt по умолчанию, и один раунд SHA256 не является безопасным способом хранения паролей. Вы получите хэш bcrypt, сохраненный при сбросе пароля.)

В Эль-Капитан config.xml не может быть найдено на

/var / lib / jenkins/

имеющихся в

~/.Дженкинс

затем после этого, как другие упомянутые открыть config.xml файл и внести следующие изменения

  • в этом заменить <useSecurity>true</useSecurity> с <useSecurity>false</useSecurity>

  • удалить <authorizationStrategy> и <securityRealm>

  • сохраните его и перезапустите Дженкинс (sudo service Jenkins restart)

ответ на изменение было правильным. Тем не менее, я думаю, что следует упомянуть, что /var/lib/jenkins/config.xml выглядит примерно так, если вы активировали "стратегию авторизации матрицы на основе проекта". Удаление /var/lib/jenkins/config.xml и перезапуск Дженкинса также делает трюк. Я также удалил пользователей в /var/lib/jenkins/users начать с нуля.

<authorizationStrategy class="hudson.security.ProjectMatrixAuthorizationStrategy">
    <permission>hudson.model.Computer.Configure:jenkins-admin</permission>
    <permission>hudson.model.Computer.Connect:jenkins-admin</permission>
    <permission>hudson.model.Computer.Create:jenkins-admin</permission>
    <permission>hudson.model.Computer.Delete:jenkins-admin</permission>
    <permission>hudson.model.Computer.Disconnect:jenkins-admin</permission>
    <!-- if this is missing for your user and it is the only one, bad luck -->
    <permission>hudson.model.Hudson.Administer:jenkins-admin</permission>
    <permission>hudson.model.Hudson.Read:jenkins-admin</permission>
    <permission>hudson.model.Hudson.RunScripts:jenkins-admin</permission>
    <permission>hudson.model.Item.Build:jenkins-admin</permission>
    <permission>hudson.model.Item.Cancel:jenkins-admin</permission>
    <permission>hudson.model.Item.Configure:jenkins-admin</permission>
    <permission>hudson.model.Item.Create:jenkins-admin</permission>
    <permission>hudson.model.Item.Delete:jenkins-admin</permission>
    <permission>hudson.model.Item.Discover:jenkins-admin</permission>
    <permission>hudson.model.Item.Read:jenkins-admin</permission>
    <permission>hudson.model.Item.Workspace:jenkins-admin</permission>
    <permission>hudson.model.View.Configure:jenkins-admin</permission>
    <permission>hudson.model.View.Create:jenkins-admin</permission>
    <permission>hudson.model.View.Delete:jenkins-admin</permission>
    <permission>hudson.model.View.Read:jenkins-admin</permission>
  </authorizationStrategy>

восстановить без отключения безопасность если вы используете разрешения матрицы (вероятно, легко адаптируется к другим методам логин):

  1. на config.xml, set disableSignup до false.
  2. перезагрузка Дженкинс.
  3. перейдите на веб-страницу Дженкинса и зарегистрируйтесь с новым пользователем.
  4. на config.xml, дублировать один из <permission>hudson.model.Hudson.Administer:username</permission> строки и заменить username С новый пользователь.
  5. если это частный сервер, установить disableSignup на true на config.xml.
  6. перезагрузка Дженкинс.
  7. перейдите на веб-страницу Дженкинса и войти как новый пользователь!--13-->.
  8. сбросить пароль оригинальная пользователей.
  9. вход как оригинальный пользователь.

необязательный очистка:

  1. удалить новый пользователь.
  2. удалить временные <permission> в строке config.xml.

никакие ценные бумаги не пострадали во время этого ответа.

чтобы отключить безопасность Дженкинса в простых шагах в Linux, выполните следующие команды:

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

Он будет удалить useSecurity и authorizationStrategy строки из своего config.xml корневой конфигурационный файл и перезагрузите Jenkins.

Читайте также: отключить безопасность на сайте Дженкинс


после получения доступа к Дженкинс, вы можете повторно включить безопасность в вашем Настройка Глобальной Безопасности страница выбрав Контроль Доступа/Системы Безопасности Царство. После чего не забудьте создать пользователя admin.

на случай, если вы случайно заблокируете себя из Jenkins из-за ошибки разрешения, и у вас нет доступа на стороне сервера для переключения на пользователя jenkins или root... Вы можете сделать работу в Jenkins и добавить это в скрипт:

sed -i 's/<useSecurity>true/<useSecurity>false/' ~/config.xml

затем нажмите кнопку построить сейчас и перезапустите Дженкинс (или сервер, если вам нужно!)

\.jenkins\secrets\initialAdminPassword

скопируйте пароль из файла initialAdminPassword и вставьте его в Jenkins.

чтобы удалить по умолчанию безопасность для Дженкинса в ОС Windows,

Вы можете пройти через файл config.xml создан внутри /users / {UserName}/.Дженкинс.

внутри этого файла вы можете изменить код от

<useSecurity>true</useSecurity>

в,

<useSecurity>false</useSecurity>

изменение <useSecurity>true</useSecurity> до <useSecurity>false</useSecurity> не будет достаточно, вы должны удалить <authorizationStrategy> и <securityRealm> элементы тоже и перезагрузите сервер Дженкинса, сделав sudo service jenkins restart .

запомни это, сет <usesecurity> до false только может вызвать проблему для вас, так как эти инструкции упомянуты в их официальной документации здесь.

простой выход из этого-использовать admin psw для входа в систему с вашим пользователем admin:

  • изменить на пользователя root:sudo su -
  • скопировать пароль: xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
  • войдите в систему с помощью администратора и нажмите ctrl + v в поле ввода пароля.

установите xclip, если у вас его нет:

  • $ sudo apt-get install xclip

Дженкинс над КУБЕНЕТЕСОМ и Докером

в случае Дженкинс над контейнером, управляемым Kubernetes POD немного сложнее, так как:kubectl exec PODID --namespace=jenkins -it -- /bin/bash вы позволите получить доступ непосредственно к контейнеру под управлением Дженкинса, но у вас не будет корневого доступа,sudo,vi и многие команды недоступны, и поэтому требуется обходной путь.

использовать kubectl describe pod [...], чтобы найти узел, на котором выполняется ваш стручок и идентификатор контейнера (docker://...)

  • SSH в узле
  • выполнить docker exec -ti -u root -- /bin/bash для доступа к контейнеру с правами суперпользователя
  • apt-get update
  • sudo apt-get install vim

второе отличие заключается в том, что файл конфигурации Jenkins помещается в другой путь, который соответствует точке подключения постоянного Тома, т. е. /var/jenkins_home, это место может измениться в будущем, проверить его работает df.

затем отключите безопасность-измените true на false в .

<useSecurity>false</useSecurity>

теперь достаточно перезапустить Jenkins, действие, которое приведет к тому, что контейнер и стручок умрут, он будет создан снова через несколько секунд с обновленной конфигурацией (и все шансы, такие как vi, обновление стерто) благодаря постоянному тому.

все решение было протестировано на движке Google Kubernetes. обновление Заметить это вы можете также запустить ps -aux пароль в обычном тексте отображается даже без корневого доступа.

jenkins@jenkins-87c47bbb8-g87nw:/$ps -aux
[...]
jenkins [..] -jar /usr/share/jenkins/jenkins.war --argumentsRealm.passwd.jenkins=password --argumentsRealm.roles.jenkins=admin
[...]

1 Сначала проверьте местоположение, если вы устанавливаете war или Linux или windows на основе этого

например, если война под Linux и для администратора пользователя

/ home/"Имя_пользователя"/.jenkins / users/admin / config.xml

перейти к этому тегу после #jbcrypt:

<passwordHash>#jbcrypt:aDzCGLQr2oYXtcot4o0rB.wYi5kth6e45tcPpRFsuYqzLZfn1pcWK</passwordHash>

изменить этот пароль, используя использовать любой сайт для bcrypt hash generator

https://www.dailycred.com/article/bcrypt-calculator

убедитесь, что он начинаться с $2a потому что этот дженкенс использует

мы можем сбросить пароль при выходе безопасности.

конфиг.xml-файл в /var/lib/Jenkins/users/ admin /действует как/etc / shadow-файл Linux или UNIX-подобных систем или файл SAM в Windows, в том смысле, что он хранит хэш пароля учетной записи.

Если вам нужно сбросить пароль без входа в систему, вы можете отредактировать этот файл и заменить старый хэш на новый, созданный из bcrypt:

$ pip install bcrypt
$ python
>>> import bcrypt
>>> bcrypt.hashpw("yourpassword", bcrypt.gensalt(rounds=10, prefix=b"2a"))
'YOUR_HASH'

Это вывод хэш, с префиксом 2a, правильный префикс для хэшей Дженкинса.

отредактируйте config.xml-файл:
...
<passwordHash>#jbcrypt:REPLACE_THIS</passwordHash>
...

как только вы вставите новый хэш, сбросьте Jenkins:

(Если вы находитесь в системе с systemd):

sudo systemctl restart Jenkins

Теперь вы можете войти в систему, и вы не оставили открытой системе на секунду.

Шаг 1 : Перейдите в каталог CD .Дженкинс / секреты, то вы получите "initialAdminPassword".

Шаг-2: nano initialAdminPassword

вы получите пароль

у меня была аналогичная проблема, и после ответа от ArtB,

я обнаружил, что мой пользователь не имеет правильной конфигурации. так что я сделал:

Примечание: ручное изменение таких XML-файлов является рискованным. Делайте это на свой страх и риск. Поскольку я уже был заперт, мне нечего было терять. AFAIK в худшем случае я бы удалил~/.Дженкинс/конфиг.xml-файл, как упоминалось ранее.

**> 1. ssh к машине Дженкинса

  1. cd ~/.Дженкинс (я думаю, что некоторые установки помещают его под /var/lib/jenkins/config.XML, но не в моем случае )
  2. ви конфигурации.xml и в разделе authorizationStrategy xml tag добавьте следующий раздел (просто используйте мое имя пользователя вместо "put-your-username")
  3. перезапустить Дженкинс. в моем случае в качестве корневой службы tomcat7 stop;; service tomcat7 start
  4. попробуйте войти снова. (работал на меня)**

под

добавить:

<permission>hudson.model.Computer.Build:put-your-username</permission>
<permission>hudson.model.Computer.Configure:put-your-username</permission>
<permission>hudson.model.Computer.Connect:put-your-username</permission>
<permission>hudson.model.Computer.Create:put-your-username</permission>
<permission>hudson.model.Computer.Delete:put-your-username</permission>
<permission>hudson.model.Computer.Disconnect:put-your-username</permission>
<permission>hudson.model.Hudson.Administer:put-your-username</permission>
<permission>hudson.model.Hudson.ConfigureUpdateCenter:put-your-username</permission>
<permission>hudson.model.Hudson.Read:put-your-username</permission>
<permission>hudson.model.Hudson.RunScripts:put-your-username</permission>
<permission>hudson.model.Hudson.UploadPlugins:put-your-username</permission>
<permission>hudson.model.Item.Build:put-your-username</permission>
<permission>hudson.model.Item.Cancel:put-your-username</permission>
<permission>hudson.model.Item.Configure:put-your-username</permission>
<permission>hudson.model.Item.Create:put-your-username</permission>
<permission>hudson.model.Item.Delete:put-your-username</permission>
<permission>hudson.model.Item.Discover:put-your-username</permission>
<permission>hudson.model.Item.Read:put-your-username</permission>
<permission>hudson.model.Item.Workspace:put-your-username</permission>
<permission>hudson.model.Run.Delete:put-your-username</permission>
<permission>hudson.model.Run.Update:put-your-username</permission>
<permission>hudson.model.View.Configure:put-your-username</permission>
<permission>hudson.model.View.Create:put-your-username</permission>
<permission>hudson.model.View.Delete:put-your-username</permission>
<permission>hudson.model.View.Read:put-your-username</permission>
<permission>hudson.scm.SCM.Tag:put-your-username</permission>

теперь вы можете идти в разных направлениях. Например, у меня была интеграция GitHub oauth, поэтому я мог бы попытаться заменить authorizationStrategy чем-то вроде ниже:

Примечание:, это сработало в моем случае, потому что у меня был конкретный плагин github oauth, который уже был настроен. Так что это более рискованно, чем предыдущее решение.

  <authorizationStrategy class="org.jenkinsci.plugins.GithubAuthorizationStrategy" plugin="github-oauth@0.14">
    <rootACL>
      <organizationNameList class="linked-list">
        <string></string>
      </organizationNameList>
      <adminUserNameList class="linked-list">
        <string>put-your-username</string>
        <string>username2</string>
        <string>username3</string>
        <string>username_4_etc_put_username_that_will_become_administrator</string>
      </adminUserNameList>
      <authenticatedUserReadPermission>true</authenticatedUserReadPermission>
      <allowGithubWebHookPermission>false</allowGithubWebHookPermission>
      <allowCcTrayPermission>false</allowCcTrayPermission>
      <allowAnonymousReadPermission>false</allowAnonymousReadPermission>
    </rootACL>
  </authorizationStrategy>

редактировать файл $JENKINS_HOME / config.xml и изменить конфигурацию безопасности с помощью этого:

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

после этого перезапустить Дженкинс.