Como simular um prompt de senha do administrador do Windows no Linux?

1

Eu uso muito o aplicativo mint install , mas não acho que seja seguro se Eu permito que o usuário normal que eu uso tenha privilégios totais sobre ele. Eu fui perguntando se há uma maneira de obter acesso a este aplicativo somente quando senha root é inserida. Basicamente  ser capaz de usar algo como o prompt de senha do administrador do Windows ao instalar um novo aplicativo no terminal. Eu sei que posso logar na raiz com su mas eu sei que definitivamente não é seguro. Alguma ideia?

Edit: Novamente, eu não quero dar privilégios ao usuário normal usando sudo ou chmod ou qualquer outra coisa.

    
por Jecht Tyre 12.08.2014 / 19:27

2 respostas

3

Se você precisar fazer algo que exija privilégios de root, precisará usar algum método de obter privilégios de root, que na maioria dos sistemas modernos significa su , sudo ou um wrapper em torno de um desses. O que é perigoso sobre a execução de comandos como root (seja com su ou sudo ) é que ele oferece muito mais maneiras de danificar seu sistema. Portanto, você só deve executar um comando como root quando o comando realmente exigir.

A principal diferença entre su e sudo em sua configuração típica é que, para sudo , você digita a mesma senha de quando faz login, enquanto su exige uma senha diferente (a senha do root user). Para uma máquina típica de usuário único, não há diferença significativa entre os dois em termos de segurança. Também é possível configurar sudo para não exigir uma senha.

Se você estiver trabalhando em um terminal e quiser executar um comando como root, com su , execute:

su -c 'somecommand an_argument another_argument'

com sudo :

sudo somecommand an_argument another_argument

De qualquer forma, você será solicitado a fornecer uma senha (a senha raiz para su , sua própria senha para sudo ). Sudo pode lembrar sua senha e não perguntar novamente pelos próximos minutos; com su , você terá que digitá-lo novamente a cada vez.

Você também pode obter um prompt gráfico para digitar sua senha (com gksu , kdesu ,…), mas se você já estiver trabalhando em um terminal, isso é menos conveniente.

    
por 13.08.2014 / 02:03
0

Embora tenha em mente que não há refeições gratuitas, é possível minimizar o risco.

Se você quiser executar o script como root e sair imediatamente sem o prompt de senha e o comando exit , será necessário comprometer um pouco.

A solução a seguir permite que você armazene sua senha criptografada duas vezes (ou mais) root em qualquer lugar com as permissões de usuário atuais.

Alto nível:

  1. Criptografando root senha em base64 duas vezes uma vez e colocando o arquivo em qualquer lugar (pode ser 1234.txt, por exemplo).

  2. Invocando o script expect com o argumento (a string acima da decodificada)

  3. Expect executa o script desejado e sai.

  4. Limpar o arquivo em /root invocado de expect e excluir as linhas bash_history (do usuário comum) que contêm root , o arquivo criptografado por senha e base64 . Para remover qualquer rastreio, o script foi chamado (da perspectiva do usuário comum). Este script é acessível somente por root user.

Assim, acima de tudo, parece que, do ponto de vista dos usuários comuns, esse script nunca foi executado e não contém senhas confidenciais.

Além disso, double base64 encryption, parece bastante aleatório para inocente para mim (embora eu não sou especialista em segurança, eu não iria reconhecê-lo como 2x base64 ). Por exemplo:

V1c5MVFYSmxWMlZzWTI5dFpRbz0K decrypted to YouAreWelcome 

Codificando a senha duas vezes em base64 uma vez :

$ cat pass.txt | base64 | base64 > innocent_name.txt
$ rm pass.txt

Então:

Executando o script:

$ ./root_wrap.exp "$(cat innocent_name.txt | base64 -d | base64 -d)"

Espere pelo script:

#!/usr/bin/expect -f

set root_user root;
set root_pass [ lindex $argv 0 ];

spawn bash
expect "*$ "
send -- "whoami\r"
expect "*$ "
send -- "su $root_user\r"
expect "*?assword:*"
send -- "$root_pass\r"
expect "*# "
send -- "./whoam.sh\r"
expect "*# "
send -- "/root/rm_trace.sh\r"
expect "*# "
send -- "exit\r"
send -- "whoami\r"
expect "*$ "
expect eof

Script do histórico de limpeza /root/rm_trace.sh :

#!/bin/bash

sed -i '/base64/d' /home/<user>/.bash_history
sed -i '/root_wrapp/d' /home/<user>/.bash_history
sed -i '/innocent_name/d' /home/<user>/.bash_history

Exemplo de script bash a ser executado como root:

 #!/bin/bash

 echo "now running as root"
 whoami
    
por 12.08.2014 / 20:38