staging.inyokaproject.org

Für diese Funktion musst du eingeloggt sein.

shell-script und crontab mittels root

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

jm3west

Anmeldungsdatum:
20. Juni 2016

Beiträge: Zähle...

Hi ubuntuer,

vor Jahren befasste ich mich schon mal mit Linux im Allgemeinen. Nach langer Abstinenz bin ich gegenwärtig wieder auf dem Tripp 😉

So habe ich ubuntu-server 16.04 an einem PC (hostname = server1) installiert und mit Apache, MySQL, .... gefüttert. Auch habe ich einen weiteren PC (hostname = server2) auch mit ubuntu-server 16.04 aufgesetzt, dieser dient rein als Backup-Server.

So, jetzt das eigentliche Problem: Am server1 sind "master" als Admin und drei weitere Account ohne Login-Shell (Diese sind auch nur Notwendig wegen Samba). Wie in nachfolgendem Script zu sehen will ich die Home-Ordner auf server2, mittels rsync, sichern

1
2
#!/bin/bash
rsync -av --delete /home/benutzer -e ssh master@server2:/Weg/zum/Backupordner

ssh-keygen, usw. alles erfolgreich erledigt. u+x sind gesetzt.

Das Script läuft händisch mittels sudo ./script.sh und macht was es soll!

Der Backupordner auf server2 gehört "master". OK Die einzelnen Benutzerordner auf server1 gehören ja logischerweise nicht "master", somit muss ich ja den rsync-Befehl im Script als root (sudo) ausführen

All' dass sollte komfortablerweise in den cron. Und hier hört meine Kenntnis auf!!!

crontab -e bringt ja nix, weil dann ja crontab als "master" läuft. sudo crontab -e hat mich auch nicht weiter gebracht. In der Crontab stand/steht ....

1
*/1 * * * * root /Weg/zum/Script/script.sh

(Die Minute ist nur um zu sehen ob was passiert)

Das einzige was half war sudo su. Dann crontab -e

Aber ist das die Vorgehensweise? Ich hoffe dass ich verstanden werde und bitte um Hilfe

MfG

Bearbeitet von sebix:

Bitte verwende in Zukunft Codeblöcke, um die Übersicht im Forum zu verbesserns, und füge Absätze nur dort ein, wo sie Sinn machen und nicht nach jedem Satz.

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5077

jm3west schrieb:

ssh-keygen, usw. alles erfolgreich erledigt.

Das Skript kann auf den Key ohne Passwort zugreifen? Funktioniert es denn auch mit sudo -H, wenn das Homeverzeichis also auch auf das von root gesetz wird?

u+x sind gesetzt.

Der ausfuehrende User ist dann aber root, also ein Dritter. Darf auch dieser die Datei ausfuehren? Es sollte dann 755 haben.

EDIT: Was steht in den Logs?

jm3west

(Themenstarter)

Anmeldungsdatum:
20. Juni 2016

Beiträge: 49

Hi sebix,

ssh-keygen alles IO

sudo ./script.sh rennt ja ohne probleme

Die Rechte von script soeben auf 755 gestezt

sudo crontab -e habe das noch mit ergänzt

SHELL=/bin/bash
PATH=/home/master/bin:/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11

cron macht nix. selbst ein simples */1 * * * * root mkdir /home/master/TEST nicht

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5077

Ich habe mehrere Fragen gestellt, die zur Loesung des Problems beitragen koennen. Davon hast du leider keine beantwortet.

jm3west

(Themenstarter)

Anmeldungsdatum:
20. Juni 2016

Beiträge: 49

Das teilt mir postfix mit

From: root@server1.local (Cron Daemon)
To: root@server1.local
Subject: Cron <root@ubuntu> root mkdir /Home/master/TEST
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
Message-Id: <20160718152901.AE02638A0216@server1.local>
Date: Mon, 18 Jul 2016 17:29:01 +0200 (CEST)

/bin/sh: 1: root: not found

Das mit ssh-keygen habe ich mit ja beantwortet, da das script ohne Passworteingabe alles erledigt. und die Rechte habe ich wie von die erwähnt auf 755 geändert!

Bearbeitet von sebix:

Bitte verwende in Zukunft Codeblöcke, um die Übersicht im Forum zu verbessern!

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5077

jm3west schrieb:

/bin/sh: 1: root: not found

Und was steht hier? Dass die Syntax falsch ist. Also so in der crontab:

*/1 * * * * /Weg/zum/Script/script.sh

Das mit ssh-keygen habe ich mit ja beantwortet, da das script ohne Passworteingabe alles erledigt.

Ja, mit sudo. Und mit sudo -H?

jm3west

(Themenstarter)

Anmeldungsdatum:
20. Juni 2016

Beiträge: 49

sudo -H bin/script.sh macht, nach Passwort-Eingabe, alles so wie es soll

Also ich befinde mich in /home/master, das Script liegt in ~/bin

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5077

jm3west schrieb:

sudo -H bin/script.sh macht, nach Passwort-Eingabe, alles so wie es soll

Nun ja, das ist ein weiteres Problem. Entweder du entfernst das Passwort vom Key oder nutzt einen SSH Agent.

jm3west

(Themenstarter)

Anmeldungsdatum:
20. Juni 2016

Beiträge: 49

Nun, dass verstehe ich jetzt gar nicht!

Der key liegt auf den Client (server2)

Somit brauche ich für ssh keinerlei Passwort.

Der rsync-Befehl im Script braucht sudo

Es geht doch einzig und allein' darum das ich irgendwie im cron das script mit sudo - oder besser gesagt als sudo/root "abschicken" kann.

Es gibt doch sicherlich 1000fach mächtigere Scripte, die im Script sudo brauchen, als meine kleine lächerliche Zeile

An server2 gibt es ja ausser "master" (unter diesem Account wurde ubuntu installiert) keinen User

Die Ordner in denen das Backup liegt gehören alle "master" Die Ordner der einzelnen User an server1 gehören - das brauch ich Dir ja nicht zu erzählen - den jeweiligen Users.

Nun muss ich doch um Zugriff an server1 User-Ordner sudo haben um überhaupt an die Inhalte zu kommen um diese Backupen zu können.

Sonst müsste ich ja alles doppelt machen und jedem User ein crontab geben und an server2 jeweils nochmals die gleichen User erstellen. Oder ein dritter Rechner mit LDAP Wenn dem so ist solltest Du das sagen!

Ich will Dir nicht zu nahe treten und bin dankbar für Deine Hilfe Aber in einer Antwort schreibst Du "na, da ist die Syntax falsch" woher soll ich wissen was falsch ist. Wenn ich es wüsste was falsch ist würde ich ein Linuxbuch schreiben

Naja, dann halt wieder zu denen aus Redmond

Planspiel

Anmeldungsdatum:
2. Mai 2016

Beiträge: 673

Schon mal mit 'bash'

1
*/1 * * * * root bash /Weg/zum/Script/script.sh

probiert?

Hefeweiz3n Team-Icon

Moderator, Webteam
Avatar von Hefeweiz3n

Anmeldungsdatum:
15. Juli 2006

Beiträge: 5809

jm3west schrieb:

Ich will Dir nicht zu nahe treten und bin dankbar für Deine Hilfe Aber in einer Antwort schreibst Du "na, da ist die Syntax falsch" woher soll ich wissen was falsch ist.

Wenn du die /etc/crontab nutzt musst du einen Benutzer angeben, nutzt du die user-crontab (erreichbar mittels crontab -e als entsprechender Benutzer, und laut deiner Aussagen ist es das was du machst) darfst du keinen Benutzer angeben, da der Benutzer ja schon feststeht.

Steht auch im Wiki: Cron (Abschnitt „Cronjobs-manuell-einrichten“)

Planspiel

Anmeldungsdatum:
2. Mai 2016

Beiträge: 673

Planspiel schrieb:

Schon mal mit 'bash'

1
*/1 * * * * root bash /Weg/zum/Script/script.sh

probiert?

Uups, wenn überhaupt, dann muss es '/bin/bash' heissen.

Antworten |