O Sudo tem uma opção -S
que permite ler a senha do STDIN.
[user@evil ~]$ tail -1 /etc/shadow
tail: cannot open '/etc/shadow' for reading: Permission denied
[user@evil ~]$ echo 'P@ssW3rd!' | sudo -S tail -1 /etc/shadow
nfsnobody:!!:15891::::::
Aqui está um script de exemplo para demonstrar o processo:
#!/bin/bash
function hr {
perl -e 'print "-" x 80, "\n";'
}
hr
read -p "Please enter your sudo password: " -s sudopasswd
echo
hr
echo "-sudo run: tail -1 /etc/shadow"
tail -1 /etc/shadow
hr
echo "+sudo run: tail -1 /etc/shadow"
echo "$sudopasswd" | sudo -S tail -1 /etc/shadow
hr
echo "-sudo run: ls -la /root/"
ls -la /root/
hr
echo "+sudo run: ls -la /root/"
echo "$sudopasswd" | sudo -S ls -la /root/
hr
Seu script simplesmente precisa fazer algo como:
read -p "Please enter your sudo password: " -s sudopasswd
echo "$sudopasswd" | sudo -S x11vnc -storepasswd ~/.vnc/passwd
Isso permitiria que você usasse comandos sudo em seu script sem ter que codificar uma senha.
Como alternativa, você pode adicionar ao seu usuário, ou a um subconjunto de usuários, a capacidade de executar o x11vnc com o sudo, sem uma senha, mas adicionando uma linha como essa a /etc/sudoers
:
user ALL=(root) NOPASSWD: /path/to/x11vnc
Ou crie um grupo vncusers
, adicione usuários a esse grupo e adicione o seguinte a /etc/sudoers
:
%vncusers ALL=(root) NOPASSWD: /path/to/x11vnc