Como obter privilégios de root para um usuário específico se tivermos uma senha de root? [fechadas]

0

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.

    
por atp9 25.09.2013 / 16:51

3 respostas

2

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.

    
por 25.09.2013 / 17:41
2

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.

    
por 25.09.2013 / 18:33
1

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.

link

link

    
por 25.09.2013 / 18:30