IT-Academy Logo
Sign Up Login Help
Home - Betriebssysteme - Unix - Allgemeines - Das SUID-Bit



Das SUID-Bit

Der suid (setuserid +s) und der setgroupid mechanismus werden erklärt.


Autor: Franz Schaefer (mond)
Datum: 20-02-2002, 18:21:55
Referenzen: man chmod
man find
info find
Schwierigkeit: Anfänger
Ansichten: 7626x
Rating: 8 (1x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Übersicht

ueber die grundlagen von unix permissions haben wir ja schon im kapitel
"chmod chown" gehoert. (eventuell nachlesen).

kurz zur widerhohlung: jede datei und jedes verzeichniss gehoeren immer
einem user und einer gruppe. wer in der gruppe ist wird in /etc/group
festgelegt.

was der user und was die gruppe duerfen wird mit permission bits
festgelegt die man mit dem chmod befehl aendern kann. zusaetzlich kann man
festlegen was leute tun duerfen die nicht der user sind oder gruppe
angehoeren. (schreib lese und ausfuehrungsrechte).

ein user ist so in einer art kaefig eingesperrt. er kann nur auf files
zugreifen fuer die er (oder einer gruppe der er angehoert) rechte hat.
auch wenn er programme ausfuehrt dann haben die programme genau die selben
rechte wie er.

manchmal muss ein user allerdings sachen duerfen die er eigentlich nicht
darf. z.b: um mit dem passwd befehl sein passwort aendern zu koennen muss
man schreib und leserechte auf die files /etc/passwd bzw /etc/shadow
haben. jeder user soll normalerweise sein passwort aendern koennen soll
aber nicht generelle schreib und leserechte auf diese sensiblen files
haben.

man braucht also einen mechanismus wie ein user (bzw die programme die ein
user startet) eingeschraenkt hoehere rechte bekommt. dazu waeren
verschiedene mechanismen denkbar. der in unix hautpsaechlich verwendete
ist das "set user id" bit. auch kurz suid bit (manchmal auch "sticky" bit)
genannt. ist dies bei einem ausfuehrbaren programm gesetzt so wird im
gegensatz zur normalen ausfuehrung das programm nicht mit den selben
berechtigungen des users ausgefuehrt der das programm ausgefuehrt sondern
mit den berechtigungen des eigentuemers der datei (der der als "user" fuer
die datei eingetragen ist.. -> siehe ls -l ). z.b:

ls -l /usr/bin/passwd

zeigt uns:

-rwsr-xr-x 1 root root 25692 Mar 8 2001 /usr/bin/passwd
^
|
\_______ s .. das setuid bit.

das s an der stelle an der normalerweise das x.. (fuer eXecutable -
ausfuehrbares programm) sthen wuerde ist das suid bit. es besagt in obigem
falle dass jeder der das passwd programm aufruft (und aufrufen duerfen es
in obigem falle alle user auf diesem system) es mit den berechtigungen vom
"root" user tut. das programm wenn es also einmal laeuft hat "root"
permissions und darf alles tun was auch root tun duerfte.

d.h. diese programme haben eine "hohe verantwortung". sie muessen so
geschrieben sein dass sie nur die funktionen ausfuehren fuer die sie
gedacht sind und nicht fuer etwas missbraucht werden duerfen. im obigen
fall ist das passwd programm so geschrieben dass es abprueft wer das
programm wirklich aufgerufen hat uns jedem user ausser root nur das
aendern des eigenen passwortes erlaubt.

analog funktioniert das mit dem "set groupid" bit. ein programm dass dies
gesetzt hat wird mit den gruppenberechtigungen der gruppe ausgefuehrt der es
gehoert und nicht mit den berechtigungen der gruppe der der aufrufer
angehoert. z.b. das programm wall:

ls -l /usr/bin/wall

(das wall programm schreibt eine nachricht auf die consolen aller
eingelogten personen)

die permissions sind:

-rwxr-sr-x 1 root tty 9276 Mar 8 2001 /usr/bin/wall
^
|
\__ s .. set groupid.

das programm darf wiederum von allen ausgefuehrt werden wird aber, sobald
es gestartet wurde mit den berechtigungen der gruppe "tty" ausgefuehrt.
diser gruppe gehoern ueblicherweise die /dev/pty* geraete. mitglieder
dieser gruppe duerfen also von allen terminals lesen und schreiben. das
programm wall kann jetzt natuerlich so programmiert sein dass es
zusaetzliche einschraenkungen hat wer jetzt wall benutzen darf und was er
damit tun kann. hat aber die moeglichkeit auf alle terminals eine meldung
zu schreiben.

WICHTIG: man sollte also niemals ein +s bit sezten ohne genau zu wissen
was man tut. nur ein programm dass auch sicher geschrieben ist sollte ein
suid bit haben. das weiss normalerweise nur (hoffentlich) der programmier.


chmod u+s /usr/bin/irgendeinprogramm

wuerde das +s bit setzen. (wie gesagt: DO NOT TRY THIS AT HOME).

chmod u-s /usr/bin/irgendeinprogramm

wuerde das s bit wieder entfernen.

mit

find /usr -perm +6000 -type f

kann man. z.b. alle programme auflisten die entweder das suid oder das
set_grupeid gesetzt haben. (genaueres dazu in der man page oder dem info
file zu find)

EXERCISES:

* suche mit find files die ein suid oder "set groupid" bit haben. sieh dir
mit ls -l an wem die files gehoeren. ueberleg dir warum die files das s
bit gesetzt haben.

_______________________________________________
CD ist ein service von SILVER SERVER
der inhalt unterliegt der GFDL
_______________________________________________



[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06246
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1154
Comments: 0