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 / 778022
Accepted
rando
rando
Asked: 2024-06-09 20:54:19 +0800 CST2024-06-09 20:54:19 +0800 CST 2024-06-09 20:54:19 +0800 CST

Qual vantagem de segurança os privilégios de execução têm?

  • 772

Digamos que algum administrador de sistema não tenha problemas com a leitura dos arquivos em/sbin, mas não deseja que eles os executem. Considere por exemplo

/sbin/init
Um usuário rebelde usou
ld.so /sbin/poweroff
em vez de. Descobrindo isso, o sysadmin bloqueia a execução do acesso a
ld.so
o que não é problema porque o usuário pode simplesmente copiar /bin/ld.so para seu diretório inicial e usar
chmod +x ./myld.so
./myld.so /sbin/init
O administrador do sistema não pode negar acesso de leitura a /bin/ld.so porque é um link simbólico para /lib/ld-linux-architecture.so, e fazer isso tornaria o sistema basicamente inútil para o usuário rebelde.

Qual é o objetivo do privilégio de execução então?

security
  • 3 3 respostas
  • 44 Views

3 respostas

  • Voted
  1. Marcus Müller
    2024-06-09T21:36:13+08:002024-06-09T21:36:13+08:00

    Digamos que algum administrador de sistema não tenha problemas com a leitura dos arquivos em/sbin, mas não deseja que eles os executem. Considere por exemplo

    Então esse administrador está perdido. Qualquer usuário pode

    cat /sbin/program > ~/program # only needs read privileges
    chmod o+x ~/program
    ~/program
    

    Então, isso não faz sentido. Duas exceções:

    1. o original pode ter o bit suid definido.
    2. o original pode ter xattrs de segurança que o restringem ainda mais (SELinux, Apparmor, outros LSMs…)

    A segunda coisa não será relevante. Essa é uma restrição adicional em relação à execução de uma cópia do executável como usuário.

    A primeira coisa: sim, isso é um problema. Mas a solução é quase sem exceção afastar-se dos binários setuid, em direção a mecanismos onde um processo não ganha privilégios que o usuário inicial não possui. (Você pode considerar regras sudo complexas sendo preferidas como uma medida provisória questionável, o que é pelo menos vantajoso porque você pode pelo menos ajustar quem pode executar o que como usuário diferente por meio de /etc/sudoers. É muito sujeito a erros, imho.)

    Tais mecanismos são bastante difundidos em sistemas operacionais de "interface humana" não-GNU/BSD (ou seja, Android, Windows, MacOS, iOS, MBOS, para citar os poucos que me vêm à mente): Você nunca inicia uma "modificação do sistema" comando como um usuário sem privilégios que de repente obtém acesso root, porque isso é apenas um convite para encontrar bugs que permitem que você faça aquele programa fazer o que você quiser (uma lista com curadoria de programas *nix que você pode fazer executar o que quiser executar ).
    Por exemplo, uma coisa popular é que em servidores de computação científica, os clientes de backup recebem suid – para que um usuário normal possa executar um backup de todo o seu ambiente, para um serviço de armazenamento que não pode acessar regularmente. Ótima ideia, além de poder especificar o compressor na linha de comando, que então roda como root. Use um script que gere um servidor telnet e passe da entrada para a saída descompactada; pronto, aí está a sua porta dos fundos.

    Em vez disso, há um deamon de gerenciamento de sistema, gerado pelo processo init (~equivalente), para o qual o usuário sem privilégios envia solicitações muito bem definidas, que verifica internamente os privilegiados (normalmente, usando um mecanismo centralizado para isso) e, em seguida, faz o operação pré-configurada.

    Isso é perfeitamente ilustrado pelo seu exemplo /sbin/poweroff. Para distribuições Linux hoje em dia, desligar é um processo complicado – você precisa verificar se o usuário solicitante tem o direito de fazer isso, você precisa verificar se ninguém mais está logado, você precisa desmontar todas as coisas que o usuário logado podem ter se montado, incluindo sistemas de arquivos de rede, interrompido seus daemons de usuário (do emacs -d para o cliente Steam!), salvo seu trabalho, fechado seus programas aplicativos, desconectado deles, iniciado a sequência de desligamento, derrubado coisas no ordem correta (não deve desligar a rede enquanto a montagem NFS do sistema ainda está sincronizando dados!)…
    Eu não vi um sistema Linux multiusuário onde /sbin/poweroff fosse apenas um script de desligamento suid em talvez uma década. Tenho certeza de que os BSDs têm o mesmo problema e o tratam de maneira semelhante. Então, se esse problema existe, é porque o administrador deixou o sistema em meados da década de 1990. É hora de fazer algo sobre isso!

    A área de usuários do desktop Linux há muito mudou nessa direção. Seu desktop Linux não chama mountmais um Suid para montar o pendrive que você acabou de conectar e deseja abrir como usuário sem privilégios, ele solicita acesso de um daemon de gerenciamento de disco. Funciona lindamente (e, tendo estado lá, muuuito mais confiável, melhor e menos sujeito a erros que o Linux do final dos anos 90/início dos anos 2000).

    Então, voltando à sua pergunta:

    Qual é o objetivo do privilégio de execução então?

    Ele permite restringir quais arquivos são imediatamente executáveis. Como dito, isso faz diferença na presença de SUID e outros mecanismos de segurança vinculados a arquivos; faz diferença se você pode usar algo como intérprete para um formato de arquivo, e diz ao seu shell que quando você digita "nano", você deseja que /usr/bin/nano seja executado, e não o arquivo de texto chamado " nano" que acabou em algum outro lugar no seu caminho.

    • 3
  2. Best Answer
    Stephen Kitt
    2024-06-09T21:41:35+08:002024-06-09T21:41:35+08:00

    O bit de permissão de execução em arquivos não é realmente um recurso de segurança, trata-se principalmente de distinguir arquivos que são executáveis ​​​​de arquivos que não são.

    A segurança da execução é controlada por outros recursos do sistema. Por exemplo, os administradores que não desejam permitir que os usuários executem binários arbitrários podem garantir que qualquer diretório no qual os usuários possam gravar esteja em um noexecponto de montagem. O escalonamento de privilégios, como binários setuid, depende de propriedades que são perdidas quando os binários são copiados: o bit setuid, entradas em arquivos de configuração como sudoersou pkexecperfis, etc.

    • 1
  3. telcoM
    2024-06-10T00:18:18+08:002024-06-10T00:18:18+08:00

    Qual é o objetivo do privilégio de execução então?

    Principalmente porque evita a execução inadvertida de arquivos que na verdade não contêm código executável ou scripts. Arquivos como README.txt.

    Sua observação de que negar a permissão de execução de um arquivo de programa e permitir que os usuários o leiam é inútil é absolutamente correta: qualquer coisa que o usuário possa ler, ele pode copiar; e a nova cópia será deles para definir as permissões conforme acharem adequado.

    Mas em algumas situações, você pode desejar conceder o privilégio de execução sem o privilégio de leitura correspondente. Um exemplo podem ser programas que possuem privilégios setuid/setgid atribuídos a eles. Alguns sistemas Unix proprietários (e alguns guias de proteção) podem definir as permissões de, por exemplo , /bin/passwdpara ---s--x--x, proprietário root, para desencorajar os usuários de tentar encontrar pontos fracos no binário setuid usando um desmontador ou outras ferramentas de depuração nele.

    Em sistemas operacionais de código aberto como Linux e BSD, esse microgerenciamento de permissões pode ser considerado desnecessário, uma vez que o código-fonte desses programas setuid/setgid está disponível gratuitamente para qualquer pessoa.

    Mesmo assim, o kernel e os drivers ainda determinam quais operações exigem mais privilégios do que os usuários normais. Ter acesso a uma cópia executável /sbin/ifconfigcomo um usuário normal pode permitir que você visualize as configurações de rede do sistema, mas se você tentar alterá -las, tudo o que conseguirá será uma mensagem de erro "Permissão negada".

    E se você tentar copiar um binário setuid ou setgid, descobrirá que muitos drivers de sistema de arquivos removerão automaticamente esses bits de permissão ao gravar em um arquivo, portanto, esses bits precisarão ser explicitamente colocados de volta após a conclusão da gravação. mas sem privilégios de root (ou equivalentes), você absolutamente não pode produzir um novo arquivo que pertenceria a alguém que não seja sua própria conta de usuário , portanto, mesmo que você pudesse preservar ou adicionar novamente o bit setuid, a cópia não seria setuid root, mas setuid yourself. Isso não lhe daria nenhum privilégio que você ainda não tivesse, e tê-lo por perto poderia permitir que outros usuários se passassem por você .

    O mesmo se aplica ao bit setgid: se você tentar adicionar um bit setgid a um arquivo pertencente a um grupo do qual sua conta de usuário ainda não é membro, a solicitação para adicionar um bit setgid será ignorada silenciosamente.

    Ver man 2 chmod:

    Se o processo de chamada não for privilegiado (Linux: não possui a capacidade CAP_FSETID) e o grupo do arquivo não corresponder ao ID de grupo efetivo do processo ou a um de seus IDs de grupo suplementares, o bit S_ISGID será desativado, mas isso não fará com que um erro seja retornado.

    • 1

relate perguntas

  • Colocando IP externo em uma variável - falha na operação grep [duplicado]

  • Qual é a promessa do OpenBSD em resumo?

  • Fortalecendo a segurança dos servidores rhel6/7 [fechado]

  • É possível manter um servidor como refém se alguém tiver acesso root? [fechado]

  • Existe um daemon syslog que implementa RFC 5848 "Signed Syslog Messages"?

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