Як скинути налаштування безпеки Jenkins з командного рядка?


217

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

Відповіді:


275

Найпростіше рішення , щоб повністю відключити систему безпеки - зміна trueв falseв /var/lib/jenkins/config.xmlфайлі.

<useSecurity>true</useSecurity>

Тоді просто перезапустіть Дженкінса, автор

sudo service jenkins restart

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

Якщо ви на випадок запускаєте свій Jenkins всередині стручка k8s від докера, що є моїм випадком, і ви не можете запустити serviceкоманду, тоді ви можете просто перезапустити Дженкінс, видаливши pod:

kubectl delete pod <jenkins-pod-name>

Після того, як команда була видана, k8s припинить старий струк і почне новий.


3
Мені потрібно було перезапустити Дженкінса, щоб застосувати зміни.
Або Арбель

12
sudo service jenkins restart
MonoThreaded

10
Тим, хто не може його знайти, їх config.xml використовують find / -name "config.xml" у вашому терміналі.
Лазерний яструб

Після Зміни користувальницького тега безпеки до помилкового для перезапуску jenking з командного рядка --- stackoverflow.com/questions/14869311 / ...
Anurag_BEHS

1
Також файл може знаходитися під ~ / .jenkins / folder
Андрій Абрамов

181

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

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

Щойно ви це зробите, просто перезапустіть Дженкінс і увійдіть, використовуючи цей пароль:

test

1
що робити, якщо цього запису немає - куди його насправді поставити?
serup

2
<passwordHash>XML тег є дочірнім <hudson.security.HudsonPrivateSecurityRealm_-Details>. Подивіться на користувача адміністратора за замовчуванням, щоб отримати уявлення про загальну структуру XML.
ivandov

2
Це хороше рішення, яке забезпечує надійну установку. Як з цікавості створюється хеш пароля?
контекстуйте

Дякую, це саме те, що мені було потрібно!
Метт Кавана

Змінення вмісту файлу, присутнього в C: \ Users \ <USER> \ .jenkins \ users \ admin допомогли вирішити проблему
Sakshi Singla

45

Я знайшов відповідний файл, розташований у / var / lib / jenkins під назвою config.xml, змінивши, що вирішив проблему.


1
Я використовую El-Capitan і config.xml не вдалося знайти в цьому місці
Durai Amuthan.H

@ DuraiAmuthan.H Ви встановили його зі стеком bitnami? Файл конфігурації буде в/Applications/jenkins-2.19.3-0/apps/jenkins/jenkins_home/users/admin/config.xml
siegy22

@ryanzec, відповідь Nowakers використовує той самий файл, але це краще пояснено, ви повинні розглянути можливість прийняття його як правильну відповідь.
Кату

де ми знайдемо файл у hight sierra
prabakaran iOS

44

<passwordHash>Елемент users/<username>/config.xmlбуде приймати дані формату

salt:sha256("password{salt}")

Отже, якщо ваша сіль barі ваш пароль, fooви можете виготовити SHA256 таким чином:

echo -n 'foo{bar}' | sha256sum

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

<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>

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


1
Це, здається, не працює. приклад починається з солі #jbscrypt, а потім визначає поля шифрування $ 2a $ 10 $. Що це означає?
jrwren

Моя відповідь спрацювала на мене. Додаткові поля, які ви бачите, призначені для іншого формату хешу. Бібліотека, яку Дженкінс використовує для обробки хешованих паролів, підтримує більше одного формату. Формат jbcrypt, на який ви посилаєтесь, є більш безпечним, ніж sha256 з сіллю, але формат солі sha256 + можна легко створити з командного рядка --- згадайте, що суть вправи полягає в тому, щоб повернутися в Дженкінс, а потім змінити пароль з веб-інтерфейсу Дженкінса.
uckelman

Це для мене теж не вийшло. Я спробую знайти більше інформації про bcrypt
Лоран Пікет

це працювало на мене. Я використав такі команди: `` PASSWORD_DIGEST = "$ (ехо -n" $ {ADMIN_PASSWORD} {$ {SALT}} "| sha256sum | awk '{print $ 1}')" echo "дайджест паролів: $ PASSWORD_DIGEST" sed -i -e "s # <passwordHash>. * </passwordHash> # <passwordHash> $ {SALT}: $ {PASSWORD_DIGEST} </passwordHash> #" "/ usr / share / jenkins / ref / users / admin / config .xml "sed -i -e" s # <apiToken>. * </apiToken> # <apiToken> $ {API_TOKEN} </apiToken> # "" / usr / share / jenkins / ref / users / admin / config. xml "` ``
Лоран Пікет

Дякую міл. Використовували абсолютно однакові значення і працювали як шарм. Повернувся назад і скинув пропуск.

26

У програмі El-Capitan config.xml не можна знайти на

/ var / lib / jenkins /

Його доступно в

~ / .jenkins

потім після цього, як і інші згадані, відкрийте файл config.xml і внесіть наступні зміни

  • У цьому замінити <useSecurity>true</useSecurity>на<useSecurity>false</useSecurity>

  • Видалити <authorizationStrategy>і<securityRealm>

  • Збережіть його та перезапустіть джинкіни ( sudo service jenkins restart )


Я фактично не в змозі редагувати файл config.xml. Коли я намагаюся зберегти його за допомогою vim, він кидає, що це файл лише для читання, і операція з його доступу до запису заборонена.
Emjey

19

Відповідь про внесення змін була правильною. Але, я думаю, слід згадати, що /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>

14

Щоб скинути його, не вимикаючи безпеку, якщо ви використовуєте матричні дозволи (можливо, вони легко адаптуються до інших методів входу):

  1. В config.xml, встановлений disableSignupв false.
  2. Перезапустіть Дженкінса.
  3. Перейдіть на веб-сторінку Дженкінса і підпишіться з новим користувачем .
  4. У config.xmlдублюють один з <permission>hudson.model.Hudson.Administer:username</permission>ліній і замінити usernameз новим користувачем.
  5. Якщо це приватний сервер, встановіть disableSignupназад trueв config.xml.
  6. Перезапустіть Дженкінса.
  7. Перейдіть на веб-сторінку Дженкінса та увійдіть як новий користувач .
  8. Скиньте пароль початкового користувача.
  9. Увійдіть як початковий користувач.

Необов'язкове очищення:

  1. Видаліть нового користувача.
  2. Видаліть тимчасовий <permission>рядок у config.xml.

Під час цієї відповіді жодні цінні папери не пошкодили


Додати до очищає безлічі disableSignup назад до істинним, і рестарт Дженкінс
Marc

14

Щоб відключити безпеку Дженкінса простими кроками в 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кореневого конфігураційного файла та перезапустить ваш Дженкінс.

Дивіться також: Відключення безпеки на веб-сайті Дженкінса


Отримавши доступ до Дженкінса, ви можете знову ввімкнути безпеку на своїй сторінці Налаштування глобальної безпеки , вибравши Область контролю доступу / Безпека . Після цього не забудьте створити користувача адміністратора .


Це працювало для мене, однак зараз пропуск авторизації пропускається.
геманто

@hemanto Вам потрібно ввімкнути безпеку, щоб повторно включити авторизацію. Я оновив відповідь.
kenorb

12

Зрештою, ви випадково заблокуєте себе з Дженкінса через помилку дозволу, і у вас немає доступу на стороні сервера, щоб перейти на користувача або користувач jenkins ... Ви можете зробити роботу в Дженкінсі і додати це до сценарію Shell:

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

Потім натисніть «Створити зараз» і перезавантажте Дженкінс (або сервер, якщо вам потрібно!)


1
Як ви створюєте роботу в Дженкінсі на випадок, якщо ви самі її закрили?
ГерольдБрозер повертає Моніку

У цьому випадку у мене ввійшло звичайне вікно Chrome, і я змінив налаштування безпеки та протестував у Incognito Window перед виходом із головного вікна. Тест не дозволив мені ввійти, але мої сеанси зберігалися у головному вікні, щоб я міг відшкодувати пошкодження.
Нік

1
Я вважаю, що частина налаштувань безпеки, яку я змінила, також означала, що мій авторський сеанс більше не мав дозволу змінювати конфігурації безпеки Дженкінса.
Нік

Увімкніть цю проблему після активації ProjectMatrixAuthorization. Коли я роблю зміни та перезапускаю Дженкінс, я бачу виняток Java в інтерфейсі Jenkins-UI. Щоб виправити це, я видалив також рядок authorizationStrategyі знову було добре. Дженкінс читав це на наступному початку як порожній тег.
Пітер Шнайдер

12

Ми можемо скинути пароль, залишаючи безпеку ввімкненою.

Файл config.xml в / var / lib / Jenkins / users / admin / діє так, як файл / etc / тінь 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>
...

Як тільки ви вставите новий хеш, скиньте Дженкінс:

(якщо ви перебуваєте в системі з systemd):

sudo systemctl restart Jenkins

Тепер ви можете увійти, і ви не залишали вашу систему відкритою ні на секунду.


5
\.jenkins\secrets\initialAdminPassword

Скопіюйте пароль з початкового файлуAdminPassword і вставте його в Дженкінс.


4

Щоб зняти за замовчуванням безпеку для jenkins в ОС Windows,

Ви можете пройти через файл Config.xml, створений всередині /users/{UserName}/.jenkins.

Всередині цього файлу ви можете змінити код

<useSecurity>true</useSecurity>

До

<useSecurity>false</useSecurity>

4

1 спочатку перевірте місце, якщо ви встановите програму war, Linux або Windows на основі цього

наприклад, якщо війна під Linux та для користувача адміністратора

/home/"User_NAME"/.jenkins/users/admin/config.xml

перейти до цього тегу після #jbcrypt:

<passwordHash>#jbcrypt:$2a$10$3DzCGLQr2oYXtcot4o0rB.wYi5kth6e45tcPpRFsuYqzLZfn1pcWK</passwordHash>

змінити цей пароль, використовуючи будь-який веб-сайт для генератора хешів bcrypt

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

переконайтеся, що він починається з $ 2а, оскільки цей джинси використовує


4

крок 1: перейдіть до каталогу cd .jenkins / secrets, тоді ви отримаєте 'початковийAdminPassword'.

крок 2: нано початковийAdminPassword

ви отримаєте пароль


2

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

пам'ятайте це, встановіть <usesecurity>для falseтільки може викликати проблеми для вас, так як ці інструкції згадуються в тир офіційної документації тут .


1

Простий вихід з цього полягає в використанні адміністратора PSW для входу в систему з користувачем адміністратора:

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

Встановіть xclip, якщо у вас його немає:

  • $ sudo apt-get install xclip

Використання пароля за замовчуванням працювало для мене. Щоб зробити це просто, ви можете просто робити «котячі секрети / початковийAdminPassword», а не встановлювати xclip для разового використання.
Павло

Іноді цього пароля немає. Я не впевнений, як ви можете обійти цю конфігурацію, але для мене її немає, і мені довелося редагувати config.xml
vinicius.hisao

1

Дженкінс над KUBENETES та Докер

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

Використовуйте kubectl describe pod [...]для пошуку вузла, на якому працює ваш Pod та ідентифікатор контейнера(docker://...)

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

Друга відмінність полягає в тому, що файл конфігурації Дженкінса розміщується в інший шлях, який відповідає точці монтажу постійного гучності, тобто /var/jenkins_homeце місце може змінитися в майбутньому, перевірте, чи працює воно df.

Потім вимкніть безпеку - змініть /var/jenkins_home/jenkins/config.xmlфайл на істинне на хибне .

<useSecurity>false</useSecurity>

Тепер достатньо перезапустити Дженкінс, дії, які призведуть до вмирання контейнера та Pod, він знову створиться за кілька секунд із оновленою конфігурацією (і всі шанси, такі як vi, оновлення стерті) завдяки постійному гучності.

Все рішення було випробувано на Google Kubernetes Engine. ОНОВЛЕННЯ Зауважте, що ви також можете запустити ps -auxпароль у простому тексті, відображається навіть без доступу root.

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

1

Багато разів у вас не було дозволів редагувати файл config.xml.

Найпростіше було б зробити назад config.xmlі видалити за допомогою команди sudo.

Перезавантажте джинкіни за допомогою команди sudo /etc/init.d/jenkins restart

Це відключить всю безпеку в Дженнінкі, і параметр входу зникне


Якщо ви можете видалити config.xml за допомогою sudo, ви можете редагувати його і за допомогою sudo. наприклад, sudo vi ...
Lee Meador

1

Використовуючи bcrypt, ви можете вирішити цю проблему. Розширення відповіді @Reem для того, хто намагається автоматизувати процес, використовуючи bash та python.

#!/bin/bash

pip install bcrypt
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install xmlstarlet

cat > /tmp/jenkinsHash.py <<EOF
import bcrypt
import sys

if not sys.argv[1]:
  sys.exit(10)

plaintext_pwd=sys.argv[1]
encrypted_pwd=bcrypt.hashpw(sys.argv[1], bcrypt.gensalt(rounds=10, prefix=b"2a"))
isCorrect=bcrypt.checkpw(plaintext_pwd, encrypted_pwd)

if not isCorrect:
   sys.exit(20);

print "{}".format(encrypted_pwd)
EOF

chmod +x /tmp/jenkinsHash.py
cd /var/lib/jenkins/users/admin*
pwd
while (( 1 )); do
    echo "Waiting for Jenkins to generate admin user's config file ..."

    if [[ -f "./config.xml" ]]; then
        break
    fi

    sleep 10
done

echo "Admin config file created"

admin_password=$(python /tmp/jenkinsHash.py password 2>&1)

# Repalcing the new passowrd
xmlstarlet -q ed --inplace -u "/user/properties/hudson.security.HudsonPrivateSecurityRealm_-Details/passwordHash" -v '#jbcrypt:'"$admin_password" config.xml

# Restart
systemctl restart jenkins
sleep 10

Тут я зберігав жорсткий код, але це може бути введенням користувача залежно від вимоги. Також не забудьте додати, що в sleepіншому випадку будь-яка інша команда, що обертається навколо Дженкінса, не зможе.


1

Щоб дуже просто відключити і безпеку, і майстра запуску, використовуйте властивість JAVA:

-Djenkins.install.runSetupWizard=false

Приємно в тому, що ви можете використовувати його в зображенні Docker таким чином, що ваш контейнер завжди буде запускатися негайно без екрана входу:

# Dockerfile
FROM jenkins/jenkins:lts
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false

Зауважте, що, як зазначають інші, на /var/jenkins_homeзображенні sedє конфігурація Jenkins config.xml , однак використання її для модифікації з Dockerfile не вдається, оскільки (імовірно) config.xml не існує до запуску сервера.


0

У мене була подібна проблема, і після відповіді ArtB,

Я виявив, що мій користувач не мав належних конфігурацій. так що я зробив:

Примітка: змінювати такі файли XML вручну ризиковано. Робіть це на свій страх і ризик. Оскільки мене вже заблокували, втратити не довелося. AFAIK Найгірший випадок, я б видалив файл ~ / .jenkins / config.xml як згадуваний попередній пост.

**> 1. ssh машині джинсинів

  1. cd ~ / .jenkins (я вважаю, що деякі установки ставлять його під /var/lib/jenkins/config.xml, але не в моєму випадку)
  2. vi config.xml та під тегом AuthorStrategy xml додайте розділ нижче (я просто використав моє ім'я користувача замість "put-your-username")
  3. перезапустити дженкіни. у моєму випадку як root служба tomcat7 зупиняється; ; сервіс tomcat7 старт
  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, тому я міг би спробувати замінити авторизацію Стратегії чимось на кшталт нижче:

Примітка:. У моєму випадку це спрацювало, оскільки у мене був специфічний плагін 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>

0

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

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

Після цього перезапустіть Дженкінс.


0

Для тих, хто використовує macOS, нову версію просто можна встановити домашньою мовою. тому для відпочинку цей командний рядок повинен використовувати:

brew services restart jenkins-lts
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.