Run0 - Elevação de privilégios com systemd
A partir da versão 256 do systemd está disponível o comando Run0 para elevação de privilégios ou execução de comandos locais ou virtuais com outro perfil de usuário.
[ Hits: 2.093 ]
Por: Kyetoy em 02/09/2024
Run0
para elevação de privilégios ou execução de comandos locais ou virtuais com outro perfil de usuário.
polkit
é necessário para executar Run0
. Sudo(8)
não precisa ser instalado! Run0
faz parte do pacote systemd
e já está instalado por padrão.
run0
pode ser usado para adquirir privilégios elevados ou diferentes, de forma temporária e interativa. Observe que este artigo foi escrito em
um contexto de linha de comando. Quando uma interface gráfica for utilizada, é certo que haverá mudanças que não foram avaliadas neste cenário de laboratório.
Run0
tem um propósito semelhante ao sudo(8)
, mas opera de forma diferente em algumas áreas principais, o que pode torná-lo preferível em casos específicos de uso:
polkit
, isolando assim o prompt de autenticação do terminal (se possível). Recomendamos a leitura do manual polkit para maior entendimento.SetUID/SetGID
é usada para a implementação.sudo
, especialmente em ambientes de SO onde o suporte SetUID/SetGID
não está disponível (por exemplo, definindo a variável NoNewPrivileges=
em
systemd-system.conf(5)
). Qualquer sessão invocada via run0
será executada pela pilha PAM
systemd-run0
. Observe que run0
é implementado como uma invocação multi-chamada alternativa de
systemd-run(1), cujo manual em [2] recomendamos a leitura para maior entendimento.
--setenv=SHELL=…
e atualmente assume como padrão o shell do usuário de origem (ou seja, não o do usuário de destino!) se estiver operando localmente, ou alternativamente /bin/sh
ao operar
com --machine=
.systemd-run
[2], a sessão herdará o ambiente do sistema do gerenciador de serviços. Além disso, as seguintes variáveis de ambiente também
serão definidas: $TERM
, $SUDO_USER
, $SUDO_UID
, $SUDO_GID
, caso elas estejam definidas.--no-ask-password
- Não consulta o usuário por autenticação.--unit=NOME
- Define um nome de unidade para a execução, um nome aleatório é gerado se não fornecido.--property=NOME=VALOR
- Define uma propriedade na unidade de serviço que é criada. Esta opção recebe uma atribuição no mesmo formato que o comando set-property
do systemctl(1)
. Como por exemplo: # systemctl set-property foobar.service CPUWeight=200 MemoryMax=2G IPAccounting=yes
--description="TEXTO"
- Fornece uma descrição para a unidade que é invocada. Se não for definida, o próprio comando é utilizado como uma descrição. A sintaxe é similar à encontrada em [5] systemd.unit(5)
. Uma descrição é um título curto e legível da unidade, apenas para humanos.--slice=
- Faça com que a nova unidade .service
faça parte da fatia especificada, em vez de user.slice
.--slice-inherit
- Faça com que a nova unidade .service
faça parte do slice
no qual o próprio run0
foi invocado. Esta opção pode ser combinada com --slice=
, nesse caso o slice
especificado via --slice=
é colocado dentro do slice
no qual o comando run0
é invocado. Exemplo: considere run0
sendo invocado no slice
foo.slice
, e o argumento --slice=bar
.
A unidade será então colocada sob foo-bar.slice
.--user=
, -u
, --group=
, -g
- Troca para o usuário/grupo definido, em vez de usar root
.--nice=VALOR
- Define um nível de gentileza para a tarefa. Esse é um valor numérico e pode ser dependente da definição de nice
da sua distribuição.--chdir=CAMINHO
, -D
- Executa a sessão invocada com o diretório de trabalho especificado. Se não for especificado, o padrão é o diretório de trabalho atual do cliente se alternar para o usuário root
, ou o diretório
home
do usuário de destino, caso contrário.--setenv=ENV[=VALUE]
- Executa a sessão invocada com a variável de ambiente especificada definida. Este parâmetro pode ser usado mais de uma vez para definir várias variáveis. Quando "="
e VALUE
são omitidos,
o valor da variável com o mesmo nome no ambiente de invocação será usado.--background=[COR]
- Define cores no padrão ANSI para o background do terminal. Uma string vazia desativa essa opção. Para detalhes das cores ANSI consulte [6].
Por exemplo: "--background=44"
para um azul no background.--machine=CONTAINER
- Executa a operação em um container local. Defina o nome do container.--help
, -h
- Exibe uma ajuda básica.--version
- Exibe a versão do programa e encerra.Run0
incluem:
# run0 --user=username /usr/bin/top
top
como o usuário especificado.
# run0 --machine=mycontainer --user=root /bin/bash
root
dentro de um container chamado mycontainer
.
# run0 --slice-inherit --nice=10 /usr/bin/backup
Run0
sem qualquer parâmetro seu usuário comum se torna o root!
[kyetoy@vbox ~]$ run0 ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ==== Authentication is required to manage system services or other units. Authenticating as: kyetoy Password: ==== AUTHENTICATION COMPLETE ==== [root@vbox kyetoy]#
run0 --chdir=/var pwd
/var
e então executa o comando pwd
para exibir o diretório atual.
run0 --nice=19 tarefa-com-baixa-prioridade ...
--nice=19
.
run0 --setenv=SECRET=true bash -c 'export'
SECRET=true
e então executa bash
com o comando export
para exibir as variáveis de ambiente.
run0 --property=ProtectSystem=strict --property=ReadWritePaths=/var/log/write-test bash -c 'echo test > /var/log/write-test'
/var/log/write-test
e, em seguida, grava o texto "test" nesse arquivo.
Run0
é uma ferramenta poderosa e flexível para gerenciamento de privilégios e execução de comandos em ambientes seguros e isolados. Sua integração com o systemd
e o polkit
o torna uma alternativa segura ao sudo
em
muitos cenários, especialmente em sistemas onde a segurança é uma prioridade.
Funtoo Linux: A necrópsia de um Pinguim
Por que os romanos não fizeram computadores?
Configurando servidor MikroTik com Hotspot e páginas de aviso (atraso e bloqueio)
Documentação de IPs usando o TIPP
Configuração Linux (Debian) com mínimo de recursos e interface gráfica super leve
Instalando MRTG + rrdtool no Slackware 12.0
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
KeepOS Não consigo usar o comando sudo. (4)
Erro no "magic number" do ventoy [RESOLVIDO] (1)
Agente OCS não comunica com o servidor (1)
Quando tento conectar meu Keep OS na internet ele pede um "chavei... (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta