Це не так, як ви підходите до проблеми. Щойно ви надаєте користувачеві доступ до оболонки, ви довіряєте цьому користувачеві робити все, на що він / вона має належні дозволи. Забудьте про реєстрацію команд, існує занадто багато способів виконання команди в будь-якій системі Unix.
Наприклад, користувач може запустити поштовий клієнт (єдиною зареєстрованою командою є pine
, наприклад), там він вибирає "Compose", який починається VI, а з VI він запускає будь-яку команду, яку він хоче пройти :!cmd
. Ця команда ніде не реєструється, і з точки зору системи, вона є як і будь-яке допоміжне додаток, викликане VI, як grep або sort. Єдиною командою, зареєстрованою оболонкою, була pine
.
Здається, те, що ви насправді хочете, називається аудитом . Увімкніть підсистему аудиту та використовуйте auditctl
команду та auditd
демон з пакету аудиту для управління тим, що реєструється. Більше інформації можна знайти на сторінці посібника Audctl (8) .
Зауважте, що реєстрація кожної інстанції процесу також може бути не оптимальною. Наприклад, простий ./configure
для програмного пакету (створений за допомогою автоінструментів) примітний для створення тисяч екземплярів процесів. Це заповнить журнал аудиту настільки сильним шумом, що згодом стає дуже важко проаналізувати його.