Мне нужно проанализировать файлы /etc/passwd из соображений безопасности в поисках просроченных или поддельных учетных записей. После разбора одного примера файла со следующим фильтром:
filter {
grok {
match => {"message" => [ "%{WORD:username}:%{WORD:password}:%{NUMBER:userid}:%{NUMBER:groupid}:%{DATA:useridinfo}:%{DATA:homedir}:%{GREEDYDATA:command-shell}" ]
}
}
mutate {
remove_field => [ "@version", "log", "host", "@timestamp", "event", "message" ]
}
mutate {
gsub => [ "command-shell", "\\r", "" ]
}
}
Вывод правильный, за исключением поля «командная оболочка», в котором есть «\ r» в каждой строке, несмотря на gsub внутри плагина mutate filter.
Пример:
{"useridinfo":"гость","userid":"405","groupid":"100","homedir":"/dev/null","имя пользователя":"гость","пароль":"x ","командная оболочка":"/sbin/nologin\r"}
{"useridinfo":"никто","userid":"65534","groupid":"65534","homedir":"/","имя пользователя":"никто","пароль":"x"," командная оболочка":"/sbin/nologin\r"}
Первоначальные примеры строк были такими:
гость:x:405:100:гость:/dev/null:/sbin/nologin
никто:x:65534:65534:никто:/:/sbin/nologin
Я хочу удалить это \r, и ничего не работает, хотя в Logstash нет ошибки, и все заканчивается нормально.
Не могли бы вы помочь мне удалить это? Я новичок в Logstash, я попробовал DATA вместо GREEDYDATA, но это не сработало в Grok Debugger, поэтому вместо этого я оставил GREEDYDATA, может быть, проблема в этом?
Спасибо.
Обновлено:
**Спасибо за ответ на мой вопрос.
Первый оставляет \r без изменений:
{"homedir":"/","userid":"65534","имя пользователя":"никто","пароль":"x","командная оболочка":"/sbin/nologin\r","groupid ":"65534","useridinfo":"никто"}
Второй вариант дает мне (всегда следуя одному и тому же примеру) следующее:
{"командная оболочка":"/sbin/nologin\r","useridinfo":"никто","groupid":"65534","userid":"65534","пароль":"x","имя пользователя ":"никто","homedir":"/"}
Так что, к сожалению, никаких изменений.
Пожалуйста, сообщите мне, если вам нужна дополнительная информация об этом, мне нужно решить эту проблему, и я не могу найти решение. **
Спасибо, но это тоже не сработало.
По какой-то неизвестной причине это не сработало, теперь это помогло... Спасибо, вы можете закрыть эту тему.
@Badger, @Wiktor Вот так работает фильтр (рабочий): filter { grok { match => {"message" => [ "%{WORD:username}:%{WORD:password}:%{NUMBER:userid}:%{NUMBER:groupid}:%{DATA:useridinfo}:%{DATA:homedir}:%{GREEDYDATA:command-shell}" ] } } mutate { remove_field => [ "@version", "log", "host", "@timestamp", "event", "message" ] } mutate { gsub => [ "command-shell", "\r", "" ] } }
Если ваше поле содержит строку «\ r», вы должны удалить ее, используя
mutate { gsub => [ "message", "\\r", "" ] }
Если, как и в вашем случае, ваше поле содержит символ возврата каретки (Ctrl/M), вы можете удалить его, используя
mutate { gsub => [ "message", "\r", "" ] }
Должно быть
"\r"
, а не"\\r"