web-dev-qa-db-fra.com

Comment réinitialiser les paramètres de sécurité Jenkins à partir de la ligne de commande?

Existe-t-il un moyen de tout réinitialiser (ou simplement de désactiver les paramètres de sécurité) à partir de la ligne de commande sans nom d'utilisateur/mot de passe, car j'ai réussi à me verrouiller complètement en dehors de Jenkins?

204
ryanzec

La solution la plus simple consiste à désactiver complètement la sécurité - remplacez true par false dans le fichier /var/lib/jenkins/config.xml.

<useSecurity>true</useSecurity>

Ensuite, il suffit de redémarrer Jenkins, par

Sudo service jenkins restart

Et puis allez dans le panneau d'administration et réglez tout une fois de plus.

Si vous exécutez votre Jenkins dans le pod k8 depuis un menu fixe, ce qui est mon cas et que vous ne pouvez pas exécuter la commande service, vous pouvez simplement redémarrer Jenkins en supprimant le pod:

kubectl delete pod <jenkins-pod-name>

Une fois la commande émise, les k8 mettront fin à l’ancien pod et en démarreront un nouveau.

258
Nowaker

Une autre méthode consiste à modifier manuellement le fichier de configuration de votre utilisateur (par exemple, /var/lib/jenkins/users/username/config.xml) et à mettre à jour le contenu de passwordHash:

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

Une fois cela fait, redémarrez Jenkins et connectez-vous avec ce mot de passe:

test
165
Arseny

J'ai trouvé le fichier en question situé dans/var/lib/jenkins appelé config.xml, ce qui modifiait le problème.

44
ryanzec

L'élément <passwordHash> dans users/<username>/config.xml acceptera les données du format

salt:sha256("password{salt}")

Donc, si votre sel est bar et votre mot de passe est foo, alors vous pouvez produire le SHA256 comme ceci:

echo -n 'foo{bar}' | sha256sum

Vous devriez obtenir 7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349 comme résultat. Prenez le hash et mettez-le avec le sel dans <passwordHash>:

<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>

Redémarrez Jenkins, puis essayez de vous connecter avec le mot de passe foo. Puis réinitialisez votre mot de passe pour quelque chose d'autre. (Jenkins utilise bcrypt par défaut et un tour de SHA256 n’est pas un moyen sûr de stocker les mots de passe. Vous obtiendrez un hachage bcrypt lorsque vous réinitialiserez votre mot de passe.)

40
uckelman

Dans El-Capitan config.xml ne peut être trouvé à

/ var/lib/jenkins /

Son disponible dans

~/.jenkins

ensuite, comme les autres mentionnés, ouvrez le fichier config.xml et apportez les modifications suivantes

  • Dans ce cas, remplacez <useSecurity>true</useSecurity> par <useSecurity>false</useSecurity>

  • Supprimer <authorizationStrategy> et <securityRealm>

  • Enregistrez-le et redémarrez jenkins (Sudo service jenkins restart)

23
Durai Amuthan.H

La réponse sur la modification était correcte. Cependant, je pense qu'il convient de mentionner que /var/lib/jenkins/config.xml ressemble à ceci si vous avez activé la "Stratégie d'autorisation de matrice basée sur le projet". Supprimer /var/lib/jenkins/config.xml et redémarrer Jenkins font également l'affaire. J'ai également supprimé les utilisateurs dans /var/lib/jenkins/users pour recommencer à zéro.

<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

Pour le réinitialiser sans désactiver la sécurité si vous utilisez des autorisations de matrice (probablement facilement adaptable à d'autres méthodes de connexion):

  1. Dans config.xml, définissez disableSignup sur false.
  2. Redémarrer Jenkins.
  3. Accédez à la page Web Jenkins et inscrivez-vous avec un nouvel utilisateur.
  4. Dans config.xml, dupliquez l'une des lignes <permission>hudson.model.Hudson.Administer:username</permission> et remplacez username par le nouvel utilisateur.
  5. S'il s'agit d'un serveur privé, définissez disableSignup sur true dans config.xml.
  6. Redémarrer Jenkins.
  7. Accédez à la page Web Jenkins et connectez-vous en tant que nouvel utilisateur.
  8. Réinitialiser le mot de passe de l'utilisateur d'origine.
  9. Connectez-vous en tant qu'utilisateur d'origine.

Nettoyage optionnel:

  1. Supprimer le nouvel utilisateur.
  2. Supprimez la ligne temporaire <permission> dans config.xml.

Aucun titre n'a été blessé lors de cette réponse.

14
l0b0

Pour désactiver la sécurité Jenkins en quelques étapes simples sous Linux, exécutez les commandes suivantes:

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

Il supprimera les lignes useSecurity et authorizationStrategy de votre fichier de configuration racine config.xml et redémarrera votre Jenkins.

Voir aussi: Désactiver la sécurité sur le site Web de Jenkins


Après avoir obtenu l’accès à Jenkins, vous pouvez réactiver la sécurité dans votre page Configurer la sécurité globale en choisissant l’option Contrôle d’accès/Domaine de sécurité . Après cela, n'oubliez pas de créer l'utilisateur admin .

14
kenorb

Par contre, vous vous verrouillez accidentellement hors de Jenkins à cause d'une erreur de permission et vous n'avez pas d'accès côté serveur pour passer à l'utilisateur ou à la racine de jenkins ... Vous pouvez créer un travail dans Jenkins et l'ajouter au script de shell:

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

Puis cliquez sur Build Now et redémarrez Jenkins (ou le serveur si vous en avez besoin!)

12
Nick

Nous pouvons réinitialiser le mot de passe tout en laissant la sécurité activée.

Le fichier config.xml dans/var/lib/Jenkins/users/admin/agit en quelque sorte comme le fichier/etc/shadow sous Linux ou les systèmes de type UNIX ou le fichier SAM dans Windows, en ce sens qu'il stocke le hachage du fichier. mot de passe du compte.

Si vous devez réinitialiser le mot de passe sans vous connecter, vous pouvez éditer ce fichier et remplacer l'ancien hachage par un nouveau généré à partir de bcrypt:

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

Cela produira votre hachage, avec le préfixe 2a, le préfixe correct pour les hachages Jenkins.

Maintenant, éditez le fichier config.xml:

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

Une fois que vous avez inséré le nouveau hachage, réinitialisez Jenkins:

(si vous êtes sur un système avec systemd):

Sudo systemctl restart Jenkins

Vous pouvez maintenant vous connecter et vous n'avez pas laissé votre système ouvert pendant une seconde.

10
Reem
\.jenkins\secrets\initialAdminPassword

Copiez le mot de passe à partir du fichier initialAdminPassword et collez-le dans Jenkins.

5
Shivam

étape-1: allez dans le répertoire cd .jenkins/secrets, vous obtiendrez un 'initialAdminPassword'.

étape 2: nano initialAdminPassword

vous obtiendrez un mot de passe

4
Shaik Zeeshan

Afin de supprimer la sécurité par défaut pour Jenkins dans Windows OS,

Vous pouvez parcourir le fichier Config.xml créé à l’aide du fichier /users/{UserNameName/.jenkins.

Dans ce fichier, vous pouvez changer le code de

<useSecurity>true</useSecurity>

À,

<useSecurity>false</useSecurity>
4
Krutik

1 premier emplacement de contrôle si vous installez war ou Linux ou des fenêtres basées sur celui-ci

par exemple si la guerre est sous Linux et pour l'utilisateur admin

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

aller à cette balise après #jbcrypt:

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

changer ce mot de passe en utilisant n'importe quel site web pour le générateur de hachage bcrypt

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

assurez-vous qu'il commence par $ 2a car celui-ci est utilisé par jenkens

3
Ismail

changer le <useSecurity>true</useSecurity> en <useSecurity>false</useSecurity> ne suffira pas, vous devriez aussi supprimer les éléments <authorizationStrategy> et <securityRealm> et redémarrer votre serveur Jenkins en faisant Sudo service jenkins restart.

rappelez-vous ceci, régler <usesecurity> sur false risque de vous poser problème, car ces instructions sont mentionnées dans leur documentation officielle ici .

2
Musharraf Al-tamimi

Jenkins sur KUBENETES et Docker

Dans le cas où Jenkins, un conteneur géré par un Kubernetes POD est un peu plus complexe puisque: kubectl exec PODID --namespace=jenkins -it -- /bin/bash autoriserez-vous à accéder directement au conteneur exécutant Jenkins, mais vous n’avez pas accès à la racine, Sudo, vi et de nombreuses commandes ne sont pas disponibles. Par conséquent, une solution de contournement est nécessaire.

Utilisez kubectl describe pod [...] pour trouver le nœud exécutant votre pod et l'ID de conteneur (docker://...)

  • SSH dans le noeud
  • lancez docker exec -ti -u root -- /bin/bash pour accéder au conteneur avec les privilèges Root
  • apt-get update
  • Sudo apt-get install vim

La deuxième différence est que le fichier de configuration Jenkins est placé dans un chemin différent qui correspond au point de montage du volume persistant, c'est-à-dire /var/jenkins_home, cet emplacement peut changer à l'avenir, vérifiez-le en cours d'exécution df.

Désactivez ensuite la sécurité - remplacez true par false dans le fichier /var/jenkins_home/jenkins/config.xml.

<useSecurity>false</useSecurity>

Maintenant, il suffit de redémarrer Jenkins, action qui fera mourir le conteneur et le pod, il sera créé à nouveau en quelques secondes avec la configuration mise à jour (et toutes les chances comme vi, mise à jour effacée) grâce au volume persistant.

L'ensemble de la solution a été testé sur Google Kubernetes Engine. UPDATE Notez que vous pouvez également exécuter ps -aux, le mot de passe en texte brut est affiché même sans accès root.

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

En utilisant bcrypt, vous pouvez résoudre ce problème. Étendre la réponse @Reem à quelqu'un qui tente d'automatiser le processus à l'aide de bash et de 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

J'ai gardé le mot de passe en dur ici, mais il peut s'agir d'une entrée d'utilisateur en fonction des besoins. Assurez-vous également d’ajouter que sleep sinon toute autre commande tournant autour de Jenkins échouera.

1
Ismail

Le moyen le plus simple consiste à utiliser l’administrateur psw pour vous connecter à votre administrateur:

  • Changer en utilisateur root: Sudo su -
  • Copiez le mot de passe: xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
  • Connectez-vous avec admin et appuyez sur ctrl + v dans le champ de saisie du mot de passe.

Installez xclip si vous ne l'avez pas:

  • $ Sudo apt-get install xclip
1
Thomas Modeneis

Souvent, vous ne disposerez pas des autorisations nécessaires pour modifier le fichier config.xml.

Le plus simple serait de reprendre config.xml et de le supprimer en utilisant la commande Sudo.

Redémarrez les Jenkins en utilisant la commande Sudo /etc/init.d/jenkins restart

Cela désactivera toute la sécurité dans Jenkins et l'option de connexion disparaîtrait

1
Emjey

Editez le fichier $ JENKINS_HOME/config.xml et changez la configuration de la sécurité avec ceci:

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

Après cela, redémarrez Jenkins.

0
richarbernal

J'ai eu un problème similaire, et suite à la réponse d'ArtB,

J'ai constaté que mon utilisateur n'avait pas les configurations appropriées. alors ce que j'ai fait:

Note: la modification manuelle de tels fichiers XML est risquée. Faites-le à vos risques et périls. Comme j'étais déjà en lock-out, je n'avais pas grand chose à perdre. fichier config.xml en tant que poste précédent mentionné.

**> 1. ssh à la machine de jenkins

  1. cd ~/.jenkins (je suppose que certaines installations le placent sous /var/lib/jenkins/config.xml, mais pas dans mon cas)
  2. vi config.xml, et sous la balise x autorisationStrategy, ajoutez la section ci-dessous (je viens d'utiliser mon nom d'utilisateur au lieu de "put-votre-nom d'utilisateur")
  3. redémarrez Jenkins. dans mon cas, en tant que service racine Tomcat7, arrêtez-vous; ; service Tomcat7 start
  4. Essayez de vous connecter à nouveau. (a travaillé pour moi) **

sous

ajouter:

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

Maintenant, vous pouvez aller dans différentes directions. Par exemple, j'avais l'intégration github oauth, alors j'aurais pu essayer de remplacer l'autorisationStrategy par quelque chose de semblable ci-dessous:

Note: Cela a fonctionné dans mon cas car j'avais un plugin spécifique github oauth déjà configuré. C'est donc plus risqué que la solution précédente.

  <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

Pour très simplement désactiver la sécurité et l’Assistant de démarrage, utilisez la propriété Java:

-Djenkins.install.runSetupWizard=false

La bonne chose à ce sujet est que vous pouvez l’utiliser dans une image Docker de sorte que votre conteneur démarre toujours immédiatement sans écran de connexion:

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

Notez que, comme d'autres l'ont mentionné, le fichier config.xml de Jenkins se trouve dans /var/jenkins_home dans l'image, mais l'utilisation de sed pour le modifier à partir du fichier Docker échoue, car (vraisemblablement) le fichier config.xml ne fonctionne pas. existe jusqu'au démarrage du serveur.

0
Rhubarb