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: 10093
Registriert: Mo 23 Jun, 2003 22:45
Wohnort: 47.342367N 14.144035E

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: 10093
Registriert: Mo 23 Jun, 2003 22:45
Wohnort: 47.342367N 14.144035E

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: 10093
Registriert: Mo 23 Jun, 2003 22:45
Wohnort: 47.342367N 14.144035E

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: 30295
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: 30295
Registriert: Do 15 Apr, 2004 10:48
Wohnort: wien


Zur√ľck zu LINUX & UNIX-DERIVATE

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast