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

Как записывать каждую команду linux на сервер журнала

Я хочу, чтобы каждая набранная команда отправлялась на сервер журнала. Уже настроен syslog-ng для отправки всех журналов на сервер журналов.

Меня интересуют все способы сделать это. Я ожидал бы некоторого обсуждения мошеннических пользователей и безопасности, но первая основная цель - просто заставить сеансы регистрироваться. Все сеансы проходят через ssh, но команды подключения консоли также должны регистрироваться. Я бы хотел, чтобы это произошло с любой оболочкой, но основной - bash. (Опять же, я знаю, что злоумышленник может создать свою собственную оболочку ...)

Вы не так подходите к проблеме. После того, как вы предоставите пользователю доступ к оболочке, вы поручаете этому пользователю делать все, на что у него / нее есть соответствующие разрешения. Забудьте о ведении журнала команд, существует слишком много способов выполнить команду в любой системе Unix.

Например, пользователь может запустить почтовый клиент (единственная регистрируемая команда - pine, например), там он выбирает "Compose", который запускает VI, и из VI он запускает любую команду, которую хочет через :!cmd. Эта команда нигде не регистрируется, и с точки зрения системы она похожа на любое вспомогательное приложение, вызываемое VI, например grep или sort. Единственная команда, зарегистрированная оболочкой, была pine.

Кажется, то, что вы действительно хотите, называется аудиторская проверка. Включите подсистему аудита и используйте auditctl команда и auditd демон из аудит пакет для управления тем, что регистрируется. Больше информации в auditctl (8) страница руководства.

Обратите внимание, что регистрация каждого экземпляра процесса также может быть неоптимальной. Например, простой ./configure для программного пакета (созданного с помощью autotools) примечателен созданием тысяч экземпляров процессов. Это приведет к настолько сильному шуму в журнале аудита, что впоследствии будет очень трудно его анализировать.

Установите acct пакет (имя пакета зависит от дистрибутива, также известный как учет процессов) и использование lastcomm <username>:

[mithrandir]-[/home/sernin]-[1951] % lastcomm sernin
tr                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
tr                     sernin   pts/2      0.02 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
fortune                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xmodmap                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xrdb                   sernin   pts/2      0.00 secs Fri Nov 12 12:02
sh                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
cpp                    sernin   pts/2      0.00 secs Fri Nov 12 12:02

Вы также можете искать по tty или имени команды. По-прежнему,man lastcomm для получения дополнительной информации.

Если вы хотите немного заняться программированием на C, вы можете сделать это, написав библиотеку, которая обертывает execve, записывает в syslog, а затем dlopen - библиотеку, содержащую настоящий системный вызов execve. Затем в / etc / environment установите LD_PRELOAD на путь к созданной вами библиотеке.

Вы должны быть осторожны при вводе цикла здесь, поэтому вы можете захотеть либо регистрировать только exec определенных двоичных файлов, либо исключить другие (например, syslog) из журнала.

Мне кажется, вы ищете что-то вроде корень (страница руководства). Чтобы процитировать страницу руководства:

Rootsh - это оболочка для оболочек, которая регистрирует все повторяющиеся нажатия клавиш и вывод терминала в файл и / или в системный журнал.

Несмотря на название, это может использовать любой пользователь.

Вероятно, вам лучше, если пользователи будут использовать sudo (или аналогичный) для выполнения команд, которые вам интересны, и доверять пользователям на каком-то уровне. По мере того, как вы приближаетесь к «полному контролю» вещей, становится сложнее отследить, что они делают. Я недавно, например, смотрел на такие инструменты. В большинстве случаев они просто создают журналы, которыми трудно управлять, если у вас достаточно пользователей и машин, чтобы сделать это стоящим. :)

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

Bash может быть скомпилирован с поддержкой syslog начиная с версии 4.1.

Это не надежно (для этого может быть лучше учет процессов), но в основном это взаимодействие с пользователем; громкость должна быть более управляемой, и вы сможете переключиться на что-то более подробное, если подозреваете что-то ненормальное.

Тем не менее, это навязчиво, и как пользователь я ожидал бы очень конкретного предупреждения о конфиденциальности, прежде чем вы начнете это делать.

Еще есть судош (http://sudosh.sourceforge.net), который будет вести журнал сеанса. У вас есть возможность запустить его как определенную оболочку для пользователя или через sudo. Он также отслеживает время для каждого сеанса, поэтому вы можете воспроизвести сеанс и посмотреть его (включая сеансы редактирования и многое другое).