Executar script em Python como root

1. Executar script em Python como root

Adriano Christi
ACMM

(usa Ubuntu)

Enviado em 11/10/2021 - 15:11h

Pessoal, eu preciso de ajuda em uma questão que é a seguinte:
Trabalho em uma instituição onde disponibiliza o acesso a computadores/internet de forma gratuita e tenho que gerenciar de 30 a 40 máquinas com Linux (Ubuntu 20.04) usando o Epoptes no servidor. As máquinas não ficam conectadas a internet a não ser quando algum usuário queira acessar a internet em um dos computadores e ele entra com login pra essa tarefa. Eu criei um script, em Python também, que apaga tudo o que os usuários deixam nas máquinas no final do expediente e coloquei esse script pra iniciar junto com o sistema usando o sistemd e está funcionando como deveria. Coloquei o script em Python e o script em shell script que chama o programa em Python no diretório /opt/Program.
Eu criei um script que atualiza os repositórios e aplicativos de forma automática assim que encontra conexão com a internet disponível, o problema é que ele pede senha de root. Como eu posso resolver essa questão da senha quando eu colocar esse programa junto com os outros scripts.
No Python eu estou usando o subprocess e, lógico, não vou colocar a senha do root no código, como eu poderia contornar isso? Outra forma que tentei fazer foi usar o script em Python rpa chamar um programa em shell script com os comandos pra atualização, mas não funcionou tanto colocando os comandos com sudo ou sem, mesmo com os arquivos dentro do diretório /opt/Program.
Agradeço a ajuda.

OBS.: Não vai servir agendamento de tarefas porque eu não sei em qual das máquinas e quando vão acessar a internet, então eu tenho que aproveitar o momento. O máximo que eu posso agendar é pra que o programa execute a tarefa de 3 em 3 dias ou uma vez por semana, mas no caso de hora marcada, fica difícil. Sei que isso compromete a performance no uso do computador por alguém, mas é chato ter que fazer a atualização de 40 máquinas na mão.


  


2. Re: Executar script em Python como root

Daniel Lara Souza
danniel-lara

(usa Fedora)

Enviado em 11/10/2021 - 15:39h


minha sugestão seria tu criar um repo local de updates , e usar o ansible para enivar os comandos para as maquinas,
ansible ajuda muito nesses casos


3. Re: Executar script em Python como root

leandro peçanha scardua
leandropscardua

(usa Ubuntu)

Enviado em 11/10/2021 - 18:38h


tenta suid


4. Re: Executar script em Python como root

Buckminster
Buckminster

(usa Debian)

Enviado em 11/10/2021 - 19:32h

"Eu criei um script que atualiza os repositórios e aplicativos de forma automática assim que encontra conexão com a internet disponível, o problema é que ele pede senha de root. Como eu posso resolver essa questão da senha quando eu colocar esse programa junto com os outros scripts."

-Veja bem, esse script de atualização julgo que atualiza os repositórios e aplicativos não somente no servidor, mas em todas as máquinas da rede, correto?

Ou as máquinas da rede "buscam" os repositórios no servidor?

Pergunto isso porque caso for a primeira opção então a senha de root pedida será também a senha de root de cada máquina da rede, ou seja, grosso modo, além de ter que ter a senha de root do servidor ao executar em cada máquina da rede também pedirá a senha de root de cada máquina.

-A sugestão do Daniel é boa:
"minha sugestão seria tu criar um repo local de updates , e usar o ansible para enivar os comandos para as maquinas,
ansible ajuda muito nesses casos"

O Ansible automatiza as atualizações além de outras coisas, mas talvez o Epoptates que tu já tem aí faça a mesma coisa.

O Epoptates não conheço, mas pelo que vi é um programa de controle de laboratórios, um gerenciador de lan houses vamos por assim dizer. Ele acessa remotamente os computadores da rede. Talvez tenha algum lugar nele no servidor onde colocar o script para executar e isso evitaria o problema de permissões (no caso, senha de root).

-Tu pode também utilizar SSH para acesso remoto somente para executar o script, pois a base disso tudo é que se trata de acesso remoto.

-"quando eu colocar esse programa junto com os outros scripts."
E como tu faz com os outros scripts?
Percebe... provavelmente os outros scripts não mexem com atualizações (updates), pois esse tipo de comando exige root em cada máquina e em cada máquina as permissões de cada arquivo e/ou diretório são diferentes.
O script será executado dentro do servidor (chmod +x) e como se trata de atualizações será executado também dentro de cada máquina da rede.

-Uma última sugestão seria fazer isso:
https://qastack.com.br/ubuntu/746350/request-root-privilege-from-within-a-script

Mas leia tudo com calma, pois nesse link tem tanto sugestões ótimas como sugestões desastrosas também.


________________________________________________
Always listen the Buck!
Sanou tua dúvida, resolveu teu problema?
Então marque como Resolvido e escolha a Melhor Resposta.



5. Re: Executar script em Python como root

Adriano Christi
ACMM

(usa Ubuntu)

Enviado em 12/10/2021 - 06:30h

Buckminster escreveu:

-Veja bem, esse script de atualização julgo que atualiza os repositórios e aplicativos não somente no servidor, mas em todas as máquinas da rede, correto?


As máquinas são independentes entre si nesse quesito pelo fato de que cada máquina, pra se conectar a internet, precisa que o usuário tenha um cadastro junto ao provedor de internet da instituição pra poder utilizar os serviços e isso inclui também usar internet no servidor. Ou seja, o que eu faço na internet em uma máquina cliente não influencia o servidor e vice-cersa.

Ou as máquinas da rede "buscam" os repositórios no servidor?


Se está se referindo ao servidor local, não. Cada máquina busca os repositórios do Ubuntu. São independentes entre si. Até mesmo pelo Epoptes (gerenciador das máquinas) pra que eu possa atualizar cada máquina, eu precisaria abrir cada uma delas no servidor pelo Epoptes e ativar a internet em cada uma delas pra depois abrir o terminal e rodar os comandos em cada uma. Não tem como fazer esse comendo pra todas de uma vez pelo Epoptes.

Pergunto isso porque caso for a primeira opção então a senha de root pedida será também a senha de root de cada máquina da rede, ou seja, grosso modo, além de ter que ter a senha de root do servidor ao executar em cada máquina da rede também pedirá a senha de root de cada máquina.


Por serem máquinas independentes, tanto o servidor quanto as máquinas clientes tem senhas diferentes.

-A sugestão do Daniel é boa:
"minha sugestão seria tu criar um repo local de updates , e usar o ansible para enivar os comandos para as maquinas,
ansible ajuda muito nesses casos"


Eu dei uma lida sobre ansible e, pelo que eu pude entender (não sei se entendi errado), algumas funções dependem, de uma certa forma, de como a rede está configurada e nesse caso eu não tenho acesso a configuração da rede lá na instituição.

O Ansible automatiza as atualizações além de outras coisas, mas talvez o Epoptates que tu já tem aí faça a mesma coisa.


Ele automatizaria se eu pudesse dar um único comando e esse comando funcionar em todas ao mesmo tempo, mas não vai porque eu teria que fazer uma por uma. Sem contar que todas as máquinas deveriam estar previamente conectadas a internet pra isso.

O Epoptates não conheço, mas pelo que vi é um programa de controle de laboratórios, um gerenciador de lan houses vamos por assim dizer. Ele acessa remotamente os computadores da rede. Talvez tenha algum lugar nele no servidor onde colocar o script para executar e isso evitaria o problema de permissões (no caso, senha de root).


Eu procurei, mas, o máximo que eu consegui encontrar até agora, foi arquivos sobre a interface dele. Ele é escrito em Python e GTK. Eu bisbilhotei algumas coisas a respeito dele porque eu criei um programa de cadastro de usuários em PyQt e gostaria de fundir com o Epoptes, mudando a interface do programa que eu fiz pra GTK.

E como tu faz com os outros scripts?
Percebe... provavelmente os outros scripts não mexem com atualizações (updates), pois esse tipo de comando exige root em cada máquina e em cada máquina as permissões de cada arquivo e/ou diretório são diferentes.
O script será executado dentro do servidor (chmod +x) e como se trata de atualizações será executado também dentro de cada máquina da rede.


Eles servem apenas pra apagar coisas que são deixadas pelos usuários nos diretórios do /home.

-Uma última sugestão seria fazer isso:
https://qastack.com.br/ubuntu/746350/request-root-privilege-from-within-a-script
Mas leia tudo com calma, pois nesse link tem tanto sugestões ótimas como sugestões desastrosas também.


Vou ler sim. Pode deixar.

Eu ainda vejo como uma solução melhor pra essa situação, colocar o script junto com os scripts do Epoptes como sugeriste ou colocar eles pra rodar como root direto de um diretório do sistema como eu fiz com os outros pra apagar arquivos. Eu preciso que seja no sistema pra não dar oportunidade pra nenhum usuário bisbilhoteiro mexer nos scripts.
Valeu pela ajuda.

Guns don't kill people. People kill people.


6. Re: Executar script em Python como root

Lisandro Guerra
Lisandro

(usa Arch Linux)

Enviado em 12/10/2021 - 09:06h

Todas as sugestões são excelentes.
Apenas para te dar mais uma opção, que não é tão segura, eu sei, mas talvez te sirva se o nivel de segurança necessário não for tão alto.
Lembro a opção de deixar a senha em uma variável de ambiente e chamar a variável no código, podendo ainda usar o cxfreeze para gerar um executável e impedir o acesso ao fonte.

Abraço







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts