Hallo, ich habe auf dem pi ein bashscript erstell und es auch ausführbar gemacht. Ich möchte das die Gruppe und der rest der Welt das Scrpit ausführen können, jedoch nicht einsehen dürfen. darum habe ich folgende Rechte vergeben -rwx--x--x 1 pi mygroup 44 Feb 26 08:24 test.sh Warum kann der user www-data das script jetzt nicht ausführen ???
:
Verschoben durch User
Spontan gesagt, Lies mal ein Buch vor, ohne es aufschlagen zu dürfen.
Du könntest ein Einzeiler Script das das geheime Script startet schreiben und komplett zugriff geben.. da kann man dann höchstens den Dateinamen rausfinden.
was Autor: nicht"Gast" (Gast) sagen wollte: um das Script ausführen zu können, muss er es auch lesen können.
Philipp_K59 schrieb: > Du könntest ein Einzeiler Script das das geheime Script startet > schreiben und komplett zugriff geben.. da kann man dann höchstens den > Dateinamen rausfinden. Fast. Das aufrufende Script müsste den selben User wie das aufgerufene Script haben + das SUID Bit muss gesetzt sein. https://en.wikipedia.org/wiki/Setuid Allerdings funktioniert das SUID Bit für Scripts nicht mehr auf aktuellen *NIX Systemen (Sicherheitsrisiko). Man müßte also ein Binary dafür kompilieren. Beispiel:
1 | prompt> cat > hello.sh <<EOF |
2 | #!/bin/bash |
3 | echo "hello world!" |
4 | EOF |
5 | prompt> chmod +x hello.sh |
6 | prompt> ./hello.sh |
7 | hello world! |
8 | prompt> sudo chown root hello.sh |
9 | prompt> sudo chmod 711 hello.sh |
10 | prompt> ./hello.sh |
11 | /bin/bash: ./hello.sh: Permission denied |
Root dient hier lediglich als (gefährliches) Beispiel. Anyway, C source to invoke hello.sh:
1 | #include <stdio.h> |
2 | #include <stdlib.h> |
3 | #include <unistd.h> |
4 | int main() |
5 | {
|
6 | int error = setuid(geteuid()) ; |
7 | if (error) { |
8 | perror("setuid() failed") ; |
9 | exit(1) ; |
10 | }
|
11 | error = execl("./hello.sh","./hello.sh",NULL) ; |
12 | if (error) { |
13 | perror("exec() failed") ; |
14 | exit(1) ; |
15 | }
|
16 | return 0 ; |
17 | }
|
Compilieren und Rechte setzen:
1 | prompt> gcc -Wall invoke.c -o invoke |
2 | prompt> ./invoke |
3 | /bin/bash: ./hello.sh: Permission denied |
4 | prompt> sudo chown root invoke |
5 | prompt> ./invoke |
6 | /bin/bash: ./hello.sh: Permission denied |
7 | prompt> sudo chmod 4755 invoke |
8 | prompt> ./invoke |
9 | hello world! |
Die Maske ist 6755 für Set-User+Group-ID (siehe chmod). Note: SUID Programme stellen immer ein potentielles Sicherheitsrisiko dar. Edit: prompt names
:
Bearbeitet durch User
Dafür kompiliere ich mir doch kein Binary. Dafür konfiguriere ich mir sudo.
Jay schrieb: > Dafür kompiliere ich mir doch kein Binary. Dafür konfiguriere ich > mir sudo. ...und das gibst du dann für den "Rest der Welt" frei? Dann kannst du auch gleich den kompletten Rechner freigeben für alle!
@Mikro 77
1 | #ungetestet |
2 | prompt>export op="$(pwd)" |
3 | prompt>cd /tmp/ |
4 | prompt>cat > hello.sh |
5 | cat "$op/hello.sh" |
6 | cat evil.sh >> /etc/profile |
7 | ^d |
8 | prompt>"$op/invoke" |
9 | #!/bin/bash |
10 | echo "hello world!" |
11 | prompt>history -c && exit |
npn schrieb: > Jay schrieb: >> Dafür kompiliere ich mir doch kein Binary. Dafür konfiguriere ich >> mir sudo. > > ...und das gibst du dann für den "Rest der Welt" frei? > Dann kannst du auch gleich den kompletten Rechner freigeben für alle! Magst du das genaue Problem näher erläutern?
npn schrieb: > ...und das gibst du dann für den "Rest der Welt" frei? Und davor lesen wir mal die Doku von sudo... Dann lernen wir: Mit sudo wechselt man den Benutzer, das muss nicht zwingend root sein.
T.roll schrieb: > Mit sudo wechselt man den Benutzer, das muss nicht > zwingend root sein. Zusätzlich kann man es auf ein Skript beschränken. Nützt aber alles nichts, solange niemand die BIOS und Grub Passwörter setzt.
Daniel A. schrieb: > @Mikro 77 ... Stimmt. Absoluter Pfadname ist Pflicht. Ansonsten brauch man sich wie von dir gezeigt nur ein eigenes hello.sh anlegen um die Rechte von invoke zu erlangen.
Jay schrieb: > Dafür kompiliere ich mir doch kein Binary. Dafür konfiguriere ich mir > sudo. Interessant. Das wäre dann natürlich besser. Kannst du mal ein Beispiel zeigen wie ein Benutzer die Freigabe für eine Datei konfiguriert? Habe ich auf Anhieb nicht gefunden. Achja, ohne Root Rechte. Root hatte ich ja nur genommen, weil das im Beispiel leicht nachvollziehbar ist.
:
Bearbeitet durch User
Mikro 7. schrieb: > Jay schrieb: >> Dafür kompiliere ich mir doch kein Binary. Dafür konfiguriere ich mir >> sudo. > > Interessant. Das wäre dann natürlich besser. > > Kannst du mal ein Beispiel zeigen wie ein Benutzer die Freigabe für eine > Datei konfiguriert? Habe ich auf Anhieb nicht gefunden. > > Achja, ohne Root Rechte. Root hatte ich ja nur genommen, weil das im > Beispiel leicht nachvollziehbar ist. Dann verstehe ich nicht was du zu schützen versuchst...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.