HEAD
dan masalah yang dikonfirmasi tidak terselesaikan.python3-systemd
default OS dan HEAD
dari ' git repo .Ini adalah perpanjangan dari #2793, tetapi saya tidak dapat menggunakan ruang nama systemd seperti yang disarankan dalam masalah itu. Yaitu, menambahkan _NAMESPACE=whatever
ke filter tidak berfungsi.
Yang terbaik yang bisa saya katakan, ini adalah masalah dengan systemd-python
. Dalam mempersempit masalah setelah menambahkan ke journalmatch
tidak berhasil, saya menjalankan yang berikut:
from systemd import journal
j = journal.Reader()
j.this_boot()
j.add_match(_SYSTEMD_UNIT="ssh.service", _NAMESPACE='auth')
for entry in j:
print(str(j))
Itu tidak menghasilkan output, sedangkan saya pasti memiliki ratusan pesan.
Rupanya, fitur ini baru tersedia beberapa bulan dalam perubahan terbaru pada paket systemd-python
.
Menginstal kode terbaru itu dan kemudian menjalankan:
from systemd import journal
j = journal.Reader(namespace='auth')
j.this_boot()
j.add_match(_SYSTEMD_UNIT="ssh.service")
for entry in j:
print(str(j))
Saya bisa melihatnya bekerja dengan sempurna.
Melihat ini lebih jauh, tampaknya solusinya harus sesederhana menambahkan backend = systemd[namespace="auth"]
ke konfigurasi.
Namun, satu-satunya hal yang mencegahnya adalah metode FilterSystemd._getJournalArgs
saat ini tidak mengenali/mengekstrak argumen ini. Jika demikian, secara teori , semuanya akan berhasil.
fail2ban akan membuat journal.Reader
di sini dengan parameter namespace
yang diteruskan dalam dict jrnlargs
.
namespace
parameter tidak diekstraksi oleh FilterSystemd._getJournalArgs
dan dengan demikian tidak diteruskan ke konstruktor untuk journal.Reader
. Alih-alih itu diteruskan ke konstruktor superclass' ( JournalFilter
), menghasilkan kesalahan:
2021-01-14 23:53:17,049 fail2ban [3600053]: ERROR NOK: ("__init__() got an unexpected keyword argument 'namespace'",)
Dalam filters.d/sshd-custom.conf
:
[INCLUDES]
before = sshd.conf
[Definition]
logtype = journal
journalmatch = _SYSTEMD_UNIT=ssh.service + _COMM=sshd
Dalam jails.d/ssh.conf
:
[sshd]
enabled = true
filter = sshd-custom
backend = systemd[namespace="auth"]
Lihat di atas
T/A
salah (tidak tepat sasaran), disimpan untuk catatan...
backend = systemd[namespace="auth"]
Nah, ini bukan parameter backend systemd (lihat #1523 untuk opsi yang memungkinkan), melainkan filternya.
Singkatnya: argumen backend adalah opsi yang diberikan ke konstruktor jurnal, parameter journalmatch
filter berisi ekspresi untuk kecocokan.
Untuk menambahkannya di filter, Anda harus melakukannya seperti yang dijelaskan di https://github.com/fail2ban/fail2ban/issues/2793#issuecomment -667551919 atau bahkan coba ini (tanpa menimpanya sepenuhnya, melainkan untuk memperpanjang parameter saat ini journalmatch
ditentukan dalam sshd-filter), baik dalam jail.local
:
[sshd]
filter = sshd[journalmatch="<known/journalmatch> + _NAMESPACE=auth"]
atau Anda dapat menulis ulang/memperpanjangnya di filter.d/sshd.local
:
[Definition]
journalmatch = <known/journalmatch> + _NAMESPACE=auth
jadi Anda tidak benar-benar membutuhkan filters.d/sshd-custom.conf
Anda, dalam file *.local
Anda dapat menimpa setiap nilai yang mungkin Anda perlukan.
Nah, ini bukan parameter backend systemd (lihat #1523 untuk opsi yang memungkinkan), melainkan filternya.
Singkatnya: argumen backend adalah opsi yang diberikan ke konstruktor jurnal, parameterjournalmatch
filter berisi ekspresi untuk kecocokan.
Saya tahu ini bukan parameter untuk backend, maksud saya adalah bahwa itu perlu.
Pustaka python-systemd
yang mendasarinya tidak berfungsi dengan filter yang berisi + _NAMESPACE=whatever
digunakan. (Saya belum melihat mengapa hal ini terjadi, tetapi saya mendemonstrasikannya di atas.) Sebagai gantinya, menentukan namespace membutuhkan namespace
untuk diberikan kepada konstruktor journal.Reader
.
Cara yang jelas (dan sangat sederhana) untuk menyelesaikannya adalah dengan menambahkan beberapa baris ke metode FilterSystemd._getJournalArgs
untuk mengekstrak opsi untuk args konstruktor jurnal.
Maaf, Anda salah paham.
Cara yang jelas (dan sangat sederhana) untuk menyelesaikannya adalah dengan menambahkan beberapa baris ke metode FilterSystemd._getJournalArgs untuk mengekstrak opsi untuk args konstruktor jurnal.
Tentu, dan karena implementasinya akan kompatibel ke belakang, itu cukup sederhana...
Harus diperbaiki di 164105fab12a8d97050eb1930cbc338b66d6e8eb sekarang untuk 0,10 cabang.
Saya akan menggabungkannya nanti di 0.11 dan 1.0.
Terima kasih!
Jangan ragu untuk ping saya jika saya melewatkan sesuatu.
Itu sangat cepat. Terima kasih! (Akan memberi tahu Anda jika ada masalah, tetapi ini adalah perbaikan sederhana yang tidak dapat saya bayangkan caranya.)
@sebres , sebenarnya hanya memikirkan hal-hal yang _mungkin_ ingin Anda tambahkan (tapi saya serahkan sepenuhnya kepada Anda):
python-systemd
terlalu tua untuk mendukung argumen namespace
dan diberikan._NAMESPACE
ada dalam jurnal yang cocok, karena dalam melihat python-systemd
, sepertinya masalah yang mendasarinya adalah -- jika namespace akan difilter -- jurnal harus dibuka dengan namespace yang diberikan, artinya _NAMESPACE tidak akan pernah berfungsi.sd_journal_open_namespace
(yang dibuat oleh pythond-systemd
) dapat diberi flag SD_JOURNAL_ALL_NAMESPACES
(melalui argumen flags) , yang kemudian akan membaca entri jurnal namespaces, yang kemudian secara teoritis memungkinkan filter _NAMESPACE
. Jadi, Anda dapat memilih untuk mengaktifkan flag SD_JOURNAL_ALL_NAMESPACES
secara default (atau setidaknya mengeksposnya sebagai opsi yang jelas). Ini juga akan membuat filtermatch
lebih intuitif (karena namespace tidak harus disetel secara berbeda) serta memungkinkan filter yang lebih kompleks yang tidak terlihat hanya dalam satu namespace.Bagaimanapun, bisakah Anda memperbaiki label pada masalah ini? Ini mungkin membuatnya lebih mudah untuk ditemukan. (Saya tahu saya pribadi akan lebih mungkin untuk melewatkan masalah apa pun yang ditandai closed-as-incorrect
jika saya mencari untuk melihat apakah ada orang lain yang memiliki masalah saya.)
Terima kasih lagi!
Jadi, Anda dapat memilih untuk mengaktifkan flag SD_JOURNAL_ALL_NAMESPACES secara default (atau setidaknya mengeksposnya sebagai opsi yang jelas).
Yah, saya akan berhati-hati dengan tanda seperti itu, terutama secara default (terlalu sering terlihat masalah seperti kesalahan "terlalu banyak file terbuka", jadi misalnya #2444 melakukannya lebih ketat (saya masih tidak dalam mode untuk melonggarkannya) .
Untuk dokumennya masih harus diperpanjang ya...