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 / 792442
Accepted
lei hu
lei hu
Asked: 2025-03-14 16:34:51 +0800 CST2025-03-14 16:34:51 +0800 CST 2025-03-14 16:34:51 +0800 CST

Como configurar o sistema para que usuários em um grupo de usuários específico possam executar programas que exigem o recurso cap_sys_admin?

  • 772

Meu objetivo principal é permitir que usuários em um grupo específico executem programas que exigem a capacidade cap_sys_admin (por exemplo, perf) após SSH-ing no Ubuntu 22.04. Uma solução simples é modificar perf_event_paranoid, mas essa mudança é global e não desejada. Eu verifiquei o processo bash gerado por sshd — getpcaps gera =, indicando nenhuma capacidade, então perf não pode ser executado sem sudo.

Aprendi que o sshd usa PAM para gerenciamento de privilégios. Modifiquei sshd_config para definir UsePAM como sim (incerto se necessário para autenticação de chave SSH) e adicionei cap_sys_admin @mygroup antes de none * em /etc/security/capability.conf. Após o relogin, o processo do shell ganhou cap_sys_admin=i, mas essa capacidade está apenas no conjunto herdável, impedindo a execução direta do perf. A documentação do capacity.conf confirma que afeta apenas o conjunto herdável via pam_cap.so. Agora estou preso em mais ajustes de configuração para atingir meu objetivo.

linux
  • 1 1 respostas
  • 32 Views

1 respostas

  • Voted
  1. Best Answer
    Marcus Müller
    2025-03-14T18:17:36+08:002025-03-14T18:17:36+08:00

    Você realmente não quer dar a um usuário regular CAP_SYS_ADMIN. Isso os torna root, efetivamente¹. Adicionar o usuário a /etc/sudoers para permitir que eles executem perf record(nenhum argumento permitido) seria mais seguro.

    No entanto, você está executando o Ubuntu 22.04, então sua distribuição Linux oferece kernels relativamente modernos (diz apt-get). Isso significa que com Kernel > 5.9, você pode dar um processo CAP_PERFMON.

    Então, a próxima coisa: Processos têm capacidades que eles obtêm por meio de invocação; os próprios usuários não (você pode definir sinalizadores em um arquivo executável que concede capacidades com base no usuário, no entanto). Então, você definiria as sinalizações apropriadas no perfexecutável para conceder a ele as capacidades certas. A ideia de capacidades é que você não deixe um usuário acidentalmente fazer coisas ruins, mas que você as use pelo menor tempo possível e descarte capacidades assim que não precisar mais delas. Então, iniciar uma sessão SSH completa com o processo de invocação permitindo uma capacidade herdada parece antitético!

    https://docs.kernel.org/admin-guide/perf-security.html detalha como você lidaria com isso para um único executável ( perf): Você adiciona um grupo, torna a propriedade do grupo do executável aquele grupo que se torna (além do root) a única parte capaz de executar o executável, e você adiciona o usuário que deseja executar aquele executável com a parte de capacidade daquele grupo. Então, você

    chmod o-wx $(type -P perf)
    setcap "cap_perfmon,cap_sys_ptrace,cap_syslog=ep" $(type -P perf)
    

    como root.

    Note que a maioria dos executáveis ​​pode ser simplesmente copiada e ainda funcionar. Você pode deixar o "original" perf"incapaz", e ter sua própria cópia, executável somente pelo grupo correto, de perfalgum outro lugar. Certifique-se de que ainda somente o root pode escrever naquele executável!

    Dessa forma, você pode ter uma versão perfque você pode usar para perf record, perf state perf top, e uma versão que qualquer um pode usar para perf report.


    ¹ Com CAP_SYS_ADMIN, eles podem montar sistemas de arquivos, permitindo assim que eles executem um shell (ou qualquer outro programa) com suidbit definido, para que eles tenham acesso completo como root. Há muitas outras coisas que você pode fazer para se tornar root, ou não, porque essa capacidade permite que você faça a maioria das coisas que você poderia fazer como root, de qualquer maneira.

    • 2

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

    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