Provavelmente você está familiarizado com sudo command
e /etc/suoders file
se você quiser escrever a mesma coisa, você pode ler o seu código.
Alguém pode sugerir como posso alterar privilégios de processo no Linux para o root?
Suponha que eu tenha um processo normal em execução sob algum usuário me considere. Agora meu script deve criar alguns usuários usando o comando 'useradd' e quero desabilitar as contas de usuário após algumas horas. Vamos dar um prazo de 5 horas. A cada 5 horas deve habilitar a conta e após mais 5 horas deve desabilitar a conta.
Agora, o problema está no script, se eu tentar obter acesso root somente digitando o comando 'su', ele solicita um prompt. Bem, minha intenção aqui é invocar este script do cliente remoto (provavelmente via serviço da Web em .net ou em Java).
Então, existe uma maneira que eu possa mudar para o modo raiz e criar / ativar / desativar as contas no Linux sem dar nenhum prompt (onde ele precisa esperar pela entrada de alguém)? Suponha que eu tenha uma senha de root.
Eu tentei com o comando pipe como abaixo:
echo "password" | su
Mas de alguma forma isso me traz no prompt. Se eu for bem sucedido em executar um script diretamente, sem aviso, posso continuar fazendo a mesma coisa através do serviço da web.
Provavelmente você está familiarizado com sudo command
e /etc/suoders file
se você quiser escrever a mesma coisa, você pode ler o seu código.
Como msv apontado nos comentários, a premissa inteira soa como uma instância do XY problema e muito um pesadelo segurança sábio, mas vou tentar resolver a questão de obter privilégios de root sem uma senha.
Primeiro, echo "password" | su
não funcionará porque su
não leu a senha de stdin
, mas abre /dev/tty
diretamente para leitura. Embora existam ferramentas (como espere ) que podem ser usadas para automatizar programas interativos, a abordagem de Ganhar automaticamente um shell de root para invocar um comando específico, já que root é uma coisa ruim do ponto de vista da segurança, pois viola o princípio do menor privilégio .
Dito isso, a autenticação com su
pode ser automatizada com expect
usando algo como o seguinte:
#!/usr/bin/expect -f
spawn su
expect "Password:"
send "password\n";
interact
Se o objetivo é permitir a invocação de um comando específico como raiz, sem exigir as credenciais raiz, a ferramenta certa para o trabalho é sudo
. Por exemplo, se desejar permitir que usuários no grupo wheel
executem useradd
sem inserir uma senha, isso pode ser feito adicionando a seguinte sub-rotina a /etc/sudoers
com o comando sudoedit
:
%wheel ALL = NOPASSWD: /usr/sbin/useradd
Ao configurar esses privilégios, é prudente, pelo menos, garantir que a capacidade seja restrita a um usuário em particular ou a um grupo exclusivo.
Quanto a usar esse método para adicionar usuários através de um script CGI ou similar, normalmente não seria desejável conceder tais privilégios diretamente ao software voltado para a Web, mas adicionar um nível de separação de privilégios entre eles. Os privilégios reais poderiam ser concedidos a um componente de software separado, como um daemon, que o aplicativo da Web solicitaria (via IPC) para executar a operação privilegiada em seu nome. Desta forma, a validação de entrada poderia ser feita tanto pelo processo privilegiado quanto pela aplicação web, para minimizar os riscos de falhas exploráveis na aplicação web, permitindo a invocação da operação privilegiada ( useradd
neste caso) com parâmetros arbitrários, ou pior, como a execução de código arbitrário com privilégios elevados.
Eu conheço duas ferramentas que foram projetadas para situações como esta: Esperar e Vazio. Ambos aguardam um programa para escutar na entrada padrão e, em seguida, alimentam um valor predeterminado. A expectativa é baseada no TCL e tem uma base de usuários relativamente grande. Vazio tem menos dependências, mas pode ter menos suporte. Deve haver documentação suficiente na página de cada um para resolver esse problema simples.
Tags password su privileges linux