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: 3.169 ]
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 sudoem
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
Debmirror: Criando um repositório Debian na rede local
LAMP no Funtoo Linux em 15 minutos
Instalando um servidor LAMP no Linux Ubuntu 7.10
Instalação da Broadcom 1390 no Debian Etch
Controle de banda sem mistérios para servidores
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Ativando e usando "zoom" no ambiente Cinnamon
Vídeo Nostálgico de Instalação do Conectiva Linux 9
Como realizar um ataque de força bruta para desobrir senhas?
Problema com placa de video, mudança de distro (3)
VOL já não é mais como antes? (24)









