Execute o shell script em um comando

6

Eu quero executar um script de shell quando o comando date -s <string> for usado. Por exemplo, eu quero registrar o comando no arquivo /tmp/user.log executando o seguinte comando no script de shell

logger -p user.notice "date -s command executed" -f /tmp/user.log

Como pode executar um script de shell quando date -s <string> é executado no shell?

Para torná-lo mais geral, eu quero executar meu script de shell quando alguém emite um determinado comando linux no meu sistema. Como fazer isso?

    
por LinuxPenseur 21.12.2010 / 14:09

3 respostas

1

Agradeço aos meus amigos serverfault pelas respostas.

Acho que encontrei uma resposta para minha pergunta com toda sua ajuda. Mas todos vocês podem me ajudar se houver algum erro associado ou qualquer melhoria a ser feita? Aqui vou eu.

Estas são as coisas que eu fiz.

i). criou um script, datewrapper.sh em / etc com o seguinte código

#! /bin/bash

# wrapper script for the date command.
# whenever the date -s command is issued, it will be logged.

# executing the date command first with parameter list if any
date $@

# check whether the date command executed successfully
if [ "$?" == "0" ] ; then
   for param in $@ ; do
      # if "-s" option is used, log it
      if [ "$param" == "-s" ] ; then
         # user.notice logs the message to /tmp/log/user.log
         # as per the commands in /etc/syslog-ng/syslog-ng.conf
         logger -p user.notice "New date set"
         break
      fi
   done
fi

exit 0

ii). chmod a + x /etc/datewrapper.sh; alias date = '/ etc / datewrapper.sh'

iii). data

Tue Dec 21 21:51:01 UTC 2010

iv). data -s "21:53:05"

Tue Dec 21 21:53:05 UTC 2010

v). Eu verifiquei o /tmp/log/user.log. Mostra a mensagem

Dec 21 21:53:05 localhost root: New date set

Portanto, o resultado é que sempre que o usuário der o comando date , meu script será executado e sempre que ele emitir o comando com a opção -s , ele fará o login em /tmp/log/user.log

    
por 22.12.2010 / 05:57
7

Reformulando a pergunta, você quer saber quando alguém tenta definir a hora do sistema. É exatamente para isso que o subsistema audit é ... ele permite que você audite a execução de chamadas específicas do sistema. Nesse caso, você deseja saber sempre que alguém chama qualquer uma das várias chamadas do sistema que podem alterar a hora do sistema. Ao usar o subsistema audit , você tem uma solução que funciona independentemente de alguém estar chamando /bin/date ou sua própria versão do comando construída localmente.

Consulte auditd(8) e audit.rules(7) para obter uma descrição completa da sintaxe das regras e, para exemplos de operações de alteração de horário de auditoria, você pode procurar por "mudança de horário" no exemplo nispom.rules file. Você pode encontrar isso em seu sistema local ou pode encontrá-lo aqui:

Para mais informações sobre o subsistema audit (e a documentação é um pouco difícil de obter):

por 21.12.2010 / 15:37
4

Você não pode impedir facilmente que um usuário execute sua própria versão do programa, mas se você assumir que o usuário não é malicioso, é fácil:

  1. Crie um script de wrapper que registre o programa e execute-o (usando os parâmetros originais)
  2. Verifique se o wrapper substitui o programa original no caminho do usuário.

Você pode usar alias para fazer os usuários usarem o wrapper ou simplesmente mover / renomear o programa original e colocar o wrapper no local original.

Se você quiser apenas registrar algumas das execuções, use um regexp no script wrapper.

    
por 21.12.2010 / 14:21