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: ![]()
![]()
![]()
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
- Andrei Kouznetsov
- JanLienemann
- ranibhutada
- Virginie Seraphine NNANG (
Konflikt mit AsteriskPBX) - MarcoHaustein
- MatthiasHeizmann
- haytham (
Konflikt mit AsteriskPBX und RobustCpp) - TobiasMaier
- sheng
- BastianWissler
- MoritzGöbelbecker
- sundali
- 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
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
Überblick über Unix und Unix-Systemprogrammierung
kurze Einführung in ANSI C
Standard I/O-Funktionen
2. Tag
Elementare I/O-Funktionen
(Dateien, Verzeichnisse, Attribute) [Zeit abhängig]
Information zum System und seinen Benutzern
3. Tag
Der Unix Prozess und die Prozesssteuerung
Daemonprozesse
Kommunikation der Prozesse (durch Pipes)
(Netzwerkprogammierung)
4. Tag
Praxis: Verschiedene Übungen zu den behandelten Themen
Dokumente
1. Tag
2. Tag
3. Tag
4. Tag
SommerCampus CRON Projekt
Download:
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)
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.