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.083 ]
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.
Funtoo Linux: A necrópsia de um Pinguim
Por que os romanos não fizeram computadores?
Personalizando um DVD de instalação do Ubuntu Linux
Otimizando o KDE com o Slackbuild
Fedora Desktop completo com i3 WM
Servidor VPN PPTP com autenticação de usuários no Active Directory
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
PIP3 - erro ao instalar módulo do mariadb para o Python (9)
É normal não gostar de KDE? (8)
O programa assinador digital (0)
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)









