Ser root sem pedir a senha em um shell script

1

Eu quero escrever um script que execute "chrome" como root sem obter a senha dos usuários. Os usuários não devem saber a senha, eles também não devem ver a senha, se eles abrirem o script (se a senha de root for necessária para ser escrita no script, precisamos criptografá-la) Como isso pode ser possível? Eu verifiquei este e ele não funcionou

#!/usr/bin/expect -f 
"right here i need to be root"
chrome -P http://www.google.com.tr & sleep 4 
    
por zardus 05.08.2016 / 13:28

4 respostas

3

Use o sudo. Adicione uma regra no arquivo sudoers para permitir que os usuários executem um comando ou script específico como raiz.

Se você quiser abstrair o uso de sudo para os usuários, tenha um script normal chamado sudo em nome do usuário.

O que me preocupa aqui é o uso do chrome como root. Eu não preciso perguntar por quê, mas tenha em mente que é um risco de segurança. Faça o que fizer, você deve considerar usar um usuário dedicado e não privilegiado. Se você precisar de alguns recursos do root, consulte os recursos do linux ( man 7 capabilities ) para fornecer apenas as permissões de superusuário necessárias ao usuário do chrome.

    
por 05.08.2016 / 15:14
0

Se o script iniciar um aplicativo gráfico, ele não deverá ser executado com sudo . Veja por exemplo:

Por que o sudo não deveria ser usado? iniciar aplicativos gráficos?

usando o sudo em aplicativos GUI

Não posso recomendar a execução do chrome como root (!), mas, em princípio, para iniciar um aplicativo gráfico como root sem efetuar login como root, você deve usar pkexec . Como explicado em esta resposta , deve ser suficiente definir as variáveis de ambiente necessárias no comando

 pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY ./your-script

O usuário será solicitado a fornecer sua própria senha. Estritamente falando (ou se isso falhar), você deve criar um arquivo de políticas. Veja man pkexec e mais detalhes aqui e especificamente sobre scripts aqui

    
por 20.08.2016 / 16:58
-1

Na verdade, é uma péssima ideia, pois você terá que definir sua senha de forma clara em seu roteiro.

Esse não é um bom ponto de segurança, mas você pode fazer algo assim:

#!/bin/bash

set pass "YOUR_PASSWORD"

sudo your_command

expect "Password"
send "$pass\r"

Mas por que não fazer um chmod u + s?

    
por 05.08.2016 / 14:58
-1

Parece-me que o que você realmente quer, é definir o UID do processo executado, em vez de executar o processo sob um usuário específico.

O que você pode querer, em vez disso, é definir o SUID do programa corretamente como descrito aqui .

Exemplo curto:

Suponha que seu programa run seja de propriedade root (usuário e grupo):

$ chmod u+s run
$ ls -l run
-rwsrwxr-x. 1 root root 0 Aug  5 15:08 run*

Observe o 's' no bit executável no bloco do usuário. Agora, quando executado por outra pessoa, o processo será executado como o usuário ao qual esse arquivo pertence, que é root.

Observação: como Doug O'Neal mencionou corretamente, isso não funciona em nenhum tipo de linguagem interpretada no Linux! (Mais detalhes sobre aqui ) Você precisaria criar um pequeno programa wrapper em C e compilá-lo, por exemplo.

    
por 05.08.2016 / 15:10