Это не то, как вы подходите к проблеме. Как только вы предоставляете доступ к оболочке пользователю, вы поручаете этому пользователю делать все, на что у него есть соответствующие разрешения. Забудьте о регистрации команд, есть слишком много способов выполнить команду в любой системе Unix.
Например, пользователь может запустить почтовый клиент (например, единственная зарегистрированная команда pine
), там он выбирает «Compose», который запускает VI, и из VI он запускает любую команду, через которую хочет :!cmd
. Эта команда нигде не регистрируется, и с точки зрения системы она похожа на любое вспомогательное приложение, вызываемое VI, например, grep или sort. Единственная команда, зарегистрированная оболочкой, была pine
.
Кажется, что вы на самом деле хотите, называется одитингом . Включите подсистему аудита и используйте auditctl
команду и auditd
демон из пакета аудита для управления тем, что регистрируется. Более подробная информация находится на странице руководства audctl (8) .
Обратите внимание, что регистрация каждого экземпляра процесса также может быть неоптимальной. Например, простой ./configure
для пакета программного обеспечения (созданный с помощью автоинструментов) отличается тем, что создает тысячи экземпляров процессов. Это наполнит журнал аудита таким большим шумом, что потом будет очень трудно его анализировать.