Запустить сценарий оболочки по команде

Я хочу запустить сценарий оболочки, когда date -s <string> команда используется. Например, я хочу записать команду в файл /tmp/user.log, выполнив следующую команду в сценарии оболочки

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

Как запустить сценарий оболочки, когда date -s <string> выполняется на оболочке?

Чтобы сделать его более общим, я хочу запустить свой сценарий оболочки, когда кто-то еще выполняет конкретную команду linux в моей системе. Как это сделать?

3 ответа

Решение

Спасибо тонна моя serverfault друзья за ответы.

Я думаю, что я придумал ответ на мой вопрос со всей вашей помощью. Но вы все kinldy выручите меня, если есть какая-либо ошибка, связанная с этим, или какие-либо улучшения должны быть сделаны? Здесь я иду.

Это то, что я сделал.

я). создал скрипт, datewrapper.sh в / etc со следующим кодом

#! /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; псевдоним date='/etc/datewrapper.sh'

III). Дата

Вт дек 21 21:51:01 UTC 2010

IV). date -s "21:53:05"

Вт дек 21 21:53:05 UTC 2010

v). Я проверил /tmp/log/user.log. Показывает сообщение

21 дек 21:53:05 localhost root: новая дата установлена

Таким образом, результат заключается в том, что всякий раз, когда пользователь дает date команда, мой сценарий будет выполняться, и всякий раз, когда он выполняет команду с -s вариант, он вошел в /tmp/log/user.log

Перефразируя вопрос, вы хотите знать, когда кто-то пытается установить системное время. Это именно то, что audit Подсистема предназначена для... она позволяет проверять выполнение конкретных системных вызовов. В этом случае вы хотите знать, когда кто-либо вызывает какие-либо из системных вызовов, которые могут изменить системное время. Используя audit подсистема, у вас есть решение, которое работает независимо от того, кто-то звонит /bin/date или их собственная локально построенная версия команды.

Увидеть auditd(8) а также audit.rules(7) для полного описания синтаксиса правил и примеров аудита операций с изменением времени, вы можете найти "изменение времени" в примере nispom.rules файл. Вы можете найти это в вашей локальной системе, или вы можете найти это здесь:

Для получения дополнительной информации о audit подсистема (и документация немного сложна):

Вы не можете легко запретить пользователю запускать собственную версию программы, но если вы предполагаете, что пользователь не является вредоносным, это легко:

  1. Создайте скрипт-обертку, которая регистрирует программу и затем запускает ее (используя исходные параметры)
  2. Убедитесь, что оболочка заменяет исходную программу в пути пользователя.

Вы можете использовать псевдоним, чтобы пользователи использовали оболочку, или вы можете просто переместить / переименовать исходную программу и поместить оболочку в исходное местоположение.

Если вы хотите регистрировать только некоторые из выполнений, используйте регулярное выражение в сценарии оболочки.

Другие вопросы по тегам