ABSTRACT: der suid (setuserid +s) und setgroupid mechanismus werden erklaert AUDIENCE: junior admin SYSTEM: any unix SECTION: basic unix commands AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt 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. REFERENCES: man chmod man find info find