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.645 ]
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.
Por que os romanos não fizeram computadores?
Funtoo Linux: A necrópsia de um Pinguim
Nagios - Instalação e configuração
MSN-PROXY no CentOS 5.5 64 bits
Debian/APT- Alguns cuidados com os repósitorios
Como colocar um programa para inicializar no boot
Instalação do modem Netodragon no Conectiva 10
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Como colorir os logs do terminal com ccze
Instalação Microsoft Edge no Linux Mint 22
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
Jogando com Proton no LInux (0)
Ingress NGINX Controller CVSS base score of 9.8 (4)
Impossível corrigir problemas, você manteve (hold) pacotes quebrados. (2)