it-swarm.com.de

Wie kann ich die Sicherheitseinstellungen von Jenkins über die Befehlszeile zurücksetzen?

Gibt es eine Möglichkeit, alle (oder nur die Sicherheitseinstellungen zu deaktivieren) von der Befehlszeile aus zurückzusetzen, ohne dass ein Benutzer/ein Kennwort erforderlich ist, da ich mich vollständig aus Jenkins herausgesperrt habe?

204
ryanzec

Die einfachste Lösung besteht darin, die Sicherheit vollständig zu deaktivieren - ändern Sie true in false in /var/lib/jenkins/config.xml Datei.

<useSecurity>true</useSecurity>

Dann starte einfach Jenkins neu, von

Sudo service jenkins restart

Und dann gehe zum Admin-Panel und stelle alles noch einmal ein.

Wenn Sie Ihre Jenkins im k8s-Pod von einem Docker aus ausführen, was bei mir der Fall ist und der Befehl service nicht ausgeführt werden kann, können Sie Jenkins einfach neu starten, indem Sie den Pod löschen:

kubectl delete pod <jenkins-pod-name>

Sobald der Befehl erteilt wurde, beendet der k8s den alten Pod und startet einen neuen.

258
Nowaker

Eine andere Möglichkeit besteht darin, die Konfigurationsdatei für Ihren Benutzer manuell zu bearbeiten (z. B. /var/lib/jenkins/users/username/config.xml) und den Inhalt von passwordHash zu aktualisieren:

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

Starten Sie anschließend Jenkins neu und melden Sie sich mit diesem Passwort an:

test
165
Arseny

Ich habe die fragliche Datei in/var/lib/jenkins mit dem Namen config.xml gefunden. Die Änderung hat das Problem behoben.

44
ryanzec

Das <passwordHash> Element in users/<username>/config.xml akzeptiert Daten des Formats

salt:sha256("password{salt}")

Wenn Ihr Salt also bar und Ihr Passwort foo ist, können Sie den SHA256 folgendermaßen produzieren:

echo -n 'foo{bar}' | sha256sum

Du solltest bekommen 7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349 als Ergebnis. Nimm den Hasch und gib ihn mit dem Salz in <passwordHash>:

<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>

Starten Sie Jenkins neu und melden Sie sich dann mit dem Kennwort foo an. Setzen Sie dann Ihr Passwort auf einen anderen Wert zurück. (Jenkins verwendet standardmäßig bcrypt und eine Runde SHA256 ist keine sichere Methode zum Speichern von Passwörtern. Sie erhalten einen bcrypt-Hash, der gespeichert wird, wenn Sie Ihr Passwort zurücksetzen.)

40
uckelman

In El-Capitan config.xml kann bei nicht gefunden werden

/ var/lib/jenkins /

Es ist verfügbar in

~/.jenkins

öffnen Sie anschließend, wie bereits erwähnt, die Datei config.xml und nehmen Sie die folgenden Änderungen vor

  • In diesem ersetzen <useSecurity>true</useSecurity> mit <useSecurity>false</useSecurity>

  • Entfernen <authorizationStrategy> und <securityRealm>

  • Speichern Sie es und starten Sie die Jenkins neu (Sudo Service Jenkins Neustart)

23
Durai Amuthan.H

Die Antwort beim Ändern war korrekt. Dennoch sollte erwähnt werden, dass /var/lib/jenkins/config.xml Ungefähr so ​​aussieht, wenn Sie "Project-based Matrix Authorization Strategy" aktiviert haben. Das Löschen von /var/lib/jenkins/config.xml Und der Neustart von jenkins reichen ebenfalls aus. Ich habe auch die Benutzer in /var/lib/jenkins/users Gelöscht, um von vorne zu beginnen.

<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>
19
user637338

So setzen Sie es zurück ohne die Sicherheit zu deaktivieren wenn Sie Matrix-Berechtigungen verwenden (wahrscheinlich leicht an andere Anmeldemethoden anpassbar):

  1. Im config.xml, setze disableSignup auf false.
  2. Neustart Jenkins.
  3. Gehen Sie zur Jenkins-Webseite und melden Sie sich mit einem neuen Benutzer an.
  4. Im config.xml, dupliziere eines der <permission>hudson.model.Hudson.Administer:username</permission> Zeilen und ersetzen Sie username durch den neuen Benutzer.
  5. Wenn es sich um einen privaten Server handelt, setzen Sie disableSignup zurück auf true in config.xml.
  6. Neustart Jenkins.
  7. Gehen Sie zur Jenkins-Webseite und melden Sie sich als neuer Benutzer an.
  8. Passwort zurücksetzen des ursprünglichen Benutzers.
  9. Anmelden als der ursprüngliche Benutzer.

Optionale Bereinigung:

  1. Löschen Sie den neuen Benutzer.
  2. Löschen Sie das temporäre <permission> Zeile in config.xml.

Bei dieser Antwort wurden keine Wertpapiere beschädigt.

14
l0b0

Führen Sie die folgenden Befehle aus, um die Jenkins-Sicherheit in einfachen Schritten unter Linux zu deaktivieren:

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

Dadurch werden die Zeilen useSecurity und authorizationStrategy aus Ihrer config.xml - Stammkonfigurationsdatei entfernt und Ihre Jenkins neu gestartet.

Siehe auch: Sicherheit deaktivieren auf der Jenkins-Website


Nachdem Sie Zugriff auf Jenkins erhalten haben, können Sie die Sicherheit auf Ihrer Seite Globale Sicherheit konfigurieren wieder aktivieren, indem Sie Zugriffskontrolle/Sicherheitsbereich . Dann vergiss nicht erstelle den Administrator .

14
kenorb

Möglicherweise sperren Sie sich versehentlich aufgrund eines Berechtigungsfehlers aus Jenkins aus, und Sie haben keinen serverseitigen Zugriff, um zum Benutzer oder Root von Jenkins zu wechseln.

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

Klicken Sie dann auf Jetzt erstellen und starten Sie Jenkins neu (oder den Server, falls erforderlich!)

12
Nick

Wir können das Passwort zurücksetzen, während die Sicherheit aktiviert bleibt.

Die Datei config.xml in/var/lib/Jenkins/users/admin/verhält sich in etwa wie die Datei/etc/shadow eines Linux- oder UNIX-ähnlichen Systems oder wie die SAM-Datei in Windows, in dem Sinne, dass sie den Hash der Datei speichert Passwort des Kontos.

Wenn Sie das Passwort zurücksetzen müssen, ohne sich anzumelden, können Sie diese Datei bearbeiten und den alten Hash durch einen neuen ersetzen, der aus bcrypt generiert wurde:

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

Dies gibt Ihren Hash mit dem Präfix 2a aus, dem korrekten Präfix für Jenkins-Hashes.

Bearbeiten Sie nun die Datei config.xml:

...
<passwordHash>#jbcrypt:REPLACE_THIS</passwordHash>
...

Sobald Sie den neuen Hash eingefügt haben, setzen Sie Jenkins zurück:

(wenn Sie sich auf einem System mit systemd befinden):

Sudo systemctl restart Jenkins

Sie können sich jetzt anmelden und haben Ihr System keine Sekunde lang geöffnet.

10
Reem
\.jenkins\secrets\initialAdminPassword

Kopieren Sie das Passwort aus der initialAdminPassword-Datei und fügen Sie es in die Jenkins ein.

5
Shivam

schritt-1: Gehen Sie in das Verzeichnis cd .jenkins/secrets und Sie erhalten ein 'initialAdminPassword'.

schritt 2: Nano-InitialAdminPassword

sie erhalten ein Passwort

4
Shaik Zeeshan

Um die standardmäßige Sicherheit für Jenkins im Windows-Betriebssystem zu entfernen,

Sie können die Datei Config.xml durchsuchen, die in /users/{UserName}/.jenkins erstellt wurde.

In dieser Datei können Sie den Code von ändern

<useSecurity>true</useSecurity>

Zu,

<useSecurity>false</useSecurity>
4
Krutik

1 Überprüfen Sie zuerst den Speicherort, ob Sie War oder Linux oder Windows darauf basierend installieren

zum Beispiel, wenn Krieg unter Linux und für Admin-Benutzer

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

gehe zu diesem Tag nach #jbcrypt:

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

ändern Sie dieses Passwort, indem Sie eine beliebige Website für den bcrypt-Hash-Generator verwenden

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

stellen Sie sicher, dass es mit $ 2a beginnt, da dieser Jenkens verwendet

3
Ismail

das Ändern von <useSecurity>true</useSecurity> in <useSecurity>false</useSecurity> reicht nicht aus. Sie sollten auch die Elemente <authorizationStrategy> und <securityRealm> entfernen und Ihren Jenkins-Server neu starten, indem Sie Sudo service jenkins restart.

denken Sie daran, setzen Sie <usesecurity> auf false, da diese Anweisungen in der offiziellen Dokumentation aufgeführt sind hier .

2

Jenkins über KUBENETES und Docker

Im Falle von Jenkins über einen Container, der von Kubernetes POD verwaltet wird, ist dies etwas komplexer, da: kubectl exec PODID --namespace=jenkins -it -- /bin/bash Sie den direkten Zugriff auf den Container erlauben, auf dem Jenkins ausgeführt wird , aber Sie haben keinen Root-Zugriff, Sudo, vi und viele Befehle sind nicht verfügbar und daher ist eine Problemumgehung erforderlich.

Verwenden Sie kubectl describe pod [...], Um den Knoten zu finden, auf dem Ihr Pod ausgeführt wird, und die Container-ID (docker://...).

  • SSH in den Knoten
  • führen Sie docker exec -ti -u root -- /bin/bash aus, um auf den Container mit Root-Rechten zuzugreifen
  • apt-get update
  • Sudo apt-get install vim

Der zweite Unterschied ist, dass die Jenkins-Konfigurationsdatei in einem anderen Pfad abgelegt wird, der dem Einhängepunkt des persistenten Volumes entspricht, dh /var/jenkins_home, Dieser Speicherort könnte sich in Zukunft ändern es läuft df.

Deaktivieren Sie anschließend die Sicherheit. Ändern Sie in der Datei /var/jenkins_home/jenkins/config.xml Den Wert true in false.

<useSecurity>false</useSecurity>

Jetzt reicht es aus, die Jenkins neu zu starten. Diese Aktion führt dazu, dass der Container und der Pod abstürzen. Sie wird dank des dauerhaften Volumens in wenigen Sekunden erneut erstellt und die Konfiguration aktualisiert (und alle Chancen wie vi, Update gelöscht).

Die gesamte Lösung wurde auf Google Kubernetes Engine getestet. UPDATE Beachten Sie, dass Sie ps -aux auch ohne root-Zugriff im Klartext anzeigen können.

[email protected]:/$ps -aux
[...]
jenkins [..] -jar /usr/share/jenkins/jenkins.war --argumentsRealm.passwd.jenkins=password --argumentsRealm.roles.jenkins=admin
[...]
1
GalloCedrone

Mit bcrypt können Sie dieses Problem lösen. Erweiterung der @ Reem-Antwort für jemanden, der versucht, den Prozess mit Bash und Python zu automatisieren.

#!/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

Ich habe das Passwort hier festgeschrieben, aber es kann je nach Anforderung eine Benutzereingabe sein. Stellen Sie außerdem sicher, dass sleep hinzugefügt wird, da sonst jeder andere Befehl, der sich um Jenkins dreht, fehlschlägt.

1
Ismail

Ein einfacher Ausweg besteht darin, sich mit dem Administrator-Psw mit Ihrem Administrator-Benutzer anzumelden:

  • Wechseln Sie zum Root-Benutzer: Sudo su -
  • Kopieren Sie das Passwort: xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
  • Loggen Sie sich mit admin ein und drücken Sie ctrl + v im Passwort-Eingabefeld.

Installieren Sie xclip, wenn Sie es nicht haben:

  • $ Sudo apt-get install xclip
1
Thomas Modeneis

Oft haben Sie nicht die Berechtigung, die Datei config.xml zu bearbeiten.

Am einfachsten wäre es, config.xml Rückgängig zu machen und mit dem Sudo-Befehl zu löschen.

Starten Sie die Jenkins mit dem Befehl Sudo /etc/init.d/jenkins restart Neu.

Dadurch wird die gesamte Sicherheit in den Jenkins deaktiviert und die Anmeldeoption wird ausgeblendet

1
Emjey

Bearbeiten Sie die Datei $ JENKINS_HOME/config.xml und ändern Sie die Sicherheitskonfiguration folgendermaßen:

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

Danach starte Jenkins neu.

0
richarbernal

Ich hatte ein ähnliches Problem und nach der Antwort von ArtB,

Ich stellte fest, dass mein Benutzer nicht die richtigen Konfigurationen hatte. also was ich getan habe:

Hinweis: Das manuelle Ändern solcher XML-Dateien ist riskant. Tun Sie dies auf eigenes Risiko. Da ich bereits gesperrt war, hatte ich nicht viel zu verlieren. AFAIK Im schlimmsten Fall hätte ich die ~/.jenkins/gelöscht. config.xml-Datei wie oben erwähnt.

**> 1. ssh zur jenkins maschine

  1. cd ~/.jenkins (Ich denke, einige Installationen haben es unter /var/lib/jenkins/config.xml abgelegt, aber nicht in meinem Fall)
  2. vi config.xml und unter "permissionStrategy xml" den folgenden Abschnitt hinzufügen (nur meinen Benutzernamen anstelle von "put-your-username" verwenden)
  3. starte jenkins neu. in meinem Fall als Root-Dienst Tomcat7 aufhören; ; Service Tomcat7 starten
  4. Versuchen Sie erneut, sich anzumelden. (hat für mich gearbeitet) **

unter

hinzufügen:

<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>

Jetzt können Sie in verschiedene Richtungen gehen. Zum Beispiel hatte ich github oauth integration, also hätte ich versuchen können, die authorisationStrategy durch etwas wie das Folgende zu ersetzen:

Hinweis :, Es hat in meinem Fall funktioniert, weil ich ein bestimmtes Github hatte oauth Plugin, das bereits konfiguriert wurde. Es ist also riskanter als die vorherige Lösung.

  <authorizationStrategy class="org.jenkinsci.plugins.GithubAuthorizationStrategy" plugin="[email protected]">
    <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
drordk

Um sowohl die Sicherheit als auch den Startassistenten ganz einfach zu deaktivieren, verwenden Sie die Java Eigenschaft:

-Djenkins.install.runSetupWizard=false

Das Schöne daran ist, dass Sie es in einem Docker-Image verwenden können, sodass Ihr Container immer sofort ohne Anmeldebildschirm gestartet wird:

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

Beachten Sie, dass sich die Jenkins-Datei config.xml, wie von anderen erwähnt, im Bild in /var/jenkins_home Befindet, die Verwendung von sed zum Ändern in der Docker-Datei jedoch fehlschlägt, da (vermutlich) die Datei config.xml nicht vorhanden ist existiert nicht, bis der Server startet.

0
Rhubarb