Come ripristinare le impostazioni di sicurezza di Jenkins dalla riga di comando?


217

C'è un modo per ripristinare tutto (o semplicemente disabilitare le impostazioni di sicurezza) dalla riga di comando senza un utente / password poiché sono riuscito a bloccarmi completamente Jenkins?

Risposte:


275

La soluzione più semplice è disabilitare completamente la sicurezza - passare truea falsein /var/lib/jenkins/config.xmlfile.

<useSecurity>true</useSecurity>

Quindi riavvia Jenkins, per

sudo service jenkins restart

Quindi vai al pannello di amministrazione e imposta nuovamente tutto.

Se stai eseguendo il tuo Jenkins all'interno del pod k8s da una finestra mobile, che è il mio caso e non puoi eseguire il servicecomando, puoi semplicemente riavviare Jenkins eliminando il pod:

kubectl delete pod <jenkins-pod-name>

Una volta emesso il comando, i k8 termineranno il vecchio pod e ne avvieranno uno nuovo.


3
Ho dovuto riavviare Jenkins per applicare le modifiche.
O Arbel, il

12
sudo service jenkins restart
MonoThreaded

10
A coloro che non riescono a trovarlo usano il loro config.xml find / -name "config.xml" nel tuo terminale.
Laser Hawk,

Dopo la modifica tag di sicurezza all'utente di false per il riavvio jenking dal prompt dei comandi --- stackoverflow.com/questions/14869311/...
Anurag_BEHS

1
Anche il file potrebbe trovarsi nella cartella ~ / .jenkins /
Andrii Abramov,

181

Un altro modo sarebbe quello di modificare manualmente il file di configurazione per l'utente (ad es. /Var/lib/jenkins/users/username/config.xml) e aggiornare il contenuto di passwordHash :

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

Una volta fatto questo, riavvia Jenkins e accedi usando questa password:

test

1
cosa succede se questa voce non è presente - dove inserirla?
serup,

2
il <passwordHash>tag xml è figlio di <hudson.security.HudsonPrivateSecurityRealm_-Details>. Guarda l'utente amministratore predefinito per avere un'idea della struttura XML totale.
Ivandov,

2
Questa è una buona soluzione che protegge l'installazione. Per curiosità, come si genera l'hash della password?
kontextify

Grazie, questo è esattamente ciò di cui avevo bisogno!
Matt Cavanagh,

La modifica del contenuto del file presente in C: \ Users \ <USER> \ .jenkins \ users \ admin ha aiutato a risolvere il problema
Sakshi Singla

45

Ho trovato il file in questione che si trova in / var / lib / jenkins chiamato config.xml, modificando il problema risolto.


1
Sto usando El-Capitan e non è stato possibile trovare config.xml nella posizione
Durai Amuthan.H

@ DuraiAmuthan.H l'hai installato con stack bitnami? Il file di configurazione sarebbe in/Applications/jenkins-2.19.3-0/apps/jenkins/jenkins_home/users/admin/config.xml
siegy22 il

@ryanzec, Nowakers answer utilizza lo stesso file ma è meglio spiegato, dovresti considerare di accettarlo come risposta corretta.
Katu

dove troveremo il file in altezza sierra
prabakaran iOS

44

L' <passwordHash>elemento in users/<username>/config.xmlaccetterà i dati del formato

salt:sha256("password{salt}")

Quindi, se il tuo sale è bare la tua password è foo, puoi produrre SHA256 in questo modo:

echo -n 'foo{bar}' | sha256sum

Dovresti ottenere 7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349come risultato. Prendi l'hash e mettilo con il sale in <passwordHash>:

<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>

Riavvia Jenkins, quindi prova ad accedere con la password foo. Quindi reimpostare la password su qualcos'altro. (Jenkins utilizza bcrypt per impostazione predefinita e un round di SHA256 non è un modo sicuro per archiviare le password. Otterrai un hash bcrypt memorizzato quando ripristini la password.)


1
Questo non sembra funzionare. un esempio inizia con un sale di #jbscrypt e quindi definisce i campi di crittografia $ 2a $ 10 $. Cosa significano questi?
jrwren,

La mia risposta ha funzionato per me. I campi aggiuntivi visualizzati sono per un diverso formato hash. La libreria utilizzata da Jenkins per la gestione delle password con hash supporta più di un formato. Il formato jbcrypt a cui ti riferisci è più sicuro di sha256 con un sale, ma il formato sha256 + salt può essere facilmente prodotto dalla riga di comando --- ricorda che il punto dell'esercizio è tornare in Jenkins, e poi cambia la password dall'interfaccia web di Jenkins.
Uckelman,

Anche questo non ha funzionato per me. Proverò a trovare maggiori informazioni su bcrypt
Laurent Picquet

ha funzionato per me. Ho usato i seguenti comandi: `` `PASSWORD_DIGEST =" $ (echo -n "$ {ADMIN_PASSWORD} {$ {SALT}}" | sha256sum | awk '{print $ 1}') "echo" password digest: $ 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 "` ``
Laurent Picquet,

Grazie mille. Utilizzato esattamente gli stessi valori e ha funzionato come un fascino. Sono rientrato e ho ripristinato il passaggio.

26

In El-Capitan non è possibile trovare config.xml su

/ Var / lib / Jenkins /

È disponibile in

~ / .Jenkins

quindi, come indicato in precedenza, aprire il file config.xml e apportare le seguenti modifiche

  • In questo sostituire <useSecurity>true</useSecurity>con<useSecurity>false</useSecurity>

  • Rimuovi <authorizationStrategy>e<securityRealm>

  • Salvalo e riavvia i jenkins ( sudo service jenkins restart )


In realtà non sono in grado di modificare il file config.xml. Quando provo a salvarlo usando VIM, si lancia che si tratta di un file di sola lettura e l'operazione per farlo non è consentita.
Emjey,

19

La risposta alla modifica era corretta. Tuttavia, penso che dovrebbe essere menzionato che /var/lib/jenkins/config.xmlassomiglia a qualcosa del genere se hai attivato la "Strategia di autorizzazione a matrice basata su progetto". Anche l'eliminazione /var/lib/jenkins/config.xmle il riavvio di jenkins sono utili. Ho anche cancellato gli utenti /var/lib/jenkins/usersper iniziare da zero.

<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

Per ripristinarlo senza disabilitare la sicurezza se si utilizzano le autorizzazioni matrice (probabilmente facilmente adattabili ad altri metodi di accesso):

  1. In config.xml, impostare disableSignupsu false.
  2. Riavvia Jenkins.
  3. Vai alla pagina Web di Jenkins e registrati con un nuovo utente .
  4. In config.xml, duplicare una delle <permission>hudson.model.Hudson.Administer:username</permission>righe e sostituirla usernamecon il nuovo utente.
  5. Se è un server privato, disableSignuptorna su truein config.xml.
  6. Riavvia Jenkins.
  7. Vai alla pagina Web di Jenkins e accedi come nuovo utente .
  8. Reimpostare la password dell'utente originale.
  9. Accedi come l'utente originale.

Pulizia opzionale:

  1. Elimina il nuovo utente.
  2. Elimina la <permission>linea temporanea in config.xml.

Nessun titolo è stato danneggiato durante questa risposta.


Aggiungi a cleanup set disableSignup torna su true e riavvia jenkins
Marc

14

Per disabilitare la sicurezza di Jenkins in semplici passaggi in Linux, eseguire questi comandi:

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

Rimuoverà useSecuritye le authorizationStrategylinee dal tuo config.xmlfile di configurazione di root e riavvierà Jenkins.

Vedi anche: disabilitare la sicurezza sul sito Web di Jenkins


Dopo aver ottenuto l'accesso a Jenkins, è possibile riattivare la sicurezza nella pagina Configura sicurezza globale selezionando Controllo accesso / Area sicurezza . Dopo di che non dimenticare di creare l'utente amministratore .


Ha funzionato per me, tuttavia, ora sta saltando l'autorizzazione.
Hemanto,

@hemanto Devi abilitare la sicurezza per riattivare l'autorizzazione. Ho aggiornato la risposta.
Kenorb,

12

Per caso, ti blocchi accidentalmente fuori da Jenkins a causa di un errore di autorizzazione e non hai accesso sul lato server per passare all'utente o alla radice jenkins ... Puoi fare un lavoro in Jenkins e aggiungerlo allo script Shell:

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

Quindi fai clic su Crea ora e riavvia Jenkins (o il server, se necessario!)


1
Come si crea un lavoro in Jenkins nel caso in cui ne sia stato bloccato fuori?
GeroldBroser ripristina Monica

In questo caso, avevo effettuato l'accesso a una normale finestra di Chrome e ho modificato le impostazioni di sicurezza e testato in una finestra di navigazione in incognito prima di disconnettermi dalla finestra principale. Il test non mi ha permesso di accedere, ma le mie sessioni sono rimaste nella finestra principale in modo da poter riparare il danno.
Nick,

1
Credo che parte delle impostazioni di sicurezza che avevo modificato significasse anche che la mia sessione di autorizzazione non aveva più il permesso di modificare le configurazioni di sicurezza di Jenkins.
Nick,

Incontrare questo problema dopo l'attivazione ProjectMatrixAuthorization. Quando apporto la modifica e riavvio Jenkins vedo un'eccezione Java nell'interfaccia utente di Jenkins. Per risolvere questo problema, ho rimosso anche la riga con authorizationStrategyed era di nuovo a posto. Jenkins l'ha letta all'inizio come un tag vuoto.
Peter Schneider,

12

Possiamo reimpostare la password lasciando attiva la sicurezza.

Il file config.xml in / var / lib / Jenkins / users / admin / agisce in qualche modo come il file / etc / shadow sistemi simili a Linux o UNIX o il file SAM in Windows, nel senso che memorizza l'hash del password dell'account.

Se è necessario reimpostare la password senza accedere, è possibile modificare questo file e sostituire il vecchio hash con uno nuovo generato da bcrypt:

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

Questo genererà il tuo hash, con il prefisso 2a, il prefisso corretto per gli hash Jenkins.

Ora modifica il file config.xml:

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

Una volta inserito il nuovo hash, reimposta Jenkins:

(se si utilizza un sistema con systemd):

sudo systemctl restart Jenkins

Ora puoi accedere e non hai lasciato il sistema aperto per un secondo.


5
\.jenkins\secrets\initialAdminPassword

Copia la password dal file inizialeAdminPassword e incollala nel Jenkins.


4

Per rimuovere la protezione predefinita per jenkins nel sistema operativo Windows,

Puoi attraversare il file Config.xml creato all'interno di /users/{UserName}/.jenkins.

All'interno di questo file è possibile modificare il codice da

<useSecurity>true</useSecurity>

Per,

<useSecurity>false</useSecurity>

4

1 prima controlla la posizione se installi war o Linux o windows in base a quello

per esempio in caso di guerra sotto Linux e per utente amministratore

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

vai a questo tag dopo #jbcrypt:

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

cambiare questa password utilizzando qualsiasi sito Web per il generatore di hash bcrypt

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

assicurati che inizi con $ 2a perché usa questo jenkens


4

step-1: vai nella directory cd .jenkins / secrets quindi otterrai un 'inizialeAdminPassword'.

step-2: nano initialAdminPassword

otterrai una password


2

cambiando l' <useSecurity>true</useSecurity>ad <useSecurity>false</useSecurity>non sarà sufficiente, è necessario rimuovere <authorizationStrategy>e <securityRealm>elementi troppo e riavviare il server di Jenkins facendo sudo service jenkins restart.

ricorda che, impostato <usesecurity>su falsepuò causare solo un problema, poiché queste istruzioni sono menzionate nella loro documentazione ufficiale qui .


1

La soluzione semplice è utilizzare l'amministratore psw per accedere con l'utente amministratore:

  • Passa all'utente root: sudo su -
  • Copia la password: xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
  • Accedi con admin e premi ctrl + vsulla casella di inserimento password.

Installa xclip se non ce l'hai:

  • $ sudo apt-get install xclip

Utilizzando la password predefinita ha funzionato per me. Per semplificare, potresti semplicemente fare 'cat secrets / initialAdminPassword' piuttosto che installare xclip per una tantum.
Paolo,

A volte questa password non è presente. Non sono sicuro di come sia possibile ignorare questa configurazione, ma per me non è presente e ho dovuto modificare config.xml
vinicius.hisao

1

Jenkins su KUBENETES e Docker

In caso di Jenkins su un contenitore gestito da un kubernetes POD è un po 'più complessa da quando: kubectl exec PODID --namespace=jenkins -it -- /bin/bashvi permetterà di accedere direttamente al contenitore in esecuzione Jenkins, ma non si avrà accesso root , sudo, vie molti comandi non sono disponibili e quindi una soluzione alternativa è necessario.

Utilizzare kubectl describe pod [...]per trovare il nodo che esegue il Pod e l'ID contenitore(docker://...)

  • SSH nel nodo
  • eseguire docker exec -ti -u root -- /bin/bashper accedere al contenitore con i privilegi di root
  • apt-get update
  • sudo apt-get install vim

La seconda differenza è che il file di configurazione Jenkins si trova in un percorso diverso che corrisponde al punto di montaggio del volume persistente, ovvero che /var/jenkins_homequesta posizione potrebbe cambiare in futuro, verificarlo in esecuzione df.

Quindi disabilitare la sicurezza: cambia da vero a falso nel /var/jenkins_home/jenkins/config.xmlfile.

<useSecurity>false</useSecurity>

Ora è sufficiente riavviare Jenkins, azione che causerà la morte del contenitore e del Pod, che verrà creato nuovamente in pochi secondi con la configurazione aggiornata (e tutte le possibilità come vi, aggiornamento cancellate) grazie al volume persistente.

L'intera soluzione è stata testata su Google Kubernetes Engine. AGGIORNAMENTO Si noti che è possibile eseguire anche ps -auxla password in testo normale viene mostrato anche senza accesso root.

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

1

Molte volte non avrai le autorizzazioni per modificare il file config.xml.

La cosa più semplice sarebbe tornare indietro config.xmled eliminare usando il comando sudo.

Riavvia i jenkins usando il comando sudo /etc/init.d/jenkins restart

Ciò disabiliterà tutta la sicurezza in Jenkins e l'opzione di accesso scomparirebbe


Se puoi eliminare config.xml con sudo, puoi anche modificarlo con sudo. ad esempio, sudo vi ...
Lee Meador,

1

Utilizzando bcrypt è possibile risolvere questo problema. Estendere la risposta @Reem per qualcuno che sta cercando di automatizzare il processo usando bash e 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

Ho mantenuto la password codificata qui, ma può essere un input dell'utente a seconda del requisito. Assicurati anche di aggiungere che sleepaltrimenti qualsiasi altro comando che ruota attorno a Jenkins fallirà.


1

Per disabilitare semplicemente sia la sicurezza che la procedura guidata di avvio, utilizzare la proprietà JAVA:

-Djenkins.install.runSetupWizard=false

La cosa bella di questo è che puoi usarlo in un'immagine Docker in modo tale che il tuo contenitore si avvii sempre immediatamente senza alcuna schermata di accesso:

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

Si noti che, come menzionato da altri, il file config.xml di Jenkins è /var/jenkins_homenell'immagine, ma l'utilizzo sedper modificarlo dal file Dockerfile ha esito negativo, poiché (presumibilmente) il file config.xml non esiste fino all'avvio del server.


0

Ho avuto un problema simile e in seguito alla risposta di ArtB,

Ho scoperto che il mio utente non aveva le configurazioni corrette. quindi quello che ho fatto:

Nota: la modifica manuale di tali file XML è rischiosa. Fallo a tuo rischio e pericolo. Da quando ero già bloccato, non avevo molto da perdere. AFAIK Nel peggiore dei casi avrei cancellato il file ~ / .jenkins / config.xml come precedentemente menzionato.

**> 1. ssh alla macchina jenkins

  1. cd ~ / .jenkins (suppongo che alcune installazioni lo mettano in /var/lib/jenkins/config.xml, ma non nel mio caso)
  2. vi config.xml, e sotto il tag licenseStrategy xml, aggiungi la sezione seguente (ho appena usato il mio nome utente invece di "put-your-username")
  3. riavvia jenkins. nel mio caso come servizio root tomcat7 stop; ; avviare il servizio tomcat7
  4. Prova ad accedere nuovamente. (ha funzionato per me) **

sotto

Inserisci:

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

Ora puoi andare in diverse direzioni. Ad esempio ho avuto l'integrazione con Github oauth, quindi avrei potuto provare a sostituire l'autorizzazione Strategy con qualcosa di simile al seguente:

Nota :, ha funzionato nel mio caso perché avevo uno specifico plugin github oauth che era già configurato. Quindi è più rischioso rispetto alla soluzione precedente.

  <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

Modifica il file $ JENKINS_HOME / config.xml e cambia la configurazione della sicurezza con questo:

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

Dopodiché riavvia Jenkins.


0

Per chi utilizza macOS, la nuova versione può essere installata da homebrew. quindi per riposare, questa riga di comando deve usare:

brew services restart jenkins-lts
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.