Як увімкнути кожну команду Linux на логсервер


13

Я хочу, щоб кожна введена команда перейшла до сервера реєстрації. Вже налаштований syslog-ng для відправки всіх журналів на сервер.

Мене цікавлять будь-які і всі методи для цього. Я б очікував деякого обговорення негідних користувачів та безпеки, але першою основною метою є просто запустити сеанси на реєстрацію. Усі сеанси закінчуються через ssh, але команди підключення до консолі також повинні реєструватися. Я хотів би, щоб це сталося для будь-якої оболонки, але первинний - bash. (Знову я знаю, що шахрайський користувач може створити власну оболонку ...)

Відповіді:


29

Це не так, як ви підходите до проблеми. Щойно ви надаєте користувачеві доступ до оболонки, ви довіряєте цьому користувачеві робити все, на що він / вона має належні дозволи. Забудьте про реєстрацію команд, існує занадто багато способів виконання команди в будь-якій системі Unix.

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

Здається, те, що ви насправді хочете, називається аудитом . Увімкніть підсистему аудиту та використовуйте auditctlкоманду та auditdдемон з пакету аудиту для управління тим, що реєструється. Більше інформації можна знайти на сторінці посібника Audctl (8) .

Зауважте, що реєстрація кожної інстанції процесу також може бути не оптимальною. Наприклад, простий ./configureдля програмного пакету (створений за допомогою автоінструментів) примітний для створення тисяч екземплярів процесів. Це заповнить журнал аудиту настільки сильним шумом, що згодом стає дуже важко проаналізувати його.


13

Встановіть acctпакет (назва пакета залежить від distro, також відомий як облік процесів) та використовуйте 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для отримання додаткової інформації.


11

Якщо ви готові зробити невелике програмування на C, ви можете зробити це, написавши бібліотеку, яка завершує execve, журнали в syslog, а потім dlopen - бібліотеку, що містить справжній execve syscall. Потім в / etc / environment встановіть LD_PRELOAD на шлях для створеної вами бібліотеки.

Ви хочете бути обережними щодо введення циклу тут, тож ви можете або занести в журнал exec певних бінарних файлів, або виключити інші (наприклад, syslog) з реєстрації.


Власне, це дуже корисно. Перший пошук у обгортці execve викликає снупи ( sourceforge.net/projects/snoopylogger ). Мабуть, близьке до того, що я шукав, хоча і трохи багатослівний. Після тестування я бачу, що мені знадобиться схвалення керівництва, щоб поставити це у виробниче середовище. (Попередження для всіх вас недоброзичливців)
Лев

@Leo Оскільки версія 2.0.0 Snoopy підтримує специфікацію користувальницького формату журналу під час виконання ./configure, тому перенаголошення більше не повинно бути проблемою. Розкриття інформації: Підтримка Snoopy тут.
Bostjan Skufca

7

Мені звучить так, що ти шукаєш щось на кшталт rooth ( man page ). Щоб процитувати сторінку людини:

Rootsh - це обгортка для оболонок, яка реєструє всі повторені натискання клавіш та вихід терміналу у файл та / або в syslog.

Незважаючи на ім’я, це може бути використане для будь-якого користувача.


2

Вам, мабуть, краще, щоб користувачі використовували sudo (або подібні) для запуску важливих вам команд та довіряли користувачам на якомусь рівні. Коли ви наближаєтесь до "повного контролю" речей, тим складніше відстежити, що вони роблять. Я нещодавно дивився на такі інструменти, наприклад. Здебільшого вони просто створюють журнали, якими важко керувати, якщо у вас є достатньо користувачів та машин, щоб зробити таку річ вартістю. :)

Розгляньте всю інформацію, яку ви збираєте. Скільки цього ви дбаєте? Напевно, дуже мало - тож ви генеруєте журнали, які здебільшого нічого не варті. Аудит речей, які вас насправді хвилюють, як і інші, мабуть, приводить вас до кращого стану.


1

Bash можна компілювати з підтримкою syslog починаючи з 4.1.

Це не є надійним (облік процесів може бути кращим для цього), але це переважно взаємодія користувачів; обсяг повинен бути більш керованим, і ви зможете перейти на щось більш детальне, якщо підозрюєте щось ненормальне.

Однак, це нав'язливо, і як користувач, я очікував би дуже специфічного попередження про конфіденційність, перш ніж ви почали це робити.


0

Також є sudosh ( http://sudosh.sourceforge.net ), який буде робити реєстрацію сеансів. Ви можете запустити його як певну оболонку для користувача або через sudo. Він також відстежує терміни для кожного сеансу, так що ви можете відтворювати сеанс і переглядати його (включаючи редагування сеансів і багато чого іншого).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.