LinuxUnixSysProg

Zurück zur Liste der KursAngebote und zum ZeitPlan.

Linux/Unix Systemprogrammierung

Dieser Kurs bietet eine Einführung in die große Welt der Systemprogrammierung unter Unix (speziell GNU/Linux). Der Kurs beschränkt sich auf die Sprache C, da die meiste Systemprogrammierung unter Unix auf C basiert.

Kursprofil

Thema: Linux/Unix Systemprogrammierung

Veranstalter: Pablo Yanez Trujillo

Veranstaltungsart: Kurs (Theorie und Praxisübungen)

Termin: Montag, 14. August bis Donnerstag, 17. August vormittags (siehe ZeitPlan)

Ort: Gebäude 101, Raum 01-018

Schwierigkeitsgrad: {*}{*}{o}

Voraussetzungen: Der Kurs orientiert sich an Unix Anwendern, die mehr über ihre Systeme lernen wollen. Große Kenntnisse in C und/oder Unix/Linux sind nicht notwenidg, aber erwünscht. Auf jeden Fall sollte man mit einem Unix System bereits gearbeitet haben.

(Das Veranstaltungsprofil kann nur von Kursleitern geändert werden; dazu bitte einloggen.)

Teilnehmer

  1. Andrei Kouznetsov
  2. JanLienemann
  3. ranibhutada
  4. Virginie Seraphine NNANG (/!\ Konflikt mit AsteriskPBX)
  5. MarcoHaustein
  6. MatthiasHeizmann
  7. haytham (/!\ Konflikt mit AsteriskPBX und RobustCpp)
  8. TobiasMaier
  9. sheng
  10. BastianWissler
  11. MoritzGöbelbecker
  12. sundali
  13. MatthiasBraeunig

Die Teilnehmerzahl dieser Veranstaltung ist auf 13 Personen beschränkt. Bei Überbelegung bilden die in rot dargestellten Personen die Warteliste.
Die Veranstaltung findet nur statt, sofern sich mindestens 1 Person anmeldet.

<!> Um Dich für diesen Kurs anzumelden, musst Du Dich zunächst beim Sommercampus-Wiki einloggen.

Detailliertes Kursprogramm

Achtung: Der Kursinhalt und die Kursstruktur kann sich jeder Zeit ändern (z.B. manche Themen können an anderen Tagen gehalten werden oder neue Themen werden hinzugefügt).

Die Welt der Systemprogrammierung unter Unix ist sehr groß und kann sehr komplex werden. Für Anfänger oder nicht erfahrene Benutzer kann es deshalb schwierig werden, in die Systemprogrammierung einzusteigen, und manchmal ist es notwendig systemnah zu programmieren oder man will einfach mehr über das System lernen.

Dieser Kurs soll dabei helfen, in die Systemprogrammierung einzusteigen. Ich werde versuchen eine Ergänzung des Kurses CppLinuxKurs (gehalten von JanisFehr) anzubieten, deswegen werde ich nicht auf das [WWW] GNU Build System (autoconf,automake, usw) eingehen (außer wenn unsere Termine sich überschneiden sollten).

Dieser Kurs wird sich mit der Programmiersprache C befassen, da die meiste Systemprogrammierung unter Unix auf C basiert und die Systemfunktionen in C geschrieben sind (das heißt aber nicht, dass man C++ nicht benutzen kann).

1. Tag

2. Tag

3. Tag

4. Tag

Dokumente

1. Tag

[WWW] Folien Tag 1

[WWW] beispiele.tar.gz

2. Tag

[WWW] Folien Tag 2

[WWW] beispiele.tar.gz

3. Tag

[WWW] Folien Tag 3

[WWW] beispiele.tar.gz

4. Tag

[WWW] Folien Tag 4

[WWW] sc-cron-sources.tar.gz

SommerCampus CRON Projekt

Download:

[WWW] sc-cron-0.0.2.tar.gz

[WWW] sc-cron-0.0.2.tar.bz2

[WWW] save-exec.patch

ACHTUNG

/!\ Benutze diesen Mini Cron Server nur zu Testzwecken, du darfst ihn NIEMALS so ohne Patches in einer Produktiv Maschine einsetzen, wo mehrere Benutzer Zugriff haben! Denn sc-crontab stellt ein Backdoor für Hacker dar, mit dem man sehr schnell an Root Rechten kommen kann.

Dieses Backdoor wurde absichtlich von mir eingerichtet, damit man als Programmierer sehen kann, wie gefährlich eine Datei mit Besitzer root und mit gesetztem setuid-Bit sein kann, und dass man sehr vorsichtig sein muss, wenn die Binary das gesetzte setuid-Bit braucht.

Es liegt nun an dir die Quelle des Fehlers (Fehler in Makefile.am und sc-crontab.c) zu erkennen und diesen zu beheben, es gibt mehrere Möglichkeiten diesen Fehler los zu werden. Denk drüber nach. Vielleicht kommst du selber drauf, wenn du dir folgendes exploit anschaust:

supertux@supertux:~> cat mybash 
#!/bin/bash
 
echo program executes: $0 $@
 
/bin/bash --login
supertux@supertux:~> EDITOR=/home/supertux/mybash sc-crontab
program executes: /home/supertux/mybash /var/spool/sc-cron/tmp/supertux
root@supertux:~> whoami
root

Es existiert auch ein Patch für diese Lücke (das Patch implementiert noch gleich die -l == list Option für sc-crontab) [WWW] save-exec.patch

Installtion

#!/bin/bash
$ tar xzf sc-cron-0.0.2.tar.gz
  oder
$ tar xjf sc-cron-0.0.2.tar.bz2
$ cd sc-cron-0.0.2
$ <lade dir patch save-exec.patch herunter>
$ patch -p0 < save-exec.patch
$ ./autogen.sh
$ ./configure --prefix=/usr --localstatedir=/var/spool/sc-cron --with-pid-file=/var/run/sc-cron.pid
$ make && make install
$ cp support/sc-cron.init /etc/init.d/sc-cron
$ /etc/init.d/sc-cron start

Mit dem Befehl sc-crontab [user] kann man die cron jobs eintragen. Nur root kann die crontabs von anderen Benutzern editieren/löschen

Mit sc-crontab -r [user] kann man die cron jobs löschen.

Das Format der Cron Jobs: minute hour day month command

anders als wie bei vixie-cron, darf man keine Zeiten mit Kommas eingeben

0,5,10 * * * something

wird als

0 * * * something

geparst. Das liegt daran, dass der Parser sehr eingeschränkt arbeitet (weil das Projekt nur als Beispiel dienen soll).

Der Cron Server sollte mit /etc/init.d/sc-cron start gestartet werden und darf auschließlich von root gestartet werden. Der Cron Server generiert keine Ausgabe in die Console, die log Daten werden an syslog daemon geschickt.

Im Cronserver habe ich einige Sachen benutzt, die ich leider nicht im Kurs behandelt habe (syslog-Meldungen, signale, Vermeidung von Zombie-Prozesse), die aber an dem Sources sehr schnell erklärt werden können, wenn man sie durchliest.

Die Sources halten sich an den POSIX.1 Standards, also sollten sie unter den meisten Unix-Derivaten kompilieren lassen, die POSIX compilant sind wie GNU/Linux, BSD, Solaris, usw.