O que determina quais comandos do Linux requerem acesso root?

23

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

Brian Dobby
fonte
2
É principalmente uma função de qual arquivo eles tocam e de quais funções eles chamam.
Federico klez Culloca
9
Alguns aplicativos precisam acessar arquivos / diretórios pertencentes à raiz. Então, eles ligam opene recebem "permissão negada". Alguns aplicativos verificam getuide param de funcionar se não forem chamados pela raiz. Alguns são de propriedade física do root e somente o proprietário pode executá-los (consulte chmod). Se você está perguntando se existe alguma marca "precisa de raiz" no cabeçalho do aplicativo - a resposta é não. Não existe tal coisa afaik #
user996142 11/1118
1
ps: vários syscalls (como a ligação à porta conhecida <1024) também podem precisar de acesso root.
User996142 11/1118
O apt-get não requer raiz. Está no diretório / usr / bin, consulte askubuntu.com/a/440791/169736
Braiam
Você pode clarificar o que quer dizer com "exigir" aqui. Você quer dizer que o programa não será executado a menos que você seja root (ou tenha permissões de sudo) ou que precise ser root para fazer seu trabalho corretamente?
jamesqf

Respostas:

15

No Linux, os privilégios de raiz estavam em um ponto dividido em "capacidades", assim você pode obter uma lista completa de privilégios especiais de raiz, olhando para que a documentação: man 7 capabilities.

Para responder à sua pergunta, um comando exigirá a execução como root quando ele precisar de um desses privilégios, e seu executável sem script não possui a capacidade relevante definida nos metadados do arquivo (por exemplo, se um script python exigir essa capacidade, então a capacidade precisaria estar no interpretador python especificado na linha shebang).

Observe que alguns comandos que precisam de acesso root não precisam de algo parecido sudoporque eles têm o bit SUID definido em seu executável. Esse bit faz com que o executável seja executado como proprietário (normalmente root) quando executado por qualquer pessoa que tenha acesso de execução. Um exemplo é o fato de sudoalterar usuários é uma ação privilegiada que ele precisa executar.

EDIT: Observo da sua pergunta que você pode ter a ideia de que 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 devido aos dados fornecidos durante o tempo de execução. Tomemos, por exemplo, chamar vimassim sem argumentos e, em seguida, através de uma série de pressionamentos de tecla e colar, dizendo para gravar algo em um arquivo que não tem permissão para gravar ou talvez executando outro comando que exija privilégios de root. Nada sobre o comando antes da execução poderia indicar que acabaria por exigir acesso root. Isso é algo que só pode ser determinado no momento em que ele tenta fazer algo que exige isso.

De qualquer forma, aqui estão muito poucos exemplos da página de manual referenciada dos privilégios de root:

  • Faça manipulações arbitrárias de UIDs de processo (setuid (2), setreuid (2), setresuid (2), setfsuid (2));
  • Ignore o arquivo, leia, grave e execute verificações de permissão. (DAC é uma abreviação de "controle de acesso discricionário".)
  • Ignore as verificações de permissão para enviar sinais (consulte kill (2)). Isso inclui o uso da operação ioctl (2) KDSIGACCEPT.
  • Execute várias operações relacionadas à rede:
    • configuração de interface;
    • administração de firewall IP, mascaramento e contabilidade;
    • modificar tabelas de roteamento;
  • Ligue um soquete às portas privilegiadas do domínio da Internet (números de porta menores que 1024).
  • Carregar e descarregar módulos do kernel (consulte init_module (2) e delete_module (2));
  • Acerte o relógio do sistema (settimeofday (2), stime (2), adjtimex (2)); ajuste o relógio em tempo real (hardware).
  • Execute várias 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 chroot (2).
  • Aumente o valor agradável do processo (nice (2), setpriority (2)) e altere o valor agradável para processos arbitrários;
JoL
fonte
32

É principalmente uma questão do que a ferramenta ou programa faz . Tendo em mente que um não-superusuário pode apenas tocar em arquivos aos quais possui ou tem acesso, qualquer ferramenta que precise ser capaz de entender tudo exigirá acesso do superusuário para fazer o que é necessário. Uma amostra rápida de itens que podem exigir acesso de superusuário inclui, entre outros:

  • Abrindo um soquete TCP de escuta em uma porta abaixo de 1024
  • Alterando as configurações do sistema (por exemplo, qualquer item /etc)
  • Adicionando novas bibliotecas acessíveis globalmente ( /libe /usr/lib) ou binários ( /bin, /usr/bin)
  • Tocar em arquivos não pertencentes ao usuário que está tocando, que não possuem um modo suficientemente permissivo
  • Alterando a propriedade de outros arquivos de usuários
  • Escalando as prioridades do processo (por exemplo renice)
  • Iniciando ou Parando a maioria dos Serviços
  • Configuração do kernel (por exemplo, ajuste de swappiness)
  • Ajustando cotas do sistema de arquivos
  • Gravando em discos "completos" (a maioria dos sistemas de arquivos reserva algum espaço para o usuário root)
  • Executando ações como outros usuários
DopeGhoti
fonte
4
"Alterando prioridades do processo" Os usuários não-root podem alterar a gentileza, para ser mais agradável. A única coisa que eles não podem fazer é ser menos gentil.
Braiam
1
Sei que esta lista não está completa, mas sinto que uma tarefa muito importante que apenas os superusuários podem fazer é personificar - ou simplesmente fazer login como - outros usuários.
Phihag 12/05/19
Eu ajustei o ponto principal sobre as prioridades do processo e adicionei "Executando ações como outros usuários". Esperemos que com tempo e comentários suficientes, esta lista se torne mais abrangente.
DopeGhoti
0

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

Aldridge
fonte
3
Não pretendo parecer grosseiro, e entendo que o inglês pode não ser o seu primeiro idioma, mas não entendo essa resposta, como o que está tentando dizer. "acordo" significa "acordo" ou "conformidade"; Não consigo ver como ele pode ser usado com a "identidade do usuário". O que você quer dizer com "ordem para dividir as permissões"? "dividir" significa "separar". De quem "ordem"? Como os arquivos são "privilegiados" quando não são algo que possa agir para usar qualquer privilégio? Eu acho que posso entender "comandos não devem ser divididos" no contexto desta pergunta, mas é isso. Como é, parece imperceptível.
11128 JoL
@JoL Eu acho que "a ordem" é uma tradução incorreta e deve ser "o comando", o que permite uma análise diferente dessa frase. Um tanto desajeitado para usar o que há nesta resposta o máximo possível: "Acho que está de acordo com a maneira como a identidade do usuário é usada para verificar as permissões de que as permissões não são divididas de acordo com o comando. Privilégios são sobre arquivos e usuários, não haverá divisão para comandos ". Isso ainda não está muito claro, mas faz um pouco mais de sentido para mim do que para você. Espero que o meu comentário ajuda alguém compreender plenamente esta resposta e editá-lo em forma
hvd