Jump to content
Froxlor Forum
  • 0
witschi

User-Crons -> Mails-Versand

Question

Moin Leute,

mal wieder melde ich mich mit meinem Sorgenkind 'Shopware'. Dort werden Newsletter mit Hilfe eines eingerichteten Cron-Jobs versandt. Wichtig hierbei zu erwähnen ist wohl, dass es kein Cronjob des Users root ist, sondern vom jeweiligen Froxlor-Kunden. Nun versucht der User-Prozess beim verschicken der Mails seinen eigenen Namen herauszufinden. Dazu braucht er die User-DB, die laut /etc/nsswitch.conf im MySQL liegt. Die Config zum Nachschlagen von User-Informationen (/etc/libnss-mysql.cfg) ist aber nicht durch den User lesbar. Da ich die Config auch nicht durch den User lesbar machen möchte (da dort ein Passwort drin steht), habe ich momentan keine vernünftige Lösung für dieses Problem.

Letztendlich spielt es sogar gar keine Rolle, dass es sich hierbei um Shopware handelt, denn auch die Info-/Error-Mails des Cronjobs können aus besagten Gründen nicht versandt werden...

Vielen Dank schon mal für die Hilfe!

Share this post


Link to post
Share on other sites

21 answers to this question

Recommended Posts

  • 0

Ich versteh das Problem nicht...

* * * * * [user] [programm]

Führt wunderbar den Cron unter dem angegebenen User aus. Der Name wird da doch durch den Cron (der als root läuft) aufgelöst.

Auch ein Script das z.B. 'whoami' ausführen soll, funktioniert bei mir als Froxlor-Kunden-User wunderbar.

Geht es um Mails die vom Cron kommen gehen die doch standardmäßig an root@hostname - auch da sollte es kein problem mit der auflösung des Namens geben. Selbst wenn es eine E-Mail Adresse ist, die auf dem System eingerichtet ist, übernimmt die Auflösung hier doch dovecot/postfix...also ich kann mir leider nicht ganz erklären wo dein Problem ist.

Share this post


Link to post
Share on other sites
  • 0
MAILTO=server@nn-webdesign.com

* * * * * [user] [befehl]

So sieht meine /etc/cron.d/file Datei aus. Nun versucht der Benutzer [user] die Cron-Mail an server@nn-webdesign.com zu schicken. Um jedoch die Mail zu verschicken, versucht der Cron seinen eigenen Namen rauszufinden. Das endet letztendlich in einem Fehler des Postfix:

postfix/sendmail[5336]: fatal: no login name found for user ID 10031

Zu allem Überfluss bleibt der Cron-Prozess dann hängen und ich habe im Laufe der Zeit unzählig viele hängende Prozesse.

Share this post


Link to post
Share on other sites
  • 0

Das dürfte dann wohl eher dran liegen, dass der Kunde keine Shell hat - wie soll er auch etwas via Cron in der Shell ausführen wenn er gar nicht darf? Da müsstest du dem Kunden zunächst eine Shell zuweisen in Froxlor, siehe Einstellungen

Share this post


Link to post
Share on other sites
  • 0

Meinst du Einstellungen - Sicherheitseinstellungen - Erlaube Kunden für FTP Benutzer eine Shell auszuwählen? Das ist nämlich bisher deaktiviert.

Share this post


Link to post
Share on other sites
  • 0

Ja natürlich ist das deaktiviert - das ist ja auch eine Einstellung die mit Vorsicht zu genießen ist, aber ja, die mein ich

Share this post


Link to post
Share on other sites
  • 0

Leider hilft das nicht weiter. Ich habe dem entsprechenden User die Shell /bin/bash zur Verfügung gestellt - der Fehler im syslog bleibt aber der selbe. Auch nach restart des Postfix und des Cron-Daemons. Ein Login mittels Putty funktioniert jedoch reibungslos...

Share this post


Link to post
Share on other sites
  • 0

Dann müsste ich ma wissen was dieses Script da treibt...K.a. ob das jetzt wirklich was mit froxlor/libnss-mysql zu tun hat...

Share this post


Link to post
Share on other sites
  • 0

Zum Testen habe ich nur ein echo ausgeführt - das sollte dann ja bereits per Mail versandt werden.

Aber auch der Test eine E-Mail-Direkt über die User-Shell zu versenden klappt nicht:

$ echo "Test" | mail -s "Test Subject" server@nn-webdesign.com
send-mail: fatal: no login name found for user ID 10031
Can't send mail: sendmail process failed with error code 75

 

Share this post


Link to post
Share on other sites
  • 0
To prevent Postfix sendmail from looking up this information you must supply the sender name or address with the -f command-line option. 

 

Share this post


Link to post
Share on other sites
  • 0

Es ist doch so, dass ein User immer in der Lage sein sollte, seine eigenen Informationen abzufragen. Dazu müsste aber die libnss-mysql.cfg lesbar für alle sein. Da dort aber der Zugang zur Froxlor-Datenbank drin steht, ist das natürlich keine Option. Deswegen habe ich nun einen nss-user angelegt (mit den entsprechenden SELECT-Rechten auf die Tabellen ftp_users und ftp_groups) und diesen in die libnss-mysql.cfg geschrieben. In der libnss-mysql-root.cfg steht natürlich weiterhin der root-user für die Froxlor-Datenbank. Nun konnte ich also auch die libnss-mysql.cfg lesbar für alle machen und siehe da: alle meine Probleme sind gelöst.

Die Standard-Beispiel-Configs von libnss-mysql ist es übrigens auch genau so vorgesehen, wie ich es jetzt umgesetzt habe.

Share this post


Link to post
Share on other sites
  • 0

Ich dachte mir schon, dass eine solche Antwort kommt. Wie du dir aber sicher denken kannst, war dies als konstruktive Kritik zu verstehen. ;-)

Share this post


Link to post
Share on other sites
  • 0

Ist mir schon klar - du hast nix weiter gemacht als nen eigenen mysql-user für das libnss-zeug anzulegen, der halt NUR auf die ftp-tables darf...joa...kann man machen, muss man aber nicht - sonst kannste auch anfangen für postfix/Dovecot eigene user zu machen die dann nur auf mail_* tables selecten dürfen etc. hat schon fast was von security through obscurity

Share this post


Link to post
Share on other sites
  • 0

Nein, das Problem sind folgende Dateirechte, die du in der Konfiguration von libnss-mysql beschreibst:

chmod 0600 "/etc/libnss-mysql.cfg"

Dadurch ist es anderen Usern nicht möglich die eigenen Informationen auszulesen und somit funktioniert am Ende auch das versenden von Mails aus einem Cronjob nicht. Man könnte natürlich auch sagen, dass man alles so lässt und nur die Dateirechte der Config auf 0644 setzt, aber meine bedenken dazu habe ich ja bereits geäußert...

Share this post


Link to post
Share on other sites
  • 0
# Make sure that `passwd`, `group` and `shadow` have mysql in their lines
# You should place mysql at the end, so that it is queried after the other mechanisams
#
passwd:         compat mysql
group:          compat mysql
shadow:         compat mysql

hosts:       files dns
networks:    files dns

services:    db files
protocols:   db files
rpc:         db files
ethers:      db files
netmasks:    files
netgroup:    files
bootparams:  files

automount:   files
aliases:     files

 

Share this post


Link to post
Share on other sites
  • 0

Joa, mit nscd kannst du dir die Änderungen halt sparen. Da gehts dann auch wenn die libnss-mysql.cfg nur von root gelesen werden kann.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...