Byla vydána nová stabilní verze 3.24.0, tj. první z nové řady 3.24, minimalistické linuxové distribuce zaměřené na bezpečnost Alpine Linux (Wikipedie) postavené na standardní knihovně jazyka C musl libc a BusyBoxu. Přehled novinek v poznámkách k vydání.
Na čem pracují vývojáři v Rustu napsaného mikrokernelového unixového operačního systému Redox OS (Wikipedie)? Byl publikován přehled vývoje za květen. Vypíchnout lze nový scheduler EEVDF nebo port desktopového prostředí Xfce na Redox OS.
Upozornění pro uživatele Asahi Linuxu: Neaktualizujte macOS na verzi 27 Golden Gate! Apple změnil detekci spouštěcích oddílů. Po aktualizaci oddíl s Asahi Linuxem nevidí. Snad je to jenom chyba.
Na webu konference Den IPv6, která se konala 4. června v Národní technické knihovně v pražských Dejvicích, jsou nyní k dispozici všechny prezentace (v PDF) a jejich videozáznamy. Organizátory konference byly i letos sdružení CESNET, CZ.NIC a NIX.CZ.
Byla vydána nová verze 9.1.0 správce sbírky fotografií digiKam (Wikipedie). Přehled novinek i s náhledy v oficiálním oznámení (NEWS). Vypíchnout lze vylepšené vyhledávání nebo podporu Pixel Motion Photos. Nejnovější digiKam je ke stažení také jako balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo ke spuštění a spustit.
Přihlaste svou přednášku na další ročník konference LinuxDays, který proběhne 3. a 4. října na FIT ČVUT v pražských Dejvicích. Příjem témat poběží do konce prázdnin, pak proběhne veřejné hlasování a následně sestavení programu.
Byla vydána nová verze 2.4.68 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 13 zranitelností.
Apple na své vývojářské konferenci WWDC26 (Worldwide Developers Conference, keynote) představil řadu novinek. Vypíchnout lze novou generaci Apple Intelligence a zbrusu novou Siri, která dostala název Siri AI. Kvůli Aktu o digitálních trzích (DMA) však funkce Siri AI nebudou v systémech iOS 27 a iPadOS 27 k dispozici uživatelům v Evropské unii.
Byla vydána nová verze 1.18.0 distribučního frameworku Flatpak (Wikipedie), tj. technologie umožňující distribuovat aplikace v podobě jednoho instalačního souboru na různé linuxové distribuce a jejich různá vydání. Přehled novinek na GitHubu. Vypíchnout lze podporu rozhraní /dev/kfd pro výpočty na kartách AMD (AMDKFD).
aMule (Wikipedie), tj. multiplatformní klient pro peer-to-peer sdílení souborů pro sítě eD2k and Kademlia, byl po více než pěti letech od vydání poslední verze 2.3.3, vydán v nové major verzi 3.0.0 (GitHub). S novou webovou stránkou a dokumentací.
Zbývá vyřešit ještě poslední část celého systému Sieve. Uživatel si chce nastavovat pravidla z klienta. Aby tak mohl činit, musí na serveru běžet již zmíněná služba ManageSieve. Následující popis je určen pro řešení pomocí pysieved, nicméně úprava pro nativní Dovecot ManageSieve (samozřejmě po vlastní instalaci) není těžká a potřebné informace jsou k dispozici v dokumentaci programu Dovecot.
Zprovoznění opět začíná instalací, ať už z distribučního balíčku nebo od autora. Pak je potřeba pysieved nakonfigurovat. Ještě dříve je ovšem nutno si ujasnit, zda má běžet jako standardní démon (tedy naslouchat na portu a přímo obsluhovat připojené klienty), anebo zda se bude spouštět pomocí superserveru, typicky inetd nebo xinetd. Toto rozhodnutí bude vycházet z toho, jak často budou uživatelé měnit svá pravidla. Většinou bude k takovým změnám docházet zřídka, proto je obvykle lepší šetřit paměť a využít superserver.
Následující konfigurační soubor je určen pro xinetd a může být uložen například jako /etc/xinetd.d/sieve (za předpokladu, že se soubory jednotlivých služeb načítají z adresáře /etc/xinetd.d). Zde je pysieved nainstalován pod /opt, jde o balík získaný z webu autora.
service sieve
{
id = sieve
type = UNLISTED
port = 2000
flags = KEEPALIVE
socket_type = stream
wait = no
server = /usr/bin/python
server_args = /opt/pysieved/pysieved.py --inetd --config=/etc/pysieved.ini
user = root
}
Typ služby je UNLISTED (nejedná se o žádnou ze specifických služeb), služba ManageSieve běží na portu 2000. KEEPALIVE říká, že se mají periodicky posílat pakety pro udržování spojení (vhodné hlavně proto, aby nezůstávaly zbytečně viset spuštěné instance pro klienty, se kterými už nelze komunikovat). Komunikace je streamová (tj. TCP), wait = no zakáže čekání na ukončení spuštěného programu (takže lze obsluhovat další klienty). Jako „server“ je zde uveden interpret jazyka Python, argumenty udávají cestu k implementaci démona a ke konfiguračnímu souboru; nezbytný je také parametr zapínající spolupráci se superserverem. Uživatel bude root, protože konkrétního uživatele pro práci si nastaví až pysieved.
Pro starší superserver inetd bude konfigurace vypadat podobně, jen bude mít jiný formát. Do konfiguračního souboru inetd (typicky /etc/inetd.conf) se přidá takovýto řádek:
sieve stream tcp nowait root /usr/bin/python python /opt/pysieved/pysieved.py --inetd --config=/etc/pysieved.ini
Nyní to tedy bude fungovat tak, že pokud se klient připojí na port 2000, superserver spustí instanci pysieved a předá jí komunikační kanál s klientem. Tím se to dostává do podobné situace, jako kdyby se klient připojil k trvale běžícímu démonu pysieved. Dále tedy už záleží na jeho konfiguraci. Ve výše uvedené konfiguraci xinetd je definováno, že se konfigurace pysieved bude načítat ze souboru /etc/pysieved.ini – ten může vypadat například takto:
[main] auth = Dovecot userdb = Dovecot storage = Dovecot pidfile = /var/run/pysieved.pid [Dovecot] mux = /var/spool/postfix/private/auth master = /var/run/dovecot/auth-master sievec = /usr/libexec/dovecot/sievec scripts = .pysieved active = script.sieve uid = 100 gid = 100
Konfigurační soubor má různé sekce. Zde jsou použity dvě – hlavní sekce main a sekce Dovecot pro konfiguraci programu Dovecot, jakožto služby využívané pro zajišťování různých činností. pysieved podporuje celou řadu jiných služeb (backendů), např. dokáže přímo pracovat s PAM nebo s databází MySQL, není závislý na jediném programu.
V tomto případě se pro autentizaci (auth, databázi uživatelů (userdb) a úložiště (storage) využívá Dovecot, proto je u všech služeb uveden. pidfile je obvyklý soubor s PID sloužící ke zjištění, zda je již program spuštěn a jaký má identifikátor.
Sekce Dovecot obsahuje cesty ke speciálním souborům pro autentizaci (mux) a přístup k databázi uživatelů (master). Nastaví se samozřejmě podle toho, jak je to nastaveno v konfiguračním souboru /etc/dovecot.conf. Parametr sievec je cesta ke kompilátoru pravidel Sieve – pravidla se totiž nepoužívají v původní textové podobě, nýbrž se kompilují do mezijazyka (bytecode). Plugin Sieve do Dovecot LDA si kompilaci po změně zdrojového souboru zavolá sám, nicméně využití kompilátoru v ManageSieve je výhodné pro dálkové ověření, zda jsou pravidla syntakticky správná (viz dále).
Další parametr je scripts. To je adresář (v rámci domovského adresáře uživatele pošty), do kterého se ukládají jednotlivé soubory s pravidly. Aktivní je však vždy nejvýše jeden soubor – na něj se v domovském adresáři vytvoří symbolický odkaz s názvem podle parametru active (je to přesně ta cesta, která vzniká zpracováním šablony uvedené v parametru sieve sekce plugin v konfiguračním souboru dovecot.conf). Parametry uid a gid jsou identifikátor uživatele, resp. skupiny, pro běh démona (bude stejný jako uživatel pro úložiště pošty).
Takto nakonfigurovaný pysieved bude dělat přesně to, co se od něj čeká. Podle požadavků připojeného klienta bude spravovat soubory s pravidly a aktivovat/deaktivovat je. Klient se samozřejmě musí autentizovat, a to úplně stejně jako pro práci s poštou. Jak bylo řečeno výše, o toto se postará Dovecot.
K využití správy pravidel Sieve je potřeba mít klienta, který podporuje protokol ManageSieve. Takovými klienty jsou například Mulberry, Mozilla Thunderbird (s doplňkem Sieve) nebo webmail RoundCube. Mulberry nabízí relativně jednoduchou správu (bohužel však jeho vývoj skomírá), Thunderbird má podporu pouze pro přímou editaci kódu pravidel (ovšem s možností okamžité kontroly pomocí již zmíněného kompilátoru sievec a se zabudovanou referenční příručkou), RoundCube obsahuje snadno ovladatelnou „klikací“ správu pravidel (která však využívá jen malou část možností Sieve). Lze očekávat, že se v blízké budoucnosti dočkáme většího počtu klientských implementací (ovšem již dnes jich není zase až tak málo).
Kdo využije Thunderbird s doplňkem Sieve, bude normálně psát pravidla v té podobě, jak se objevila v příkladech v tomto článku. Která všechna rozšíření Sieve jsou k dispozici, lze najít například v tabulce na webu programu Dovecot.
Zmínku si zaslouží také globální soubor s pravidly. Ten je typicky normální soubor, který upravuje správce serveru. Nic však nebrání tomu, aby si správce vytvořil speciální poštovní účet, v uživatelsky přívětivém klientském programu si běžným způsobem připravoval pravidla pro globální použití a pak příslušný soubor použil jako globální (buď nastavením přímé cesty nebo přes symbolický odkaz, což je asi vhodnější).
Příští díl seriálu se bude zabývat dalším zajímavým zásuvným modulem do Dovecot LDA. Bude to modul implementující přístupové seznamy. K čemu je to dobré? Uživatelé mohou různě sdílet některé své složky a nastavovat k nim přístupová práva jiným uživatelům. Zejména ve firmách je to možnost, jak si při týmové práci udržet pořádek v poště a jak zajistit, aby měli všichni k dispozici ty funkce, které potřebují.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
sieve_before a sieve_after, které umožňují definovat další Sieve skripty (nebo celé adresáře se skripty). Pravidla v sieve_before se zpracují před uživatelskými pravidly, sieve_after po nich (ale jen v případě, že zpráva zůstává ve zpracování). Takže pokud už se má nějaké zpracování vynucovat všem uživatelům (i když to obecně nevidím jako přínosné), lze to využít. Všechny tyto skripty (stejně jako skript s globálními pravidly) se musí předem kompilovat pomocí sievec.
Vy sieve_before a sieve_after pouzivate uspesne?Nepoužívám vůbec. Zatím jsem neměl takovou potřebu a obecně mě nenapadá příliš případů, kdy to má smysl (proto jsem to ani neuvedl v článku). Nicméně to mohu příležitostně vyzkoušet.
sieve_before a funguje bez problémů.
Shodou okolností jsem asi před měsícem instaloval další mailserver a tam jsem ho už nahodil, funguje dobře, akorát jsem musel kompilovat balíček, protože v distribuci se s ním zatím nepočítá
...
xfilter "/usr/sbin/spamc"
...
if (/^X-Spam-Status: *Yes/)
{
exception {
to ...
}
}
...
require ["fileinfo", "copy"];
if header :contains "X-Spam-Status" "Yes"
{
setflag "$Junk";
fileinto ".Spam";
stop;
}
else
{
"fileinto" :copy folder: "/home/backup/%d/%n";
Nicmene mi to nefunguje. Domnival jsem se, ze misto %d se doplni domena.tld a misto %n username. Existuje nejaky elegantni a funkcni zpusob, jak dostat z hlavicky uzivatele a domenu (treba i nejak parsovat To:)...?
if, to else už je zbytečné. Mimochodem zbytečný je i příkaz stop, protože akce fileinto ruší implicitní keep (viz RFC 5228, bod 2.10.2) a žádný jiný důvod k uvedení zde není.
Není to myšleno jako zálohování (když tam vidím to backup)? Pokud ano, tak mi to nepřijde jako příliš smysluplné řešení, spíš jako takové "velkobratrské" (ukládá se všechno, nezálohuje se stav ke konkrétnímu okamžiku).
editheader podle RFC 5293, bylo by to velmi jednoduché - stačilo by podle obálkového příjemce vytvořit novou hlavičku (např. X-Original-Recipient), pak to přeposlat na speciálního uživatele (třeba velkybratr@moje.domena), u něj pak tuto hlavičku rozežírat a zprávy správně třídit. Jenže protože zatím toto rozšíření podporováno není, nelze takové řešení použít.
Možná by se ale dala rozežírat hlavička Delivered-To, protože je možné (ale to právě nevím), že se přidává do zprávy až na konci zpracování LDA. Chtělo by to prověřit, zda tam po přeposlání kopie nejsou ty hlavičky dvě. Pokud je tam opravdu jen ta první, je vyhráno - stačí hlavičku pomocí :domain a :localpart rozežrat do proměnných a podle nich pak uložit zprávu do správné složky.
require ["fileinfo", "copy", "envelope"];
if header :contains "X-Spam-Status" "Yes"
{
setflag "$Junk";
fileinto ".Spam";
stop;
}
else
{
"fileinto" :copy folder: "/home/backup/:domain/:localpart";
}
require ["fileinto", "copy", "envelope", "variables"];
...
if allof(envelope :domain :matches "to" "*", envelope :localpart :matches "to" "*") {
fileinto :copy "/home/backup/${1}/${2}";
}
Je to jen hrubý nástřel. Dělá to to, že se vyhodnocují obě části adresy obálkového příjemce, dají se do proměnných a tyto proměnné se pak použijí. Jenže zásadní problém bude v tom, že asi nebude možné použít absolutní cestu k poštovní složce (nezkoušel jsem, v dokumentaci o tom nic není, nicméně velmi pochybuji).
To:, která nemusí odpovídat skutečnosti. Hlavičku Delivered-To: jsem teď zkusil, ale tu použít nelze, protože se tam vloží ve druhém exempláři při doručování po přeposlání.
To ale stale neresi situaci, kdy potrebuji mit kopie ne v Maildiru urciteho uzivatele, ale v uplne jine cesteTo je velmi snadno řešitelné tím, že se ten Maildir umístí na tu správnou cestu.
Jeste mne teda napada vlozit pred frontu (v master.cf) skript, ktery by udelal kopii, respektive nakopiroval email do zaloh a zpravu poslal zpet do fronty postfixu kde ji prevezme deliver. Tohle asi neni uplne nejsistci reseni.Pak existují ještě jiná řešení. Tak například využít incron, pokud by už uměl rekurzivně sledovat celé podstromy filesystému (ššššššššš - to se snáší popel na moji hlavu
). Nebo použít jiné programy, které už to umějí, např. inotify-tools. Pak stačí jen chytat událost IN_MOVED_TO, testovat, zda šlo o přesun z adresáře tmp do new v rámci inboxu (protože to je operace, kterou je završeno doručení zprávy) a pak už jen kopírovat příslušné zprávy.
zda šlo o přesun z adresáře tmp do new v rámci inboxuResp. spíš nejen v rámci inboxu, ale ve všech poštovních složkách kromě spamové.