[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Cyrdeliver mit jedem User ausführen (was: Re: mails sortieren und überhaupt)



Hallo Matthias, hallo Liste,

> Schöner wäre es natürlich, sowas in die ~/.procmailrc zu schreiben und
> die dann einzubinden. Ich bin damit leider gescheitert, weil procmail
> die ~/.procmailrc mit den Rechten des Users ausführt. Und der darf
> cyrdeliever natürlich nicht benutzen.
> 
> Falls jemand dafür noch eine Lösung hätte, wäre ich auch noch dran
> interessiert! ;-)

ich hatte das erst mit einem Shell-Script versucht, aber die werden ohne
Kernel-Hack nicht setuid ausgeführt (was auch Sinn macht).

Daher ein kleines C-Programm, welches ich cyrdeliver_wrapper genannt habe:

#include <pwd.h>
#include <sys/types.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char *argv[]){
  struct passwd *userinfo;

  /*if (argc != 2) return EINVAL;*/ /* invalid argument, too many/too
				       few args */
  if (argc != 2) return ECANCELED;  /* invalid argument, too many/too
				       few args; EINVAL is also returned
				       by execle */

  userinfo = getpwuid(getuid()); /* get user info from /etc/passwd for
				    calling user */
  execl("/usr/sbin/cyrdeliver", "cyrdeliver", "-a", userinfo->pw_name, "-m",
	argv[1], NULL);

  return errno; /* if execle fails, it sets errno; see man execle or man
		   execve */

  /* Hm, I cannot see in man page, what cyrdeliver returns... */

}

Das ganze dann
-rwsr-sr-x    1 cyrus    mail         5233 Sep  8 08:39
/usr/local/sbin/cyrdeliver_wrapper

Der Sinn: Damit nicht jeder in irgend eine beliebige Mailbox eines anderen
Users (-m) einsortieren darf, macht die User-Authentifizierung der wrapper
(-a). Wenn man in der Mailbox, die man als einzelnes Argument dem Wrapper
angibt, eine Mailbox wählt, in denen man keine post-Rechte hat, landet die
Mail in der INBOX des Users, s. man cyrdeliver. Ich denke, daß dies der Sinn
ist, weshalb cyrdeliver nicht für jeden executable ist.

Meine .procmailrc, sieht dann wie folgt aus (ach ja: wenn eine .procmailrc im
$HOME zu finden ist, wählt exim automatisch procmail zum zustellen, evt. muß
man bei anderen MTAs noch etwas in die .forward schreiben):

LOGFILE=$HOME/.procmail/log
LOGABSTRACT=all
VERBOSE=yes
LOG="
"

THISUSER=$LOGNAME

DELIVERMAIL="/usr/local/sbin/cyrdeliver_wrapper"
IMAP="$DELIVERMAIL user.$THISUSER"
BACKUP="$DELIVERMAIL user.$THISUSER.Backup"

#:0c
#| $BACKUP

:0w
* ^X-Mailing-List: <debian-user-german@lists\.debian\.org>
| $IMAP.Linux.debian.debian-user-german


Das kann dann bis #| $BACKUP jeder User so übernehmen. (Und zur Sicherheit
halt Backups von seinen E-Mails machen.)

So, wenn jemand Sicherheitslücken in dem C-Programm sieht oder sonst eine
Idee hat, ob man den Wrapper "überreden" kann, in jede Mailbox
einzusortieren, wäre ich für Hinweise dankbar. Ansonsten hab ich auch schon
überlegt, daß mal dem Maintainer zu schicken, vielleicht kann er ja mal noch
ne neue Version machen. (Sollte ich nen neuen Thread machen, daß evt.
mehrere das lesen?)

Achso: Ich hab hier cyrus-imapd 1.5.19-9, was neueres ist ja in der testing
noch nicht gelandet. Habe gelesen, daß ab Version 2 die cyrdeliver dann für
jedermann ausführbar gemacht sein soll.


Nun, es ergeben sich allerdings auch ein paar Dinge, die es noch abzustellen
gäbe:

(i) Die ~/.procmail/log sieht durcheinandergewürfelt aus. Hat jemand eine
    Idee, wie man die lock'en kann, aber so, daß es keine Zustellungen gibt,
    die nicht mitgelogt werden?

(ii) Auf der Konsole sehe ich nicht mehr, wenn ich neue E-Mail bekommen
     habe. Die meisten Programme schauen ja nach dem Datum von z.B.
     /var/mail/user oder ~/Mail/...

(iii) Sollte man einen lokalen User ins Killfile gesteckt haben, kann er
      einen trotzdem in der INBOX nerven. :)

(iv) -fällt mir gerade nicht ein-


Nunja, das wollte ich lange schonmal diskutiert haben, hoffentlich gibt's
viele Antworten.


Ansonsten schönes Wochenende,
 Mike



Reply to: