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 / 454686
Accepted
ng.newbie
ng.newbie
Asked: 2018-07-12 04:24:00 +0800 CST2018-07-12 04:24:00 +0800 CST 2018-07-12 04:24:00 +0800 CST

Como fakeroot não é uma violação de segurança no Linux?

  • 772

Depois de ler algumas respostas bem legais desta pergunta , ainda estou confuso sobre por que você gostaria de fingir que é root sem obter nenhum dos benefícios de realmente ser root.

Até agora, o que posso perceber é que fakeroot é usado para dar propriedade a um arquivo que precisa ser root quando é descompactado/tar'ed. Minha pergunta é por que você não pode fazer isso com chown?

Uma discussão do Google Groups aqui aponta que você precisa do fakeroot para compilar um kernel Debian (se você quiser fazer isso de um usuário sem privilégios). Meu comentário é que, a razão pela qual você precisa ser root para compilar é provavelmente porque as permissões de leitura não foram definidas para outros usuários. Se sim, não é uma violação de segurança que o fakeroot permita a compilação (o que significa que o gcc agora pode ler um arquivo que era para o root)?

Esta resposta aqui descreve que as chamadas reais do sistema são feitas com uid/gid real do usuário , então, novamente, onde o fakeroot ajuda?

Como o fakeroot interrompe os escalonamentos de privilégios indesejados no Linux? Se o fakeroot pode enganar o tar para criar um arquivo que pertence ao root, por que não fazer algo semelhante com o SUID?

Pelo que eu recolhi, fakeroot é útil apenas quando você deseja alterar o proprietário de qualquer arquivo de pacote que você criou para root. Mas você pode fazer isso com chown, então onde estou faltando no meu entendimento de como esse componente deve ser usado?

linux chown
  • 3 3 respostas
  • 7573 Views

3 respostas

  • Voted
  1. Best Answer
    Stephen Kitt
    2018-07-12T04:50:33+08:002018-07-12T04:50:33+08:00

    Até agora, o que posso perceber é que fakeroot é usado para dar propriedade a um arquivo que precisa ser root quando é descompactado/tar'ed. Minha pergunta é por que você não pode fazer isso com chown?

    Porque você não pode fazer isso com chown, pelo menos não como um usuário não root. (E se você estiver executando como root, você não precisa fakerootde .) Esse é o ponto principal de fakeroot: permitir que programas que esperam ser executados como root sejam executados como um usuário normal, enquanto finge que as operações que requerem root são bem-sucedidas.

    Isso é usado normalmente ao compilar um pacote, para que o processo de instalação do pacote que está sendo instalado possa prosseguir sem erros (mesmo que execute chown root:root, ou install -o root, etc.). fakerootlembra a propriedade falsa que fingiu dar aos arquivos, então as operações subsequentes que analisam a propriedade veem isso em vez da real; isso permite que execuções subsequentes tar, por exemplo, armazenem arquivos como pertencentes ao root.

    Como o fakeroot interrompe os escalonamentos de privilégios indesejados no Linux? Se o fakeroot pode enganar o tar para criar um arquivo que pertence ao root, por que não fazer algo semelhante com o SUID?

    fakerootnão engana tarpara fazer nada, ele preserva as alterações que a compilação deseja fazer sem permitir que essas alterações entrem em vigor no sistema que hospeda a compilação. Você não precisa fakerootproduzir um tarball contendo um arquivo de propriedade de root e suid; se você tiver um binário evilbinary, executando tar cf evil.tar --mode=4755 --owner=root --group=root evilbinary, como um usuário comum, criará um tarball contendo evilbinary, pertencente ao root e suid. No entanto, você não poderá extrair esse tarball e preservar essas permissões a menos que o faça como root: não há escalação de privilégios aqui. fakerooté um privilégio de-ferramenta de escalação: permite que você execute uma compilação como um usuário comum, preservando os efeitos que a compilação teria se tivesse sido executada como root, permitindo que esses efeitos fossem reproduzidos posteriormente. Aplicar os efeitos “de verdade” sempre requer privilégios de root; fakerootnão fornece nenhum método de adquiri-los.

    Para entender o uso de fakerootmais detalhadamente, considere que uma compilação de distribuição típica envolve as seguintes operações (entre muitas outras):

    • instalar arquivos, de propriedade do root
    • ...
    • arquivar esses arquivos, ainda de propriedade do root, para que, quando forem extraídos, sejam de propriedade do root

    A primeira parte obviamente falha se você não for root. No entanto, ao executar sob fakeroot, como um usuário normal, o processo se torna

    • instalar arquivos, de propriedade do root - isso falha, mas fakerootfinge que foi bem-sucedido e lembra a propriedade alterada
    • ...
    • arquivar esses arquivos, ainda de propriedade do root - quando tar(ou qualquer arquivador que estiver sendo usado) pergunta ao sistema qual é a propriedade do arquivo, fakerootaltera a resposta para corresponder à propriedade registrada anteriormente

    Assim, você pode executar uma compilação de pacote sem ser root, enquanto obtém os mesmos resultados que obteria se estivesse realmente executando como root. Usar fakerooté mais seguro: o sistema ainda não pode fazer nada que seu usuário não possa fazer, então um processo de instalação não autorizado não pode danificar seu sistema (além de tocar em seus arquivos).

    No Debian, as ferramentas de compilação foram aprimoradas para não exigir mais isso, e você pode compilar pacotes semfakeroot . Isso é suportado dpkgdiretamente com a Rules-Requires-Rootdiretiva (consulte Recursos rootless-builds.txt).

    Para entender o propósito do fakeroot, e os aspectos de segurança da execução como root ou não, pode ser útil considerar o propósito do empacotamento. Ao instalar um software da fonte, para uso em todo o sistema, você procede da seguinte forma:

    1. construir o software (o que pode ser feito sem privilégios)
    2. instale o software (que precisa ser feito como root, ou pelo menos como um usuário com permissão para gravar nos locais apropriados do sistema)

    Ao empacotar um software, você está atrasando a segunda parte; mas para fazer isso com sucesso, você ainda precisa “instalar” o software no pacote e não no sistema. Então, quando você empacota software, o processo se torna:

    1. construir o software (sem privilégios especiais)
    2. fingir instalar o software (novamente sem privilégios especiais)
    3. capturar a instalação do software como um pacote (idem)
    4. disponibilizar o pacote (idem)

    Agora, um usuário conclui o processo instalando o pacote, que precisa ser feito como root (ou, novamente, um usuário com os privilégios apropriados para gravar nos locais apropriados). É aqui que o processo privilegiado atrasado é realizado e é a única parte do processo que precisa de privilégios especiais.

    fakerootajuda nas etapas 2 e 3 acima, permitindo-nos executar processos de instalação de software e capturar seu comportamento, sem executar como root.

    • 37
  2. ctrl-alt-delor
    2018-07-12T04:49:54+08:002018-07-12T04:49:54+08:00

    NÃO. O root falso permite que você execute ferramentas de manipulação de permissão e relatórios, ele relatará de forma consistente. No entanto, ele não concederá essas permissões. Vai parecer que você os tem (falsos). Não vai mudar nada fora do ambiente.

    É útil, se você quiser criar uma estrutura de diretórios, que contenha propriedade e permissões, que não possam ser definidas pelo seu usuário, então você irá tar, zip ou outro pacote.

    Ele realmente não eleva as permissões, é falso. Ele não permite que você faça nada (excluir, escrever, ler) que você não poderia fazer de outra forma. Você poderia produzir o pacote (em teoria) sem ele. Você pode obter um relatório falso ( ls) sem ele.

    Não é uma falha de segurança, pois não permite acesso, ou qualquer coisa que você não possa fazer sem ela. Ele é executado sem privilégios. Tudo o que ela faz é interceptar chamadas para chown, chmod, etc. Isso as torna uma não operação, exceto pelo fato de registrar o que teria acontecido. Ele também intercepta chamadas para statetc. para que reporte permissões e propriedade, de seu próprio banco de dados interno, como se os outros comandos tivessem sido executados. Isso é útil, porque se você compactar o diretório, ele terá as permissões falsas. Se você descompactar, como root, as permissões se tornarão reais.

    Quaisquer arquivos que não sejam legíveis/graváveis ​​antes permanecerão não legíveis/graváveis. Quaisquer arquivos especiais (por exemplo, dispositivos) criados não terão poderes especiais. Qualquer set-uid (para outro usuário), os arquivos não serão set-uid. Qualquer outro escalonamento de privilégios não funcionará.

    É um tipo de máquina virtual: Uma máquina virtual, em geral, pode simular qualquer ambiente/SO, mas não pode fazer nada ao host, que qualquer outro aplicativo não poderia fazer. Dentro da máquina virtual, você pode parecer fazer qualquer coisa. Você pode reinventar o sistema de segurança para ser igual ou diferente, porém tudo isso existirá no host, como recursos de propriedade do usuário/grupo do processo que executa o ambiente virtual.

    • 7
  3. FeRD
    2018-07-13T00:42:31+08:002018-07-13T00:42:31+08:00

    Já existem duas respostas boas e muito detalhadas aqui, mas vou apenas apontar que o parágrafo introdutório da página de manual 1 original na verdade explica de forma bastante clara e concisa:fakeroot

    fakeroot executa um comando em um ambiente em que parece ter privilégios de root para manipulação de arquivos. Isso é útil para permitir que os usuários criem arquivos (tar, ar, .deb etc.) com arquivos neles com permissões/propriedade de root. Sem fakeroot , seria necessário ter privilégios de root para criar os arquivos constituintes dos arquivos com as permissões e propriedade corretas e, em seguida, empacotá-los, ou teria que construir os arquivos diretamente, sem usar o arquivador.

    Fakeroot permite que um usuário não root crie arquivos contendo arquivos de propriedade root, o que é uma parte crítica da geração e distribuição de pacotes de software binários no Linux. Sem fakeroot, os arquivos de pacote teriam que ser gerados durante a execução como root real, para que eles contenham a propriedade e as permissões corretas do arquivo. Isso seria um risco de segurança. Construir e empacotar software potencialmente não confiável é uma grande exposição se feito com privilégios de root. Graças a fakeroot, um usuário sem privilégios com arquivos sem privilégios ainda pode gerar arquivos contendo arquivos com propriedade root. 2

    Mas não é um risco de segurança, porque nada no arquivo é realmente de propriedade do root até que os arquivos sejam EXTRAÍDOS . E mesmo assim, os arquivos só serão extraídos com suas permissões de root intactas se for feito por um usuário privilegiado. Essa etapa - onde um fakerootarquivo assistido contendo arquivos "raiz" é extraído por um usuário privilegiado - é onde a raiz "falsa" finalmente se torna real. Até esse ponto, nenhum privilégio de root real é obtido ou ignorado.

    Notas

    1. O Fakeroot gerou alguns concorrentes/imitadores que se disfarçarão como fakerootse estivessem instalados, incluindo fakeroot-nge pseudo. Mas IMHO nem a página de manual do "imitador" é quase tão clara sobre ir direto ao ponto nesta questão. Fique com o original, um e único fakerootOG
    2. Outras distribuições/sistemas de pacotes superam isso simplesmente não usando a propriedade do root em seus arquivos de pacotes. No Fedora, por exemplo, o software pode ser compilado, instalado e empacotado por um usuário sem privilégios sem exigir fakeroot. Tudo é feito dentro do $HOME/rpmbuild/espaço do usuário e etapas normalmente privilegiadas como make installser redirecionado (através de mecanismos como --prefixe DESTDIR) para uma $HOME/rpmbuild/BUILDROOT/hierarquia que pode ser considerada uma espécie de espaço "fakechroot" (sem realmente usar fakechroot).

      Mas mesmo durante make install, tudo é executado como e de propriedade do usuário sem privilégios. A propriedade e as permissões do arquivo extraído serão definidas como root,roote 0644(ou 0755para executáveis) por padrão, a menos que sejam substituídas no arquivo de definição do pacote ( .spec), caso em que serão armazenados como metadados no pacote final. Como nenhuma permissão ou propriedade é realmente aplicada até o processo de instalação (privilegiado) do pacote rpm, nem root nem fakerootsão necessários durante o empacotamento. Mas fakerooté realmente apenas um caminho diferente para esse mesmo resultado.

    • 4

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • 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

Sidebar

Stats

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

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

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 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

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 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
    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
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +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
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +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