Como redefinir as configurações de segurança do Jenkins na linha de comando?

217

Existe uma maneira de redefinir tudo (ou apenas desativar as configurações de segurança) na linha de comando sem um usuário / senha, pois eu consegui me bloquear completamente Jenkins?

ryanzec
fonte

Respostas:

275

A solução mais simples é desabilitar completamente de segurança - a mudança truepara falseno /var/lib/jenkins/config.xmlarquivo.

<useSecurity>true</useSecurity>

Depois, basta reiniciar o Jenkins,

sudo service jenkins restart

E depois vá ao painel de administração e defina tudo mais uma vez.

Se você estiver executando seu Jenkins dentro do pod k8s a partir de uma janela de encaixe, que é o meu caso e não pode executar o servicecomando, basta reiniciar o Jenkins excluindo o pod:

kubectl delete pod <jenkins-pod-name>

Depois que o comando foi emitido, o k8s encerrará o pod antigo e iniciará um novo.

Nowaker
fonte
3
Eu precisava reiniciar o Jenkins para que as alterações fossem aplicadas.
Ou Arbel
12
sudo service jenkins restart
MonoThreaded
10
Para aqueles que não conseguem encontrar, o config.xml usa find / -name "config.xml" no seu terminal.
Laser Falcão
Depois Alterando o usuário tag Segurança para false para reiniciar jenking de prompt de comando --- stackoverflow.com/questions/14869311/...
Anurag_BEHS
1
Também o arquivo pode estar localizado em ~ / .jenkins / folder
Andrii Abramov
181

Uma outra maneira seria editar manualmente o arquivo de configuração para seu usuário (por exemplo, /var/lib/jenkins/users/username/config.xml) e atualizar o conteúdo de passwordHash :

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

Depois de fazer isso, basta reiniciar o Jenkins e fazer login usando esta senha:

test
Arseny
fonte
1
e se essa entrada não estiver lá - onde colocá-la?
Serup
2
a <passwordHash>tag xml é filha de <hudson.security.HudsonPrivateSecurityRealm_-Details>. Veja o usuário administrador padrão para ter uma idéia da estrutura XML total.
ivandov
2
Esta é uma boa solução que mantém a instalação segura. Por curiosidade, como se gera esse hash de senha?
Kdextify
Obrigado, é exatamente isso que eu precisava!
precisa
. Modificando o conteúdo de arquivo presente em C: \ Users \ <usuário> \ Jenkins \ Users \ admin ajudou a resolver o problema
Sakshi Singla
45

Encontrei o arquivo em questão localizado em / var / lib / jenkins chamado config.xml, modificando o problema.

ryanzec
fonte
1
Eu estou usando El-Capitan e config.xml não pôde ser encontrado no local
Durai Amuthan.H
@ DuraiAmuthan.H Você instalou com a pilha bitnami? O arquivo de configuração estaria em/Applications/jenkins-2.19.3-0/apps/jenkins/jenkins_home/users/admin/config.xml
siegy22
@ryanzec, Nowakers answer usa o mesmo arquivo, mas é melhor explicado, você deve aceitá-lo como a resposta correta.
Katu
onde encontraremos o arquivo em hight sierra #
iOS30
44

O <passwordHash>elemento in users/<username>/config.xmlaceitará dados do formato

salt:sha256("password{salt}")

Portanto, se seu salt é bare sua senha é foo, você pode produzir o SHA256 assim:

echo -n 'foo{bar}' | sha256sum

Você deve obter 7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349como resultado. Pegue o hash e coloque-o com sal em <passwordHash>:

<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>

Reinicie o Jenkins e tente fazer login com a senha foo. Redefina sua senha para outra coisa. (Jenkins usa bcrypt por padrão, e uma rodada de SHA256 não é uma maneira segura de armazenar senhas. Você obterá um hash de bcrypt armazenado quando redefinir sua senha.)

uckelman
fonte
1
Isso não parece funcionar. um exemplo começa com um sal de #jbscrypt e depois define os campos de criptografia $ 2a $ 10 $. O que isso significa?
Jrwren
Minha resposta funcionou para mim. Os campos adicionais que você vê são para um formato de hash diferente. A biblioteca que Jenkins usa para manipular senhas com hash suporta mais de um formato. O formato jbcrypt a que você está se referindo é mais seguro que o sha256 com um salt, mas o formato sha256 + salt pode ser facilmente produzido a partir da linha de comando - lembre-se de que o objetivo do exercício é voltar ao Jenkins e, em seguida, altere a senha da interface da web do Jenkins.
Uckelman
Isso também não funcionou para mim. Vou tentar encontrar mais informações sobre bcrypt
Laurent Picquet
funcionou para mim. Eu usei os seguintes comandos: `` `PASSWORD_DIGEST =" $ (eco-n "$ {ADMIN_PASSWORD} {$ {SALT}}" | sha256sum | awk '{print $ 1}') "eco" resumo da senha: $ 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
Graças um mil. Usava exatamente os mesmos valores e funcionava como um encanto. Voltei e redefini o passe.
26

No El-Capitan, o config.xml não pode ser encontrado em

/ var / lib / jenkins /

Está disponível em

~ / .jenkins

depois disso, como mencionado anteriormente, abra o arquivo config.xml e faça as seguintes alterações

  • Substitua <useSecurity>true</useSecurity>por<useSecurity>false</useSecurity>

  • Remova <authorizationStrategy>e<securityRealm>

  • Salve-o e reinicie o jenkins ( serviço sudo jenkins restart )

Durai Amuthan.H
fonte
Na verdade, não consigo editar o arquivo config.xml. Quando tento salvá-lo usando o vim, ele mostra que é um arquivo somente leitura e a operação para torná-lo não é permitida.
Emjey
19

A resposta sobre a modificação estava correta. No entanto, acho que deve ser mencionado que se /var/lib/jenkins/config.xmlparece com isso se você ativou a "Estratégia de autorização de matriz baseada em projeto". Excluir /var/lib/jenkins/config.xmle reiniciar o jenkins também funciona. Também excluí os usuários /var/lib/jenkins/userspara começar do 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>
user637338
fonte
14

Para redefini-lo sem desativar a segurança se você estiver usando permissões de matriz (provavelmente facilmente adaptável a outros métodos de login):

  1. Em config.xml, defina disableSignupcomo false.
  2. Reinicie o Jenkins.
  3. Vá para a página da Web Jenkins e inscreva-se com um novo usuário .
  4. No config.xml , duplique uma das <permission>hudson.model.Hudson.Administer:username</permission>linhas e substitua usernamepelo novo usuário.
  5. Se for um servidor privado, defina disableSignup de volta para truenos config.xml.
  6. Reinicie o Jenkins.
  7. Vá para a página da Web Jenkins e efetue login como o novo usuário .
  8. Redefina a senha do usuário original.
  9. Conecte-se como usuário original.

Limpeza opcional:

  1. Exclua o novo usuário.
  2. Exclua a <permission>linha temporária config.xml.

Nenhum título foi prejudicado durante esta resposta.

l0b0
fonte
Adicione ao conjunto de limpeza disableSignup novamente para true e reinicie o jenkins
Marc
14

Para desativar a segurança do Jenkins em etapas simples no Linux, execute estes comandos:

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

Ele removerá useSecuritye authorizationStrategyalinhará o seu config.xmlarquivo de configuração raiz e reiniciará o seu Jenkins.

Veja também: Desativar segurança no site da Jenkins


Após obter o acesso ao Jenkins, você pode reativar a segurança na página Configurar Segurança Global , escolhendo o Controle de Acesso / Região de Segurança . Depois disso, não esqueça de criar o usuário administrador .

kenorb
fonte
Funcionou para mim, no entanto, está pulando a autorização agora.
hemanto
@ hemanto Você precisa ativar a segurança para reativar a autorização. Eu atualizei a resposta.
Kenorb
12

Por acaso, você acidentalmente se bloqueia no Jenkins devido a um erro de permissão e não tem acesso no servidor para mudar para o usuário ou raiz do jenkins ... Você pode fazer um trabalho no Jenkins e adicioná-lo ao Shell Script:

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

Em seguida, clique em Compilar agora e reinicie o Jenkins (ou o servidor, se necessário!)

usuario
fonte
1
Como você cria um emprego na Jenkins, para o caso de ficar trancado?
GeroldBroser restabelece Monica
Nesse caso, eu tinha uma janela normal do Chrome conectada e alterei as configurações de segurança e testei em uma janela anônima antes de sair da janela principal. O teste não me permitiu fazer login, mas minhas sessões persistiram na janela principal para que eu pudesse reparar o dano.
Nick
1
Acredito que parte das configurações de segurança que eu havia alterado também significava que minha sessão de autenticação não tinha mais permissão para alterar as configurações de segurança do Jenkins.
Nick
Execute esse problema após a ativação ProjectMatrixAuthorization. Quando faço a alteração e reinicio o Jenkins, vejo uma exceção Java na Jenkins-UI. Para corrigir isso, também removi a linha authorizationStrategye estava tudo bem novamente. Jenkins o leu no início seguinte como uma etiqueta vazia.
Peter Schneider
12

Podemos redefinir a senha enquanto mantemos a segurança ativada.

O arquivo config.xml em / var / lib / Jenkins / users / admin / age como o arquivo / etc / shadow de sistemas Linux ou UNIX ou o arquivo SAM no Windows, no sentido de armazenar o hash do arquivo senha da conta.

Se você precisar redefinir a senha sem fazer login, poderá editar este arquivo e substituir o hash antigo por um novo gerado a partir do bcrypt:

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

Isso produzirá seu hash, com o prefixo 2a, o prefixo correto para os hashes Jenkins.

Agora, edite o arquivo config.xml:

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

Depois de inserir o novo hash, redefina o Jenkins:

(se você estiver em um sistema com systemd):

sudo systemctl restart Jenkins

Agora você pode fazer login e não deixou o sistema aberto por um segundo.

Reem
fonte
5
\.jenkins\secrets\initialAdminPassword

Copie a senha do arquivo initialAdminPassword e cole-a no Jenkins.

Shivam
fonte
4

Para remover a segurança padrão do jenkins no sistema operacional Windows,

Você pode percorrer o arquivo Config.xml criado em /users/{UserName}/.jenkins.

Dentro deste arquivo, você pode alterar o código de

<useSecurity>true</useSecurity>

Para,

<useSecurity>false</useSecurity>
Krutik
fonte
4

1 verifique primeiro o local se você instalar war ou Linux ou Windows com base nesse

por exemplo, se a guerra no Linux e para o usuário administrador

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

vá para esta tag após #jbcrypt:

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

altere essa senha usando qualquer site para gerador de hash bcrypt

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

certifique-se de começar com $ 2a, porque esse jenkens usa

Ismail
fonte
4

Etapa 1: vá para o diretório cd .jenkins / secrets e você receberá um 'initialAdminPassword'.

Etapa 2: nano initialAdminPassword

você receberá uma senha

Shaik Zeeshan
fonte
2

mudando o <useSecurity>true</useSecurity>que <useSecurity>false</useSecurity>não será suficiente, você deve remover <authorizationStrategy>e <securityRealm>elementos também e reinicie o servidor Jenkins fazendo sudo service jenkins restart.

lembre-se disso, definido <usesecurity>como falsesomente pode causar um problema para você, pois essas instruções são mencionadas na documentação oficial aqui .

Musharraf Al-tamimi
fonte
1

Uma maneira fácil de resolver isso é usar o admin psw para fazer login com seu usuário administrador:

  • Mude para usuário root: sudo su -
  • Copie a senha: xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
  • Entre com o administrador e pressione ctrl + va caixa de entrada da senha.

Instale o xclip se não o tiver:

  • $ sudo apt-get install xclip
Thomas Modeneis
fonte
Usar a senha padrão funcionou para mim. Para simplificar, você pode simplesmente fazer 'cat secrets / initialAdminPassword' em vez de instalar o xclip por uma única vez.
Paul
Às vezes, essa senha não está presente. Eu não sei como você pode ignorar esta configuração, mas para mim, não está presente e eu tive que editar config.xml
vinicius.hisao
1

Jenkins sobre KUBENETES e Docker

Em caso de Jenkins sobre um recipiente gerido por uma Kubernetes POD é um pouco mais complexa, pois: kubectl exec PODID --namespace=jenkins -it -- /bin/bashvocê permitirá o acesso diretamente para o recipiente rodando Jenkins, mas você não terá acesso root , sudo, vie muitos comandos não estão disponíveis e, portanto, uma solução alternativa é preciso.

Use kubectl describe pod [...]para encontrar o nó executando seu Pod e o ID do contêiner(docker://...)

  • SSH no nó
  • executar docker exec -ti -u root -- /bin/bashpara acessar o contêiner com privilégios de Raiz
  • apt-get update
  • sudo apt-get install vim

A segunda diferença é que o arquivo de configuração do Jenkins é colocado em um caminho diferente que corresponde ao ponto de montagem do volume persistente, ou seja /var/jenkins_home, esse local pode mudar no futuro, verifique em execução df.

Em seguida, desative a segurança - altere true para false no /var/jenkins_home/jenkins/config.xmlarquivo.

<useSecurity>false</useSecurity>

Agora basta reiniciar o Jenkins, ação que fará com que o contêiner e o Pod morram, ele será criado novamente em alguns segundos com a configuração atualizada (e toda a chance, como vi, atualização apagada), graças ao volume persistente.

Toda a solução foi testada no Google Kubernetes Engine. ATUALIZAÇÃO Observe que você também pode executar ps -auxa senha em texto simples, mesmo sem acesso root.

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

Muitas vezes você não terá permissão para editar o arquivo config.xml.

A coisa mais simples seria voltar atrás config.xml e excluir usando o comando sudo.

Reinicie os jenkins usando o comando sudo /etc/init.d/jenkins restart

Isso desativará toda a segurança no Jenkins e a opção de login desaparecerá

Emjey
fonte
Se você pode excluir o config.xml com o sudo, também pode editá-lo com o sudo. por exemplo sudo vi ...
Lee Meador 12/11
1

Usando o bcrypt, você pode resolver esse problema. Estendendo a resposta @Reem para alguém que está tentando automatizar o processo usando o bash e o 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

Eu mantive a senha codificada aqui, mas pode ser uma entrada do usuário, dependendo do requisito. Certifique-se também de acrescentar que, sleepcaso contrário, qualquer outro comando que gere em torno do Jenkins falhará.

Ismail
fonte
1

Para simplesmente desabilitar a segurança e o assistente de inicialização, use a propriedade JAVA:

-Djenkins.install.runSetupWizard=false

O bom disso é que você pode usá-lo em uma imagem do Docker, para que seu contêiner sempre seja iniciado imediatamente, sem a tela de login:

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

Observe que, conforme mencionado por outros, o Jenkins config.xml está na /var/jenkins_homeimagem, mas o uso sedpara modificá-lo a partir do Dockerfile falha, porque (presumivelmente) o config.xml não existe até o servidor iniciar.

Ruibarbo
fonte
0

Eu tive um problema semelhante e, após a resposta do ArtB,

Descobri que meu usuário não tinha as configurações adequadas. então o que eu fiz:

Nota: modificar manualmente esses arquivos XML é arriscado. Faça por sua conta e risco. Como eu já estava trancada, não tinha muito a perder. AFAIK No pior caso, eu teria excluído o arquivo ~ / .jenkins / config.xml como mencionado anteriormente.

**> 1. ssh na máquina jenkins

  1. cd ~ / .jenkins (acho que algumas instalações o colocam em /var/lib/jenkins/config.xml, mas não no meu caso)
  2. vi config.xml e, sob a tag authorStrategy xml, adicione a seção abaixo (usei meu nome de usuário em vez de "put-your-username")
  3. reinicie o jenkins. no meu caso, como serviço raiz tomcat7 stop; ; serviço tomcat7 start
  4. Tente fazer login novamente. (trabalhou para mim) **

debaixo

adicionar:

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

Agora, você pode ir para direções diferentes. Por exemplo, eu tinha integração com o github oauth, então eu poderia ter tentado substituir a autorizaçãoStrategy por algo como abaixo:

Nota :, funcionou no meu caso porque eu tinha um plugin específico do github oauth que já estava configurado. Portanto, é mais arriscado que a solução anterior.

  <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>
drordk
fonte
0

Edite o arquivo $ JENKINS_HOME / config.xml e altere a configuração de segurança com este:

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

Depois disso, reinicie o Jenkins.

richarbernal
fonte
0

Para quem está usando o macOS, a nova versão apenas pode ser instalada pelo homebrew. portanto, para descansar, esta linha de comando deve estar usando:

brew services restart jenkins-lts
iman kazemayni
fonte