{"id":555,"date":"2025-07-02T16:52:47","date_gmt":"2025-07-02T09:52:47","guid":{"rendered":"https:\/\/ilmusekawan.web.id\/?p=555"},"modified":"2025-07-02T16:53:10","modified_gmt":"2025-07-02T09:53:10","slug":"zimbra-password-expiry-reminder","status":"publish","type":"post","link":"https:\/\/ilmusekawan.web.id\/index.php\/2025\/07\/02\/zimbra-password-expiry-reminder\/","title":{"rendered":"Zimbra Password Expiry Reminder"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Sebagai seorang email administrator, Anda pasti ingin akun-akun yang Anda kelola senantiasa aman dengan menerapkan fitur password policy dan juga password expiry. Zimbra sudah mendukung kedua fitur tersebut; namun, sayangnya, hingga versi Zimbra saat ini, yaitu v10.1.8, fitur Password Expiry Reminder jika password user akan expired belum tersedia secara resmi. Oleh karena itu, administrator harus mencari cara untuk menghadirkan fitur tersebut di Zimbra mereka.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Salah satu shell script yang banyak digunakan oleh administrator Zimbra untuk mengirim pesan reminder secara otomatis adalah <a href=\"https:\/\/github.com\/wuxmedia\/Zimbra_passpoll\">Zimbra_passpoll<\/a> buatan <a href=\"https:\/\/github.com\/wuxmedia\">Wuxmedia<\/a>. Sayangnya, script ini sudah tidak lagi di-maintain. Walaupun begitu script buatannya masih dapat berjalan dengan &#8220;baik&#8221; hingga di versi Zimbra saat ini.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Personal Opinion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bagi saya script yang hanya dapat berjalan dengan &#8220;baik&#8221; itu tidaklah cukup. Mengingat script ini akan kita atur untuk berjalan secara otomatis setiap harinya. Satu hal yang cukup mengganggu saya dari script tersebut adalah proses eksekusinya memakan waktu yang lama.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Berikut adalah durasi yang dibutuhkan script tersebut untuk menjalankan tugasnya dengan total user sebanyak 16 akun (termasuk akun sistem).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"716\" height=\"361\" src=\"https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-1.png\" alt=\"\" class=\"wp-image-557\" srcset=\"https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-1.png 716w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-1-300x151.png 300w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-1-535x270.png 535w\" sizes=\"auto, (max-width: 716px) 100vw, 716px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Memakan waktu sekitar 5 menit 31 detik. Bayangkan jika jumlah user Zimbra kalian ribuan. Jika kita hitung kasar, untuk memproses 1 akun membutuhkan waktu sekitar 20 detik. Dalam 1 hari ada 86400 detik; 86400 : 20 = 4320. Kesimpulannya, dalam sehari script tersebut hanya mampu memproses sebanyak 4320 akun.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Improving<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Seperti yang terlihat, script tersebut sangat bergantung dengan utilitas <code><strong>zmprov<\/strong><\/code> untuk mendapatkan data user, yang mana utilitas tersebut memang dikenal lambat.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"839\" height=\"350\" src=\"https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-2-1.png\" alt=\"\" class=\"wp-image-559\" srcset=\"https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-2-1.png 839w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-2-1-300x125.png 300w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-2-1-768x320.png 768w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-2-1-535x223.png 535w\" sizes=\"auto, (max-width: 839px) 100vw, 839px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Lantas apakah ada cara lain yang lebih efektif untuk mendapatkan data user? Jawabannya, Ada. Kita gunakan utilitas <code><strong>ldapsearch<\/strong><\/code>. Karena sebetulnya Zimbra menyimpan informasi akun (termasuk konfigurasi) di LDAP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sebagai bukti <code><strong>ldapsearch<\/strong><\/code> dapat berjalan lebih efektif dibandingkan dengan <strong><code>zmprov<\/code><\/strong> untuk mendapatkan list semua akun, kita coba lakukan pengukuran waktu eksekusi untuk keduanya.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"947\" height=\"419\" src=\"https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-3-1.png\" alt=\"\" class=\"wp-image-561\" srcset=\"https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-3-1.png 947w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-3-1-300x133.png 300w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-3-1-768x340.png 768w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-3-1-535x237.png 535w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-3-1-850x376.png 850w\" sizes=\"auto, (max-width: 947px) 100vw, 947px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Berikut hasilnya jika menggunakan utilitas measurement yang proper seperti <code><strong>hyperfine<\/strong><\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"948\" height=\"352\" src=\"https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-4.png\" alt=\"\" class=\"wp-image-562\" srcset=\"https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-4.png 948w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-4-300x111.png 300w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-4-768x285.png 768w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-4-535x199.png 535w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-4-850x316.png 850w\" sizes=\"auto, (max-width: 948px) 100vw, 948px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Terlihat cukup jauh perbedaanya bukan? Eeits.. tapi kita tidak bisa serta-merta mengganti baris code <strong><code>zmprov<\/code><\/strong> dengan <strong><code>ldapsearch<\/code><\/strong> begitu saja. Karena tentu saja algoritmanya pasti juga perlu dirubah.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Satu hal yang jelas perlu kita waspadai adalah <strong><code>ldapsearch<\/code><\/strong> menghasilkan bentuk output yang berbeda dari <strong><code>zmprov<\/code><\/strong>. Belum lagi untuk bisa menjalankan <strong><code>ldapsearch<\/code><\/strong> kita perlu supply <strong>LDAP_URL<\/strong>, <strong>LDAP_USER_DN<\/strong>, dan juga <strong>LDAP_PASSWORD<\/strong>. Perlu ada langkah-langkah tambahan untuk membuat <strong><code>ldapsearch<\/code><\/strong> bisa menghasilkan output yang sama dengan <strong><code>zmprov<\/code><\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Masalah lain yang cukup mengganggu saya dari script tersebut adalah dari list semua akun yang didapat, tidak ada proses filtrasi untuk mengecualikan akun-akun sistem dari list akun yang akan diproses. Misalkan saja Zimbra kalian meng-hosting banyak domain, tentu masing-masing domain akan memiliki akun-akun sistemnya masing-masing (ham, spam, virus-quarantine, galsync). Hal ini mungkin terlihat sepele, namun bisa mencegah proses berjalan dengan sia-sia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Untungnya kita dapat achive hal tersebut dengan menggunakan filter ini &#8216;<em>(&amp;(objectClass=zimbraAccount)(!(zimbraIsSystemResource=TRUE)))<\/em>&#8216; pada <strong><code>ldapsearch<\/code><\/strong>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"948\" height=\"181\" src=\"https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-5-1.png\" alt=\"\" class=\"wp-image-567\" srcset=\"https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-5-1.png 948w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-5-1-300x57.png 300w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-5-1-768x147.png 768w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-5-1-535x102.png 535w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-5-1-850x162.png 850w\" sizes=\"auto, (max-width: 948px) 100vw, 948px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dengan hanya merubah utilitas yang digunakan script tersebut, kita sudah dapat membuat programnya berjalan berkali-kali lipat lebih cepat dibandingkan sebelumnya. Tetapi tentu memang tidak semudah itu untuk meraciknya. Oleh karena itu saya sudah membuat versi yang lebih &#8220;baik&#8221; dari script tersebut, yang dapat berjalan lebih cepat dan lebih optimal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jika kalian tertarik untuk mencobanya, silahkan kalian lihat di repository saya.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/arfanamd\/zscripts\/blob\/master\/zexppass-alert.sh\">https:\/\/github.com\/arfanamd\/zscripts\/blob\/master\/zexppass-alert.sh<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Berikut hasil perhitungan waktu eksekusi dari versi script yang saya buat.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"522\" height=\"202\" src=\"https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-6.png\" alt=\"\" class=\"wp-image-568\" srcset=\"https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-6.png 522w, https:\/\/ilmusekawan.web.id\/wp-content\/uploads\/2025\/07\/zexpiry-6-300x116.png 300w\" sizes=\"auto, (max-width: 522px) 100vw, 522px\" \/><\/figure>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Sebagai seorang email administrator, Anda pasti ingin akun-akun yang Anda kelola senantiasa aman dengan menerapkan fitur password policy dan juga password expiry. Zimbra sudah mendukung kedua fitur tersebut; namun, sayangnya, hingga versi Zimbra saat ini, yaitu v10.1.8, fitur Password Expiry Reminder jika password user akan expired belum tersedia secara resmi&#8230;.<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"telegram_tosend":false,"telegram_tosend_message":"","telegram_tosend_target":0,"footnotes":""},"categories":[12,34,35,4,1,13],"tags":[59,27,33,5],"class_list":["post-555","post","type-post","status-publish","format-standard","hentry","category-linux","category-red-hat","category-rocky","category-tips-trick","category-ubuntu","category-zimbra","tag-bash","tag-script","tag-tips","tag-zimbra"],"_links":{"self":[{"href":"https:\/\/ilmusekawan.web.id\/index.php\/wp-json\/wp\/v2\/posts\/555","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ilmusekawan.web.id\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ilmusekawan.web.id\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ilmusekawan.web.id\/index.php\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/ilmusekawan.web.id\/index.php\/wp-json\/wp\/v2\/comments?post=555"}],"version-history":[{"count":8,"href":"https:\/\/ilmusekawan.web.id\/index.php\/wp-json\/wp\/v2\/posts\/555\/revisions"}],"predecessor-version":[{"id":573,"href":"https:\/\/ilmusekawan.web.id\/index.php\/wp-json\/wp\/v2\/posts\/555\/revisions\/573"}],"wp:attachment":[{"href":"https:\/\/ilmusekawan.web.id\/index.php\/wp-json\/wp\/v2\/media?parent=555"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ilmusekawan.web.id\/index.php\/wp-json\/wp\/v2\/categories?post=555"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ilmusekawan.web.id\/index.php\/wp-json\/wp\/v2\/tags?post=555"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}