Existem métodos para verificar o que você está realmente executando a partir de um script bash?
Digamos que seu script bash está chamando vários comandos (por exemplo: tar
, mail
, scp
, mysqldump
) e você está disposto a se certificar de que tar
é o real, verdadeiro tar
, que é determinável pelo root
utilizador sendo o dono do arquivo e diretório pai e o único com permissão de escrita e não alguns /tmp/surprise/tar
com www-data
ou apache2
sendo o proprietário.
Claro que eu conheço PATH
e o ambiente, estou curioso para saber se isso pode ser verificado adicionalmente em um script bash em execução e, se houver, como exatamente?
Exemplo: (pseudocódigo)
tarfile=$(which tar)
isroot=$(ls -l "$tarfile") | grep "root root"
#and so on...
which
não dizer corretamente o que tar
fará, conforme respondido por xhienne, ls
poderia ser hackeado para retornar informações falsas sobre o (s) arquivo (s), se houver. Também grep
pode ser hackeado para retornar informações falsas; isso poderia ser evitado usando a correspondência de shell, mas o shell poderia ser hackeado. E o shell pode ser hackeado para obter resultados errados type
em primeiro lugar - ou substituído totalmente, pois a substituibilidade do shell foi uma inovação importante do Unix em comparação com os sistemas operacionais de 50 anos de idade. Veja o endereço de Turing de 1984 de Ken Thompson. São tartarugas até o fim.
TE
) - que possui um banco de dados com assinaturas (ou seja, mais extenso que uma soma de verificação MD5. Quando o TE está ativo E um arquivo está no banco de dados, você pode escolher se o programa é executado - ou apenas avisa que não corresponde ao banco de dados.Além disso, existem duas outras configurações: TEP
(PATH de execução confiável) e TLP
(PATH LIBrary confiável). Somente os programas no TEP podem ser executados e as bibliotecas podem ser carregadas apenas com o directório está incluído no TLP no Linux I existe algo chamado 'AppArmor' que podem ajudá-lo..