AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 677591
Accepted
Thomas
Thomas
Asked: 2021-11-16 02:24:50 +0800 CST2021-11-16 02:24:50 +0800 CST 2021-11-16 02:24:50 +0800 CST

Como restaurar um arquivo sudoers quebrado sem poder usar o sudo?

  • 772

Estou recebendo o seguinte erro de sudo:

$ sudo ls
sudo: /etc/sudoers is owned by uid 1000, should be 0
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

Claro que não posso chownvoltar rootsem usar sudo. Também não temos uma senha na rootconta.

Sinceramente, não sei como o sistema entrou nessa bagunça, mas agora cabe a mim resolvê-lo.

Normalmente, eu inicializaria no modo de recuperação, mas o sistema é remoto e acessível apenas por uma VPN enquanto inicializado normalmente. Pela mesma razão, inicializar a partir de um live CD ou pendrive também é impraticável.

O sistema é o Ubuntu 16.04 (além do EOL, não pergunte), mas a pergunta e as respostas são provavelmente mais gerais.

linux sudo
  • 3 3 respostas
  • 6101 Views

3 respostas

  • Voted
  1. Best Answer
    Thomas
    2021-11-16T02:24:50+08:002021-11-16T02:24:50+08:00

    O procedimento descrito aqui (que pode ser uma cópia imperfeita desta resposta do Ask Ubuntu ) realizou o milagre. Estou copiando aqui e adicionando mais algumas explicações.

    Procedimento

    1. Abra duas sessões SSH para o servidor de destino.

    2. Na primeira sessão, obtenha o PID do bash executando:

       echo $$
      
    3. Na segunda sessão, inicie o agente de autenticação com:

       pkttyagent --process 29824
      

      Use o pid obtido na etapa 1.

    4. De volta à primeira sessão, execute:

       pkexec chown root:root /etc/sudoers /etc/sudoers.d -R
      
    5. Digite a senha no prompt de senha da segunda sessão.

    Explicação

    Semelhante a sudo, pkexecpermite que um usuário autorizado execute um programa como outro usuário, normalmente root. Ele usa polkit para autenticação; em particular, a org.freedesktop.policykit.execação é usada.

    Esta ação é definida em /usr/share/polkit-1/actions/org.freedesktop.policykit.policy:

      <action id="org.freedesktop.policykit.exec">
        <description>Run programs as another user</description>
        <message>Authentication is required to run a program as another user</message>
        <defaults>
          <allow_any>auth_admin</allow_any>
          <allow_inactive>auth_admin</allow_inactive>
          <allow_active>auth_admin</allow_active>
        </defaults>
      </action>
    

    auth_adminsignifica que um usuário administrativo tem permissão para executar esta ação. Quem se qualifica como usuário administrativo?

    Neste sistema específico (Ubuntu 16.04), que está configurado em /etc/polkit-1/localauthority.conf.d/51-ubuntu-admin.conf:

    [Configuration]
    AdminIdentities=unix-group:sudo;unix-group:admin
    

    Portanto, qualquer usuário do grupo sudoou adminpode usar pkexec.

    Em um sistema mais recente (Arch Linux), está em /usr/share/polkit-1/rules.d/50-default.rules:

    polkit.addAdminRule(function(action, subject) {
        return ["unix-group:wheel"];
    });
    

    Portanto, aqui, todos no wheelgrupo são usuários administrativos.

    Na pkexecpágina de manual, ele afirma que, se nenhum agente de autenticação for encontrado para a sessão atual, pkexecusa seu próprio agente de autenticação textual, que parece ser pkttyagent. De fato, se você executar pkexecsem primeiro iniciar o pkttyagentprocesso, será solicitada uma senha no mesmo shell, mas falhará após inserir a senha:

    polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie
    

    Este parece ser um bug antigo no polkit que não parece estar ganhando força. Mais discussão .

    O truque de usar dois shells é apenas uma solução alternativa para esse problema.

    • 53
  2. Austin Hemmelgarn
    2021-11-17T10:20:59+08:002021-11-17T10:20:59+08:00

    Inicialize em um ambiente ao vivo e corrija-o a partir daí.

    Isso obviamente requer acesso físico ou acesso 'equivalente físico' (se estiver lidando com uma VM ou VPS), mas quase sempre funciona, não se importa com o sistema init que você possui e não se importa se você tem ou não uma senha raiz.

    A abordagem geral é relativamente simples:

    1. Prepare um live CD (ou outra mídia de inicialização) que seja compatível com o sistema operacional que você está usando (na maioria das vezes, isso se resume ao suporte à combinação específica de drivers de armazenamento e sistemas de arquivos necessários para montar o sistema de arquivos raiz).
    2. Inicialize o sistema afetado usando essa mídia de inicialização.
    3. Monte o sistema de arquivos raiz do sistema afetado em algum lugar.
    4. Edite e salve o arquivo.
    5. Reinício.

    Esse tipo de correção funciona porque evita completamente os controles de acesso do sistema afetado, permitindo que você faça praticamente o que quiser. Esse nível de acesso irrestrito ao sistema é parte do motivo pelo qual a segurança física é tão importante.

    Observe que, se estiver adotando essa abordagem, talvez seja necessário fazer algo especial ao reiniciar o sistema 'normal' para que as coisas funcionem corretamente. Em uma instalação padrão do Ubuntu, isso não deve ser necessário, mas se você estiver usando SELinux (ou ainda menos provável, IMA e EVM), pode ser necessário adicionar opções extras de inicialização e, em seguida, executar um comando do sistema inicializado para corrigir os rótulos de segurança .


    Para aqueles que têm uma senha de root, basta usar o modo de usuário único.

    Systemd chama isso de 'modo de resgate', mas todos os outros o chamam de modo de usuário único. Isso essencialmente inicializa em um shell raiz com quase nada além de serviços críticos em execução. É tradicionalmente usado para corrigir exatamente esse tipo de problema.

    A única desvantagem disso é que em qualquer sistema moderno devidamente protegido, o modo de usuário único é protegido por senha e requer a capacidade de efetuar login como usuário root (a razão para isso é que o acesso ao console do sistema não implica inerentemente acesso físico para o hardware do sistema, então alguma autenticação deve ser usada).

    • 6
  3. Dmitry Grigoryev
    2021-11-19T06:45:55+08:002021-11-19T06:45:55+08:00

    Sempre que você planeja experimentar com a sudoconfiguração, é uma boa ideia manter outro terminal raiz aberto: caso você quebre algo, você já terá o direito de corrigi-lo.

    Se não for possível manter um terminal aberto (por exemplo, seus experimentos envolvem uma reinicialização), defina uma senha real para o rootusuário. Então, se sudoestiver quebrado, você pode simplesmente fazer login como root(abra um novo console ou execute su) e conserte seu sistema.

    • -1

relate perguntas

  • Necessidade de algumas chamadas de sistema

  • Execute um único comando como outro usuário; restrições ao sudo

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

  • Permitir que o usuário execute um comando como root

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve