Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

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

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

Большое спасибо, мой serverfault друзья за ответы.

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

Вот что я сделал.

я). создал сценарий, 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