Admin-Script für Cyrus+Postfix

Postfix, QMail, Sendmail, Dovecot, Cyrus, Courier, Anti-Spam
theomega
Userprojekt
Userprojekt
Posts: 704
Joined: 2003-01-27 14:36

Admin-Script für Cyrus+Postfix

Post by theomega » 2006-08-21 18:16

Hallo Leute,
ich suche nach einem kleinen Script das aus einer Datenbank (MySQL oder ne Textdatei) Daten ausliest und entsprechend die Cyrus-IMAP-Benutzer anlegt, die Permissions richtig vergibt, die Postfix-Aliases anlegt und per saslpasswd die Passwörter richtig setzt.
Ich bin einfach zu faul das jedesmal von Hand zu machen, wenn also noch nichts bekannt ist würde ich ein Script schreiben, aber wiso die Arbeit zweimal machen....

Danke
TO

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: Admin-Script für Cyrus+Postfix

Post by Roger Wilco » 2006-08-21 18:47

web-cyradm, Openmailadmin, Google ;)

theomega
Userprojekt
Userprojekt
Posts: 704
Joined: 2003-01-27 14:36

Re: Admin-Script für Cyrus+Postfix

Post by theomega » 2006-08-21 18:56

Hy,
waren mir zumindest teilweise bereits bekannt:
webcyradm ist zwar gut zum Administrieren des Cyrus, hat aber mit Postfix nichts am hut
openmailadmin ist eigentlich perfekt bzw genau das was ich suche nur müsste ich sowohl postfix alsauch cyrus mit mysql-support installieren worauf ich gerne verzichten würde. Würde gerne bei sasl mit sasldb bleiben.
Gegoogelt habe ich natürlich bereits!

Danke trotzdem
TO

tobi^
Posts: 57
Joined: 2003-07-04 16:09

Re: Admin-Script für Cyrus+Postfix

Post by tobi^ » 2006-08-23 16:24

nimm den saslauthd mit pam mysql her. Kannste deine alten Accs behalten und evtl. auf MySQL migrieren. Openmailadmin setz ich auch bei ner groesseren Seite ein und der läuft einwandfrei.

flo
RSAC
Posts: 2297
Joined: 2002-07-28 13:02
Location: Berlin

Re: Admin-Script für Cyrus+Postfix

Post by flo » 2006-08-23 18:02

Wenn das System nur zur Verwaltung der Konten eingesetzt wird, würde ich auf etwas zurückgreifen, das in der Art wie Confixx die passwd/shadow-Kombi setzt.

Grund: fällt der db-server aus, gehen weder Mails rein noch raus.

Zu den ziemlich eintönigen Schritten User anlegen, Postfach anlegen und Passwort setzen habe ich mit mittlerweile ein Script geschrieben, das ist aber noch nicht hundertprozentig und gerade mal so, daß es funktioniert.

Code: Select all

#!/bin/bash

echo "###################################"
echo "## Mailbox creation                "
echo "## "

if [ -z "${1}" ]; then
        echo "## ERROR: Username is missing"
        exit 1
fi

NEWPASS=`pwgen -n -s -1 | tail -1`
POSTBOXCT=`grep "^${1}p" /etc/passwd | wc -l`

#if [ $POSTBOXCT -gt 0 ]; then
#       LASTBOX=`grep "^${1}p" /etc/passwd | awk -F':' '{ print $1}' | sort | tail -1 | awk -F'p' '{ print $2 }'`
#else
#       LASTBOX=0
#fi;

NEWBOX=$(($POSTBOXCT+1))
NEWBOXNAME="${1}p${NEWBOX}"
NEWBOXVALID=`grep "^${NEWBOXNAME}" /etc/passwd | wc -l`

echo "###############################"
echo "## User Information:"
echo "## Postbox: ${NEWBOXNAME}"
echo "## Password: $NEWPASS"
echo "## User has $POSTBOXCT mailboxes"
echo "## Last Mailbox was ${1}p${LASTBOX}"
if [ $NEWBOXVALID -eq 0 ]; then
        echo "## Newbox is valid"
else
        echo "## Newbox is not valid - User exists"
        echo "###############################"
        exit 1
fi
echo "###############################"

echo "## INFO: creating user"
adduser --home /XnirvanaX 
        --quiet 
        --shell /bin/false 
        --disabled-login 
        --gecos "" 
        --no-create-home 
        --gid 104 
        --firstuid 1000 
        --lastuid 30000 
        ${NEWBOXNAME}

echo "## INFO: changing password"
echo "${NEWBOXNAME}:${NEWPASS}" | chpasswd 

echo "## INFO: creating IMAP-Mailbox"
/root/scripts/cyr_add.pl ${NEWBOXNAME}

echo "##"
echo "## finished"
echo "###############################"

Code: Select all

#!/usr/bin/perl -w
#
# This will create a new mailbox and set a quota on the new user. Just be 
# sure that you installed the Cyrus::IMAP perl module.  If you did 
# 'make all && make install' or installed Cyrus using the FreeBSD ports you
# don't have to do anything at all.
#
# Change the params below to match your mailserver settins, and
# your good to go!
#
# Author: amram@manhattanprojects.com
#
# modified by Tom Lazar tom@tomster.org on 2003-08-26 to use
# a tab separated user - passwd inputfile instead of the standardpassword

use Cyrus::IMAP::Admin;

#
# CONFIGURATION PARAMS
#
my $cyrus_server = "localhost";
my $cyrus_user = "cyrus";
my $cyrus_pass = "-------";

# 100 Megs
my $quota_size = "1000000";

my $mechanism = "login";

#
# EOC
#

if (!$ARGV[0]) {
  die "Usage: $0 [user to add] passwd n";
} else {
  $newuser = "$ARGV[0]";
}

sub createMailbox {

  my ($user, $subfolder) = @_;

  my $cyrus = Cyrus::IMAP::Admin->new($cyrus_server);
  $cyrus->authenticate($mechanism,'imap','',$cyrus_user,'0','10000',$cyrus_pass);

  if ($subfolder eq "INBOX") {
    $mailbox = "user.". $user;
  } else {
    $mailbox = "user.". $user .".". $subfolder;
  } 

  $cyrus->create($mailbox);
  if ($cyrus->error) {
    print STDERR "Error: ", $mailbox," ", $cyrus->error, "n";
  } else {
    print "Created Mailbox: $mailbox n";
  }

}

sub setQuota {

  my ($user) = @_;

  my $cyrus = Cyrus::IMAP::Admin->new($cyrus_server);
  $cyrus->authenticate($mechanism,'imap','',$cyrus_user,'0','10000',$cyrus_pass);
  
  $mailbox = "user.". $user;
  $cyrus->setquota($mailbox,"STORAGE",$quota_size);
  if ($cyrus->error) {
    print STDERR "Error: ", $mailbox," ", $cyrus->error, "n";
  } else {
    print "Setting Quota: $mailbox at $quota_size n";
  }

}

print "Adding User: ", $newuser, "n";

createMailbox($newuser,'INBOX');
createMailbox($newuser,'Sent');
createMailbox($newuser,'Trash');
createMailbox($newuser,'Drafts');
createMailbox($newuser,'Junk');
createMailbox($newuser,'NOSPAM');
createMailbox($newuser,'SPAM');

setQuota($newuser);
Das letztere ist dann das Perl-Programm zum eigentlichen Mailboxen anlegen.

Bei einem Kunden setze ich Cyrus mit Auth per pam_winbind ein - das funktioniert gut.