Como Usar Run0 no Linux

Uma fotografia mostrando um close de uma tela de laptop.

Run0 é um novo e inovador programa de escalonamento de privilégios para distribuições Linux baseadas em Systemd. Ele fornece uma alternativa leve e “sem configuração” para aplicativos de escalonamento tradicionais, como sudo e doas. Aqui, mostramos o básico de como usar o Run0 para escalar comandos para o seu sistema Linux.

Índice

  • Como Executar Programas como um Usuário Diferente
  • Como Mudar para o Shell de um Usuário Diferente
  • Como Personalizar a Sessão Atual do Run0
  • Como Agrupar Sessões do Run0
  • Como Executar Comandos em Contêineres Systemd Usando Run0

Antes disso, você pode querer descobrir o que é o Run0 e como ele é diferente do sudo.

Como Executar Programas como um Usuário Diferente

Um dos usos mais comuns para aplicativos de escalonamento de privilégios é executar comandos como o usuário root. Nesse sentido, acessar o usuário root no Run0 requer adicionar run0 na frente do comando que você deseja executar. Por exemplo, o seguinte cria uma nova pasta em um diretório que é acessível apenas pelo root:

run0 mkdir/etc/maketecheasier

Isso trará um prompt de senha CLI ou uma pequena janela GUI pedindo a senha do seu usuário atual.

Uma captura de tela mostrando o prompt de senha para o Run0.

Semelhante ao sudo e doas, o Run0 também pode mudar para um usuário não-root ao executar comandos. Para fazer isso, adicione a flag --user seguida pelo nome do usuário que você deseja executar o comando:

run0 --user=alice /home/alice/alice-program.sh

Forneça a senha para o usuário para o qual você está mudando, e então pressione Enter.

Como Mudar para o Shell de um Usuário Diferente

Outra parte chave de um aplicativo de escalonamento de privilégios é sua capacidade de levar o usuário a um shell root. Isso lhe dá a capacidade de interagir com seu sistema como o usuário root e executar comandos mais complexos a partir da CLI.

No Run0, você pode fazer isso executando o programa sem argumentos adicionais.

Assim como ao executar programas como root, também é possível usar o Run0 com a flag --user para iniciar uma sessão de shell como um usuário específico:

run0 --user=alice

Além disso, o run0 permite que você crie sessões de shell com permissões de grupo temporárias para usuários não-root. Isso é útil se você deseja acessar pastas que estão bloqueadas por um determinado usuário e grupo sem mudar para root.

Por exemplo, o seguinte comando concede ao usuário “alice” acesso temporário ao grupo “www-data”:

run0 --user=alice --group=www-data

Você também pode usar a flag --chdir para forçar uma mudança de diretório ao mudar para uma nova sessão de shell:

run0 --user=alice --chdir=/home/alice/Documents

Bom saber: aprenda mais sobre sua máquina Linux explorando como mudar permissões de arquivos recursivamente em seu sistema de arquivos.

Como Personalizar a Sessão Atual do Run0

O maior ponto de venda do Run0 é que ele não usa setuid (SUID) para lidar com ações de superusuário. Em vez disso, ele se baseia no systemd-run, que cria TTYs pseudo-isolados para executar comandos como root.

Uma consequência dessa abordagem é que o Systemd trata cada shell do Run0 como uma unidade discreta executando sob o gerenciador de serviços. Isso permite que você personalize seu processo de shell root, ao contrário dos aplicativos tradicionais de escalonamento de privilégios.

Para adicionar um rótulo ao seu shell root, use a flag --unit seguida pelo nome que você deseja usar:

run0 --unit=maketecheasier

Você também pode adicionar uma descrição personalizada ao seu shell root adicionando a flag --description:

run0 --unit=maketecheasier --description="olá, mundo!"

Verifique se você aplicou corretamente seus detalhes listando o nome personalizado do seu shell root usando systemctl:

systemctl list-units maketecheasier.service

Um terminal mostrando os detalhes da unidade personalizada do Systemd.

Por padrão, o Run0 muda a cor do fundo do seu shell root para vermelho. Embora isso seja um indicador visual útil, pode ser distrativo se você estiver usando um tema claro em seu sistema.

Para mudar isso, use a flag --background seguida de um valor entre 40-49:

run0 --unit=maketecheasier --background=42

Por fim, você também pode ajustar o “nível de gentileza” do seu shell root. Este é um valor entre -20 e 19 que determina se seu kernel priorizará seu processo em relação a outros.

Para dar ao seu shell root a maior prioridade, use a flag --nice com o valor “-20”:

run0 --nice=-20

Nota: a flag --nice também funciona para comandos individuais do Run0. Por exemplo, você pode usar run0 --nice=-20 vim para executar o Vim com uma prioridade de CPU mais alta.

Como Agrupar Sessões do Run0

Além de poder personalizar cada shell root do Linux, você também pode usar o Run0 para agrupá-los em um slice do Systemd. Este é um constructo especial que permite que sua máquina ajuste a demanda de recursos para processos sem afetar o restante do seu sistema.

Para criar um shell root em um slice diferente, execute a flag --slice seguida pelo nome do slice para o qual você deseja mover:

run0 --slice=maketecheasier

Nota: você pode fornecer um novo nome na flag --slice para criar um novo slice do Systemd.

Confirme que sua nova sessão está sendo executada sob seu novo slice listando os processos dentro dele:

systemctl status maketecheasier.slice

Um terminal mostrando os detalhes do slice personalizado do Systemd.

Você também pode usar a flag --slice-inherit para agrupar seu novo slice junto com o slice de onde o Run0 veio. Isso é útil se você já agrupou seus shells em seus respectivos slices e apenas deseja adicionar um novo shell:

run0 --slice=maketecheasier --slice-inherit

Como Executar Comandos em Contêineres Systemd Usando Run0

Systemd-nspawn é um programa especial que pode criar e gerenciar contêineres Linux leves semelhantes ao Docker. Sendo parte do conjunto do Systemd, você também pode usar o Run0 para executar comandos em seus contêineres nspawn a partir de sua máquina host.

Comece listando os contêineres Systemd-nspawn disponíveis em seu sistema:

machinectl list

Um terminal mostrando uma lista dos contêineres Systemd-nspawn disponíveis.

Execute o seguinte comando para criar uma pasta dentro do diretório raiz do seu contêiner:

run0 run0 --machine=maketecheasier --user=root mkdir/hello-world

Nota: atualmente há um bug no Run0 onde ele falha em elevar privilégios ao executar com a flag --machine. Você pode corrigir isso adicionando um segundo comando run0 para forçar uma elevação de privilégios.

Também é possível mudar para o shell root do seu contêiner usando o Run0:

run0 run0 --machine=maketecheasier --user=root

Confirme que você está agora executando dentro do seu contêiner imprimindo o nome do host da sua sessão de terminal:

echo$HOSTNAME

Um terminal mostrando o processo de mudança do sistema local para o contêiner Systemd-nspawn.

Aprender a usar o Run0 para executar e gerenciar comandos root no Linux é apenas a ponta do iceberg quando se trata de aplicativos de escalonamento de privilégios. Mergulhe fundo no mundo complexo analisando as diferenças entre su, sudo e sudo -s.

Crédito da imagem: Xavier Cee via Unsplash. Todas as alterações e capturas de tela por Ramces Red.