O que determina quais comandos do Linux requerem acesso root?

22

O que determina quais comandos do Linux exigem acesso root? Entendo as razões pelas quais é desejável que, digamos, apt-get exija root privilege; mas o que distingue esses comandos do resto? É simplesmente uma questão de propriedade e permissões de execução do executável?

    
por Brian Dobby 11.05.2018 / 16:23

3 respostas

14

No linux, os privilégios do root estavam em um ponto divididos em "capacidades", então você pode obter uma lista completa dos privilégios especiais do root olhando para essa documentação: man 7 capabilities .

Para responder a sua pergunta, um comando exigirá a execução como root quando precisar de um desses privilégios, e seu executável sem script não terá o recurso relevante definido em seus metadados de arquivo (por exemplo, se um script python exigir esse recurso, então o recurso precisaria estar no interpretador python especificado na linha shebang).

Observe que alguns comandos que precisam de acesso root não precisam de algo como sudo , porque eles têm o bit SUID definido em seu executável. Esse bit faz com que o executável seja executado como o proprietário (geralmente root) quando executado por qualquer pessoa que tenha acesso de execução. Um exemplo é sudo em si, já que mudar de usuário é uma ação privilegiada que ele precisa fazer.

EDIT: Anote a sua pergunta que você pode ter a idéia de que você pode determinar se um comando precisará de acesso root antes de executá-lo. Esse não é o caso. Às vezes, um programa pode exigir privilégios de root e outras não, e isso pode ser uma decisão tomada pelo programa, porque os dados são fornecidos durante o tempo de execução. Tomemos por exemplo, chamando vim , assim como sem argumentos, e depois através de uma série de pressionamentos de tecla e colando, dizendo para escrever algo em um arquivo que ele não tem permissão para escrever, ou talvez executar outro comando que requererá raiz privilégios. Nada sobre o comando antes de executar poderia indicar que ele eventualmente necessitaria de acesso root. Isso é algo que só pode ser determinado no momento em que ele tenta fazer algo que exija isso.

De qualquer forma, aqui estão alguns exemplos da manpage referenciada dos privilégios do root:

  • Faça manipulações arbitrárias de UIDs de processo (setuid (2), setreuid (2), setresuid (2), setfsuid (2));
  • Ignorar leitura de arquivo, gravar e executar verificações de permissão. (DAC é uma abreviação de "controle de acesso discricionário").
  • Ignorar permissão verifica o envio de sinais (veja kill (2)). Isso inclui o uso da operação ioctl (2) KDSIGACCEPT.
  • Realize várias operações relacionadas à rede:
    • configuração de interface;
    • administração de firewall, mascaramento e contabilidade de IP;
    • modificar tabelas de roteamento;
  • Vincule um soquete a portas com privilégios de domínio da Internet (números de portas inferiores a 1024).
  • Carregue e descarregue módulos do kernel (consulte init_module (2) e delete_module (2));
  • Ajusta o relógio do sistema (settimeofday (2), stime (2), adjtimex (2)); defina o relógio em tempo real (hardware).
  • Execute um intervalo de operações de administração do sistema, incluindo: quotactl (2), mount (2), umount (2), swapon (2), swapoff (2), sethostname (2) e setdomainname (2);
  • Use reboot (2) e kexec_load (2).
  • Use o chroot (2).
  • Aumente o bom valor do processo (nice (2), setpriority (2)) e altere o valor interessante para processos arbitrários;
por 11.05.2018 / 19:54
32

É principalmente uma questão de o que a ferramenta ou programa faz . Tendo em mente que um não-superusuário pode apenas tocar em arquivos que possui ou tem acesso, qualquer ferramenta que precise ser capaz de colocar os dedos em tudo exigirá acesso de superusuário para fazer a coisa o que faz. Uma amostra rápida de coisas que podem exigir acesso de superusuário inclui, mas não se limita a:

  • Abrindo um soquete TCP de escuta em uma porta abaixo de 1024
  • Alterando as configurações do sistema (por exemplo, qualquer coisa em /etc )
  • Adicionando novas bibliotecas acessíveis globalmente ( /lib e /usr/lib ) ou binários ( /bin , /usr/bin )
  • Tocando em qualquer arquivo que não seja do usuário que está tocando e que não tenha um modo suficientemente permissivo
  • Alterando a propriedade dos arquivos de outros usuários
  • Esclarecendo as prioridades do processo (por exemplo, renice )
  • Iniciando ou interrompendo a maioria dos serviços
  • Configuração do kernel (por exemplo, ajustando o swappiness)
  • Ajustando cotas do sistema de arquivos
  • Escrevendo para discos "completos" (a maioria dos sistemas de arquivos reserva algum espaço para o usuário root)
  • Executando ações como outros usuários
por 11.05.2018 / 16:40
1

Acho que está de acordo com a identidade do usuário para verificar as permissões, não de acordo com o pedido para dividir as permissões. Arquivos e usuários são privilegiados e os comandos não devem ser divididos.

    
por 12.05.2018 / 04:30