Defina HISTIGNORE para “sudo -S”
$ export HISTIGNORE='*sudo -S*'
Depois passe a sua palavra-passe com segurança para sudo:
$ echo "your_password" | sudo -S -k <command>
“HISTIGNORE” significa não guardar este comando no histórico. Este é o histórico em memória ou o ficheiro “~/.bash_history”.
“-k” significa ignorar as credenciais em cache para forçar o sudo a pedir sempre a palavra-passe. Isto é para um comportamento consistente.
$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -k whoami
$ echo "<your_password>" | sudo -S -k cat /etc/shadow
$ echo "<your_password>" | sudo -S -k bash /tmp/myscript.sh
A desvantagem do método acima é que se quiser ver os comandos que correu no histórico mais tarde, eles não estarão lá. Outro método é actualizar a cache de credenciais de autenticação do sudo (por defeito está activada com 5 minutos de intervalo), depois execute o sudo separadamente. Mas a desvantagem disto é que terá de estar ciente da cache de 5 minutos.
Por exemplo:
$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -v
$ sudo whoami
$ echo "<your_password>" | sudo -S -v
$ sudo cat /etc/shadow
$ echo "<your_password>" | sudo -S -v
$ sudo /tmp/myscript.sh
Nota: Executei um sudo antes de cada comando para assegurar que a cache do sudo é actualizada, uma vez que o valor por defeito é de 5 minutos. Sim, whoami não deve demorar 5 minutos, mas calculo que mais vale tê-lo executado antes de cada comando para garantir a consistência. Pode também colocar “export HISTIGNORE=‘sudo -S’” no seu ficheiro ~/.bashrc, depois carregue-o com “. ~/.bashrc” ou logoff, depois faça o login. No entanto, estou a pensar usar isto para fins de scripting, por isso vou mantê-lo no topo de todos os meus scripts para as melhores práticas de segurança. Definir “echo ”“ | sudo -S -v” para uma variável em vez disso também pode ser uma boa ideia, depois basta correr a variável antes de cada comando que precisa de privilégios de root, veja o comentário do Janar. O comentário de “John T” também deve incluir o parâmetro “-k”, como se executasse “sudo -S” sem “-k” e a cache de autenticação sudo já tem as suas credenciais (e ainda é válida, a cache de autenticação sudo por defeito é de 5 minutos) então a bash irá executar a sua palavra-passe como um comando em vez disso, o que é mau.