Shell Script (unter Bash)

Das Forum für den Linux-Pinguin - auch andere Unix-Derivate (*BSD, (Open)Solaris, Apple's Darwin / MacOS X, ...) sind hier willkommen!
Forumsregeln
Das Forum für den Linux-Pinguin - auch andere Unix-Derivate (*BSD, (Open)Solaris, Apple's Darwin / MacOS X, ...) sind hier willkommen!

Shell Script (unter Bash)

Beitragvon robert1 » So 26 Okt, 2014 10:14

Ich bräuchte etwas Hilfe für Shell Scripting unter Linux im Allgemeinen.
Konkret betrifft es die Bash unter Linux Mint XFCE 17.

Ich komme aus der Windowswelt und habe einige Batch Dateien erfolgreich erstellt.
Alles was ich dort eingetragen habe wird in der Regel sequenziell abgearbeitet.

Was will ich tun?
Etwas Wissen habe ich.
Ich will dass ein User z.B. Updates bekommt, den Ram Cache/DNS Cache geleert bekommt, neue IP anfordert usw.
Die Befehle für diese Sachen sind mir bekannt.
Das ganze soll ein Chronjob übernehmen.
Wie schafe ich dass ein User automatisch ins Root wechselt? Das ist momentan mein Hauptproblem
Mir ist klar dass es eine Sicherheitslücke ist in ein Shellscript den Root abzuspeichern, aber für
meine Zwecke ist es egal. Habe die Datei ausserdem versteckt.
Hier meine konkreten Fragen:
1) Welche Rechte braucht so ein Shell Script?
2) Die Schritte die es sequenziell abarbeiten soll wären:
a) Ins Root wechseln samt PW
b) allgemeine Befehle aus der Bash sequenziell abarbeiten
c) Root verlassen

Vielleicht kann mir jemand helfen
robert1
Junior Board-Mitglied
Junior Board-Mitglied
 
Beiträge: 45
Registriert: Di 12 Okt, 2010 14:29

Re: Shell Script (unter Bash)

Beitragvon lordpeng » So 26 Okt, 2014 11:33

ich würde es entweder via sudo lösen (man sudo) oder via cronjob der mit root rechten läuft und jede minute prüft ob eine bestimmte datei welche vom user erstellt wurde unter /tmp/ vorhanden ist bei vorhandensein durch läuft und die datei anschliessend löscht - sowas hab ich bei diversen web interfaces integriert - damit das cgi script mit normalen user-rechten laufen kann, das ganze kann man mittels prüfsummen in der temporären datei, etc. noch ein bissl gegen missbrauch absichern ...
lordpeng
Moderator
Moderator
 
Beiträge: 10198
Registriert: Mo 23 Jun, 2003 22:45

Re: Shell Script (unter Bash)

Beitragvon robert1 » So 26 Okt, 2014 12:45

Danke für den Tipp, leider bin ich noch lange nicht so weit.
Vielleicht zur Erklärung das Script soll z.B. 1x die Woche laufen, also eher eine Dauerlösung darstellen und nicht gelöscht werden.

Mein 1. provisorischer Vorschlag wäre:

#!bash
sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"
sudo /etc/init.d/dns-clean start
sudo apt-get update && sudo apt-get upgrade
sudo apt-get remove
sudo apt-get clean
sudo update-apt-xapian-index


Leider weiss ich nicht wie die Eingabe des Root PW im Script zu lösen ist.
Ich bin dabei mich einzuarbeiten...
robert1
Junior Board-Mitglied
Junior Board-Mitglied
 
Beiträge: 45
Registriert: Di 12 Okt, 2010 14:29

Re: Shell Script (unter Bash)

Beitragvon lordpeng » So 26 Okt, 2014 13:08

wenn das script sowieso regelmässig (also ohne benutzerinteraktion) laufen soll, dann brauchst du es eh nur als cronjob mit root rechten laufen lassen, d.h. als root crontab -e ausführen und dort das script eintragen - fertig ...

ansonsten einen cronjob als root erstellen und alle x minuten testen ob /tmp/tmpfile.tmp vorhanden ist und bei erfolg dein script aufrufen

* * * * * if -e /tmp/tmpfile.tmp && /usr/local/bin/deinscript.sh

btw. es sollte doch hoffentlich #!/bin/bash heissen und nicht #!bash - oder hab ich da was verpasst?
lordpeng
Moderator
Moderator
 
Beiträge: 10198
Registriert: Mo 23 Jun, 2003 22:45

Re: Shell Script (unter Bash)

Beitragvon robert1 » So 26 Okt, 2014 13:27

An das hab ich nicht gedacht, dass Chronjob als Root zum starten geht.
Ich glaube das Problem wäre vorläufig gelöst.
Doch was wäre zu tun, wenn ein User ein Script nach seinen Zeitwünschen starten möchte?
Wie umgeht man die manuelle Root PW Eingabe?
robert1
Junior Board-Mitglied
Junior Board-Mitglied
 
Beiträge: 45
Registriert: Di 12 Okt, 2010 14:29

Re: Shell Script (unter Bash)

Beitragvon lordpeng » So 26 Okt, 2014 13:44

es gibt möglichkeiten einen passwort prompt abzufragen und das dann automatisch einzutragen oder via pipe zu übergeben, aber das ist alles ned wirklich optimal, weil das kennwort in jedem fall im klartext stehen müsste - d.h. sowas macht man nicht, auch wenns machbar wär ...

ich für mich verwende für solche sachen oben angeführten workaround - ist verhältnismässig sicher und zuverlässig ...
gibt aber noch weitere möglichkeiten das zu lösen - man muss halt eventuell etwas kreativ sein ...

ansonsten siehe auch: http://serverfault.com/questions/160581 ... o-on-linux
lordpeng
Moderator
Moderator
 
Beiträge: 10198
Registriert: Mo 23 Jun, 2003 22:45

Re: Shell Script (unter Bash)

Beitragvon robert1 » Di 28 Okt, 2014 13:24

Leider hat es mit der Pipe Option nicht funktioniert.
Vielleicht wurde es als Sicherheitslücke eingestuft und gesperrt.
Wäre nett wenn jemand Vorschläge, konkret nur die Zeilen posten würde wie man per sh zum Root kommt.
robert1
Junior Board-Mitglied
Junior Board-Mitglied
 
Beiträge: 45
Registriert: Di 12 Okt, 2010 14:29

Re: Shell Script (unter Bash)

Beitragvon jutta » Di 28 Okt, 2014 13:50

ich schreib mein script in ein textfile, mache das mit chmod +x ausführbar und trage dann den namen des files in einen root-cronjob ein.

noch einmal in ganz langsam: (die aufgabenstellung ist hier was völlig anderes)

das ist mein file "s9y-backup" (für einen blog)

Code: Alles auswählen
# Datenbank-Backup fuer Serendipity (...)
mysqldump -u xxx --password=********** serendipity > "/backup/s9y/`date +%F-`s9y.db.sql"
cd /
tar -czf backup/s9y/`date +%F-`s9y.tar.gz var/www/s9y --exclude=var/www/s9y/spamblock*


so sieht das listing aus:

Code: Alles auswählen
-rwxr--r-- 1 root root  225 23. Jän 2012  s9y-backup


"x" bedeutet ausführbar.

und so der cronjob:

Code: Alles auswählen
# m h  dom mon dow   command
25 01 * * * /root/scripts/s9y-backup --logging /var/log/backup.log


und damit der cronjob mit rootrechten ausgeführt wird, musst du einfach crontab -e als root aufrufen.

/root/scripts/ ist einfach ein von mir erstelltes verzeichnis, in dem ich die ganzen selbstgebastelten scripte sammle.

und falls ich trotz 3mal nachlesen übersehen hab, dass noch ein passwort im text steht, bitte ich um diskrete benachrichtigung :)
jutta
Administrator
Administrator
 
Beiträge: 30485
Registriert: Do 15 Apr, 2004 10:48
Wohnort: wien

Re: Shell Script (unter Bash)

Beitragvon robert1 » Di 28 Okt, 2014 14:19

Das mit dem Chronjob hat ja wunderbar funktioniert.
Aber nun gibt es Sachen, die ein User nach seinen Bedürfnissen ausführen will, ohne an die Zeit gebunden zu sein.
Es muss doch eine Möglichkeit geben, denm User gewisse Rechte zu geben, wie z.B., die Installation, oder Deinstallation von Programmen ohne dass er das Root PW kennt. Der Sicherheitsaspekt ist mir egal. Selbst für mich als User ist es eine Erleichterung mehrere Schritte zu erledigen und mir Tiparbeit zu ersparren.

#!/bin/bash
sudo -kSs << EOF
Password
EOF

Hat nicht funktioniert.
robert1
Junior Board-Mitglied
Junior Board-Mitglied
 
Beiträge: 45
Registriert: Di 12 Okt, 2010 14:29

Re: Shell Script (unter Bash)

Beitragvon jutta » Di 28 Okt, 2014 14:47

> Es muss doch eine Möglichkeit geben, denm User gewisse Rechte zu geben, wie z.B., die Installation, oder Deinstallation von Programmen ohne dass er das Root PW kennt.

gibt es auch. sudo siehe http://linux.die.net/man/8/sudo http://linux.die.net/man/5/sudoers

beispiel: auf diesem rechner gibt es user, die berechtigt sind bestimmte netzwerk-commands auszuführen, die normalerweise root vorbehalten sind. User_Alias ist ein frei erfundener name für diese gruppe. dahinter stehen die usernames der betreffenden user. im nächsten absatz steht, welche commands sie ausführen dürfen. und darunter steht, dass sie das ohne gesonderte passworteingaben machen dürfen. in deinem fall würdest du unter Cmnd_Alias halt den namen deines shellscripts schreiben (sicherheitshalber incl. pfad)

Code: Alles auswählen
srv01:/etc# cat sudoers
# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults   env_reset

# Host alias specification

# User alias specification
User_Alias NOC = jutta, chrisu, dfx, .....

# Cmnd alias specification

Cmnd_Alias NOC =/sbin/route, /usr/sbin/traceroute, /sbin/ifconfig, \
/usr/sbin/arp, /usr/sbin/hping3, /usr/bin/nmap, /usr/bin/tshark, \
/usr/sbin/tcpdump, /usr/bin/pon, /usr/bin/poff, /usr/bin/plog,  \
/usr/bin/tethereal, /usr/sbin/bricktrace

# User privilege specification
root   ALL=(ALL) ALL
NOC   ALL=(root) NOPASSWD: NOC



disclaimer: das ist ein älterer debian-rechner. bei neueren versionen gibts ein eigenes verzeichnis sudoers.d in dem man seine config-files unterbringen sollte. und bei anderen distributionen gibts vielleicht andere kleine unterschiede, aber sudo und sudoers gibt es überall in der linux-welt.

btw: der witz bei sudo ist, dass der user nicht das rootpasswort eingeben muss, sondern sein eigenes user-passwort. ich würde auf meinem rechner also sudo [passwort-von-jutta] eintippen. vielleicht war das das problem.

//ps: je nachdem, wer deine user sind und wieviel schaden sie anrichten können, wenn sie auf dem rechner was verpfuschen, könntest du auch so vorgehen: a la ubuntu einen user einrichten, der alle rechte hat, die normalerweise root vorbehalten sind. und diesen user und das zugehörige passwort deinen usern mitteilen. dann geben sie halt nicht "su" ein, um root zu werden, sondern "su supermaxi supergeheim" und haben alle möglichkeiten. damit ersparst du dir das explizite aufzählen der befehle, die sie ausführen dürfen und dein root-pw bleibt geheim.
jutta
Administrator
Administrator
 
Beiträge: 30485
Registriert: Do 15 Apr, 2004 10:48
Wohnort: wien


Zurück zu LINUX & UNIX-DERIVATE

Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot] und 10 Gäste