Я хочу видеть все команды bash, которые выполнялись на сервере Linux для нескольких учетных записей пользователей. Конкретный дистрибутив, который я использую - это CentOS 5.7. Есть ли способ глобального поиска файлов .bash_history на сервере или это будет более домашний процесс locate | cat | grep
? (Я содрогаюсь, просто печатая это).
источник
getent passwd | cut -d : -f 6 | sed "s:$:/.bash_history:" | xargs -d'\n' -I{} sh -c "[ -f {} ] && echo {}" | xargs -d'\n' grep -Hn -e "$pattern"
{}
такое использование очень опасно. Имя файла интерполируется непосредственно в скрипте. Если у вас есть имя файла (здесь: имя пользователя), содержащее, скажем,$(rm -rf /)
или;rm -rf /;
, команда будет выполнена. Всегда передавайте имена файлов в качестве аргументов в сценарии оболочки, никогда не используйте{}
механизм find или xargs .В качестве альтернативы:
Обратите внимание, что это касается домашних каталогов в местах по умолчанию. Было бы лучше проанализировать
/etc/passwd
или вызватьgetent
и проанализировать вывод этого.источник
Вы могли бы сделать
Но я не думаю, что это намного лучше, чем вы думали.
источник