Zimbra’da Kullanıcı Hesabı Oluşturma ve Yönetimi
Zimbra kurulumu tamamlandı, mail akıyor, DNS kayıtları yerinde. Peki ya kullanıcılar? Onlarca, belki yüzlerce hesabı nasıl yöneteceksiniz? Web arayüzünden tek tek mi tıklayacaksınız? Hayır. Bu yazıda hem GUI’den hem de komut satırından kullanıcı yönetimini, toplu işlemleri ve gerçek hayatta sık karşılaşılan senaryoları ele alacağız.
Zimbra Kullanıcı Yönetimine Giriş
Zimbra’da kullanıcı yönetimi iki temel katmanda gerçekleşir: Admin Console (web tabanlı yönetim paneli) ve zmprov (komut satırı aracı). Küçük ortamlarda Admin Console yeterli olsa da, 50+ kullanıcılı ortamlarda veya otomasyon gerektiren durumlarda zmprov kaçınılmaz hale gelir.
Zimbra’nın kullanıcı modeli şu kavramlar üzerine kuruludur:
- Account: Bir e-posta hesabı, aynı zamanda bir mailbox
- Alias: Bir hesaba yönlendirilen alternatif adresler
- Distribution List: Birden fazla hesabı kapsayan dağıtım listesi
- Domain: Hesapların bağlı olduğu e-posta alan adı
- CoS (Class of Service): Hesap politikalarını belirleyen şablon yapısı
Bu kavramları aklınızda tutun, çünkü her şey bunların üzerine inşa ediliyor.
zmprov ile Temel Kullanıcı İşlemleri
zmprov komutunu her zaman zimbra kullanıcısıyla çalıştırmalısınız. Root olarak çalışıyorsanız önce şu komutu verin:
su - zimbra
Artık zmprov komutlarını doğrudan çalıştırabilirsiniz.
Yeni Kullanıcı Oluşturma
En temel kullanıcı oluşturma komutu:
zmprov createAccount [email protected] 'GucluSifre123!'
displayName "Ahmet Yılmaz"
givenName "Ahmet"
sn "Yılmaz"
title "Yazılım Geliştirici"
telephoneNumber "+90 212 555 0001"
zimbraMailQuota 2147483648
Burada zimbraMailQuota değeri byte cinsinden. 2147483648 byte = 2 GB anlamına geliyor. Sık kullandığım değerler:
- 524288000: 500 MB
- 1073741824: 1 GB
- 2147483648: 2 GB
- 5368709120: 5 GB
- 0: Limitsiz (dikkatli kullanın)
Kullanıcının oluşturulup oluşturulmadığını doğrulamak için:
zmprov getAccount [email protected]
Bu komut hesaba ait tüm attribute’ları döker. Uzun bir çıktı alırsınız, belirli bir attribute’a bakmak için grep ile süzebilirsiniz:
zmprov getAccount [email protected] | grep -E "zimbraMailQuota|zimbraAccountStatus|mail:"
Kullanıcı Bilgilerini Güncelleme
Mevcut bir kullanıcının bilgilerini güncellemek için modifyAccount kullanılır:
zmprov modifyAccount [email protected]
displayName "Ahmet Yılmaz (Kıdemli)"
title "Kıdemli Yazılım Geliştirici"
zimbraMailQuota 5368709120
Şifre değiştirme işlemi ise ayrı bir komutla yapılır:
zmprov setPassword [email protected] 'YeniGucluSifre456!'
Hesap Durumu Yönetimi
Bir kullanıcıyı geçici olarak devre dışı bırakmak gerektiğinde (işten ayrılan personel, izin dönemi vb.) hesabı silmek yerine kapatmak daha sağlıklıdır:
# Hesabı kapat
zmprov modifyAccount [email protected] zimbraAccountStatus locked
# Hesabı tekrar aç
zmprov modifyAccount [email protected] zimbraAccountStatus active
zimbraAccountStatus için kullanılabilir değerler:
- active: Hesap aktif ve kullanılabilir
- locked: Kullanıcı giriş yapamaz, posta alımı devam eder
- closed: Hem giriş hem posta alımı durur
- lockout: Başarısız giriş denemelerinden sonra sistem tarafından set edilir
- pending: Hesap henüz aktif değil
Dikkat edin: locked ile closed arasındaki fark kritik. Birisi izne çıktığında locked yapabilirsiniz, gelen postalar yine mailbox’a düşer. closed yaparsanız gönderenler bounce alır.
Alias Yönetimi
Alias’lar, bir hesaba birden fazla e-posta adresi tanımlamanızı sağlar. Örneğin [email protected] hesabına [email protected] ve [email protected] alias’ları ekleyebilirsiniz:
# Alias ekle
zmprov addAccountAlias [email protected] [email protected]
zmprov addAccountAlias [email protected] [email protected]
# Alias'ları listele
zmprov getAccount [email protected] | grep zimbraMailAlias
# Alias kaldır
zmprov removeAccountAlias [email protected] [email protected]
Gerçek hayatta sık karşılaştığım senaryo: Şirkette iki farklı domain var (sirketim.com ve sirketim.com.tr) ve her kullanıcının her iki domain’den de posta alması gerekiyor. Bu durumda her kullanıcıya ikinci domain için alias eklemek gerekiyor. Bunu elle yapmak yerine script ile halledebilirsiniz.
Toplu Kullanıcı Oluşturma
Gerçekçi senaryo: Şirkette yeni bir departman kuruldu, 20 kişi aynı anda sisteme eklenmesi gerekiyor. HR’dan Excel dosyası geldi, onu CSV’ye çevirdiniz. İşte böyle bir durumda ne yapacaksınız?
Önce CSV dosyanızı hazırlayın (kullanicilar.csv):
ahmet.yilmaz,Ahmet,Yılmaz,Yazılım Geliştirici,2147483648
fatma.kaya,Fatma,Kaya,Proje Yöneticisi,2147483648
mehmet.demir,Mehmet,Demir,Sistem Analisti,1073741824
Ardından bu script’i çalıştırın:
#!/bin/bash
# Zimbra toplu kullanıcı oluşturma scripti
# zimbra kullanıcısıyla çalıştırın
DOMAIN="sirketim.com"
DEFAULT_PASS="Gecici2024!"
CSV_FILE="kullanicilar.csv"
LOG_FILE="/tmp/zimbra_create_$(date +%Y%m%d_%H%M%S).log"
echo "Toplu kullanıcı oluşturma başlıyor: $(date)" | tee $LOG_FILE
while IFS=',' read -r username firstname lastname title quota; do
EMAIL="${username}@${DOMAIN}"
# Kullanıcı zaten var mı kontrol et
if zmprov getAccount $EMAIL > /dev/null 2>&1; then
echo "[ATLANDI] $EMAIL zaten mevcut" | tee -a $LOG_FILE
continue
fi
# Kullanıcı oluştur
if zmprov createAccount $EMAIL "$DEFAULT_PASS"
displayName "$firstname $lastname"
givenName "$firstname"
sn "$lastname"
title "$title"
zimbraMailQuota $quota
zimbraPasswordMustChange TRUE > /dev/null 2>&1; then
echo "[OK] $EMAIL oluşturuldu" | tee -a $LOG_FILE
else
echo "[HATA] $EMAIL oluşturulamadı" | tee -a $LOG_FILE
fi
done < $CSV_FILE
echo "İşlem tamamlandı: $(date)" | tee -a $LOG_FILE
echo "Log dosyası: $LOG_FILE"
zimbraPasswordMustChange TRUE parametresi sayesinde kullanıcı ilk girişte şifresini değiştirmek zorunda kalır. Güvenlik açısından mutlaka kullanmanızı öneririm.
Class of Service (CoS) Kullanımı
CoS, hesap politikalarını merkezi olarak yönetmenin en doğru yolu. Her kullanıcıya ayrı ayrı kota, özellik kısıtlaması vs. yazmak yerine bir CoS oluşturup kullanıcılara atarsınız.
Mevcut CoS’ları listeleyin:
zmprov getAllCos
Yeni bir CoS oluşturmak için Admin Console’u kullanmanızı öneririm (daha görsel), ama komut satırından da yapılabilir:
# Önce mevcut default CoS'un ID'sini öğren
zmprov getCos default | grep zimbraId
# Yeni CoS oluştur
zmprov createCos "standart_kullanici"
# CoS'u yapılandır
zmprov modifyCos "standart_kullanici"
zimbraMailQuota 2147483648
zimbraFeatureCalendarEnabled TRUE
zimbraFeatureContactsEnabled TRUE
zimbraFeatureTasksEnabled TRUE
zimbraFeatureIMEnabled FALSE
zimbraAttachmentsBlocked FALSE
zimbraPasswordMinLength 8
zimbraPasswordMinUpperCaseChars 1
# Kullanıcıya CoS ata
zmprov modifyAccount [email protected] zimbraCOSId
$(zmprov getCos standart_kullanici | grep zimbraId | awk '{print $2}')
Pratikte genellikle şu CoS yapısını kullanıyorum: bir yonetici CoS (geniş kota, tüm özellikler açık), bir standart CoS (2-5 GB kota, temel özellikler), bir de misafir CoS (500 MB kota, kısıtlı özellikler). Bu üçlü yapı çoğu kurumsal ortam için yeterli oluyor.
Dağıtım Listesi Yönetimi
Departman bazlı e-posta grupları oluşturmak için dağıtım listelerini kullanırsınız:
# Dağıtım listesi oluştur
zmprov createDistributionList [email protected]
displayName "Yazılım Ekibi"
zimbraMailStatus enabled
# Üye ekle
zmprov addDistributionListMember [email protected]
[email protected]
[email protected]
[email protected]
# Üyeleri listele
zmprov getDistributionListMembership [email protected]
# Üye kaldır
zmprov removeDistributionListMember [email protected] [email protected]
# Dağıtım listesini sil
zmprov deleteDistributionList [email protected]
Bir kullanıcının üyesi olduğu tüm dağıtım listelerini görmek için:
zmprov getAccountMembership [email protected]
Bu komutu özellikle bir kullanıcıyı silmeden önce çalıştırın. Hangi gruplarda olduğunu görürsünüz, silinince o gruplarda boşluk kalır, bilmeniz lazım.
Kullanıcı Silme ve Yedekleme
Bir kullanıcıyı silmeden önce mailbox’ını dışa aktarmanızı kesinlikle öneririm. Özellikle kurumsal ortamlarda “eski çalışanın postalarına ihtiyacımız var” durumunu çok yaşadım.
# Önce mailbox'ı dışa aktar (zimbra kullanıcısıyla)
zmmailbox -z -m [email protected] getRestURL
"//?fmt=tgz" > /backup/ahmet.yilmaz_$(date +%Y%m%d).tgz
# Sonra hesabı sil
zmprov deleteAccount [email protected]
Alternatif olarak hesabı silmek yerine kapatıp belli süre saklayabilirsiniz:
zmprov modifyAccount [email protected]
zimbraAccountStatus closed
description "Ayrılan personel - 2024-01-15"
Kullanıcı Listesi ve Raporlama
Tüm aktif kullanıcıları listelemek için:
# Tüm hesapları listele
zmprov -l getAllAccounts sirketim.com
# Sadece aktif hesaplar
zmprov -l getAllAccounts sirketim.com | xargs -I{} zmprov getAccount {}
| grep -E "^name:|zimbraAccountStatus:"
| paste - -
| grep "active"
# Kota kullanımını görüntüle
zmprov -l getAllAccounts sirketim.com | while read account; do
quota=$(zmprov getAccount $account zimbraMailQuota | awk '{print $2}')
echo "$account: $quota bytes"
done
Daha pratik bir rapor almak istiyorsanız şu script işinize yarar:
#!/bin/bash
# Zimbra hesap durum raporu
DOMAIN="sirketim.com"
echo "E-posta,Ad Soyad,Durum,Kota(GB)"
zmprov -l getAllAccounts $DOMAIN | while read account; do
# Admin ve sistem hesaplarını atla
[[ "$account" == *"admin"* ]] && continue
[[ "$account" == *"spam"* ]] && continue
[[ "$account" == *"virus"* ]] && continue
display=$(zmprov getAccount $account displayName 2>/dev/null | awk '{print $2}')
status=$(zmprov getAccount $account zimbraAccountStatus 2>/dev/null | awk '{print $2}')
quota=$(zmprov getAccount $account zimbraMailQuota 2>/dev/null | awk '{print $2}')
quota_gb=$(echo "scale=2; $quota/1073741824" | bc 2>/dev/null || echo "0")
echo "$account,$display,$status,${quota_gb}GB"
done
Sık Karşılaşılan Sorunlar
Kullanıcı giriş yapamıyor ama hesap aktif görünüyor: Önce şunu kontrol edin:
zmprov getAccount [email protected] | grep -E "zimbraAccountStatus|zimbraPasswordLocked|zimbraAuthTokenLifetime"
Çoğu zaman zimbraPasswordLocked değeri TRUE çıkar. Bunu çözmek için:
zmprov modifyAccount [email protected] zimbraPasswordLocked FALSE
Kullanıcı kota doldu uyarısı alıyor ama dolmadı: Kota attribute’u ile gerçek kullanım arasında bazen uçurum olabiliyor. Gerçek kullanımı görmek için:
zmmailbox -z -m [email protected] getMailboxSize
Toplu şifre sıfırlama gerekti: Güvenlik ihlali veya politika değişikliği durumunda tüm kullanıcıların şifrelerini sıfırlatmak gerekebilir:
zmprov -l getAllAccounts sirketim.com | while read account; do
[[ "$account" == *"admin"* ]] && continue
zmprov modifyAccount $account zimbraPasswordMustChange TRUE
echo "$account: şifre değiştirme zorunlu yapıldı"
done
Sonuç
Zimbra kullanıcı yönetimi, ilk bakışta karmaşık görünse de mantığını bir kez kavradıktan sonra oldukça sistematik bir hal alıyor. zmprov aracını etkin kullanmak, özellikle büyük ortamlarda onlarca saat kurtarıyor. Şu noktalara dikkat edin:
- Kullanıcı silmeden önce mutlaka mailbox yedeği alın
- CoS yapısını baştan planlayın, sonradan düzeltmek can sıkıcı oluyor
- Toplu işlemleri önce test ortamında deneyin
- Her önemli işlemi loglayın, ileride “kim ne zaman ekledi” sorusu mutlaka çıkacak
lockedvecloseddurumlarının farkını asla karıştırmayın
Komut satırı araçlarını kullanarak yazacağınız küçük scriptler, Zimbra yönetimini tamamen farklı bir boyuta taşıyacak. Admin Console güzel ama scriptle çözülen işin tadı başka oluyor.
