MihaelMattes Blatt5
A
Systemnahe Software (II)
im Sommersemester 2009
Abgabetermin:27.Mai2009
16 Siherheit und das SUID-Bit (7 Punkte)
ShreibenSieeinProgrammpubat.,welhesalsArgumenteinenDateinamenerhält, die-
senalsrelativenPfadzumUnterverzeihnispub/IhresHeimatverzeihnissesinterpretiertund
dieentsprehendeDateiausgibt.Hinweis:SiedürfenIhrHeimatverzeihnisdirektindenCode
shreibenundmüssenesnihtausdemEnvironmentbeziehen.Dasnenntmanumgangssprah-
lihauhfestverdrahten.
WennSiedasProgrammselbstausführen,solltenalsofolgendeBefehledasselbeErgebnis
liefern:
$ at ${HOME}/pub/unter/datei.t xt
$ pubat unter/datei.txt
Angenommen,dieDateiwärevon jedemausführbarundbesäÿe dasSetUID-Bit(zuset-
zenmithmod +s pubatbzw.hmod 04xxx pubat).WelhesSiherheitsproblemstelltdies
(mindestens!)dar?NennenSiezweiMöglihkeiten,diesesProblemzubeheben.
tinysh erweitern
In den folgenden Aufgaben werden wir unsmit einer einfahen Shell-Implementierung,der
tinysh, befassen. In jeder Aufgabe gehtes darum,einen bestimmten Bereih der Shell zu
verbessernbzw.zuerweitern.
17 Builtin-Shnittstelle (7 Punkte)
ShaenSieindertinysheineShnittstelle,dieesermögliht,einfaheShell-Builtinseinzubau-
en.DiesesollenbevorzugtvoreventuellgleihnamigenBefehlenausgeführtwerden.
DergutenErweiterbarkeithalbersolljedesBuiltinderShellübereineeinheitliheStruktur
bekanntgegebenwerden.DieseStrukturenthältdenKommandonamendesBuiltinssowieeinen
har *mdname;
int (*funtion)(strlist* tokens);
}
Dietinyshmussüberprüfen,obdasersteTokenderZeilemitdemmdname einesBuiltins
übereinstimmtunddiesesdannggf.ausführen.
AlsBeispielfürdieVerwendungdieserStrukturkönnenSiedasBuiltinexitbetrahten:
int exit_builtin(strlist* tokens) {
exit(0);
return 0; // wird niht erreiht, ist aber syntaktish korrekt
}
strut builtin exitbuiltin;
exitbuiltin.mdname = "exit";
exitbuiltin.funtion = &exit_builtin;
// Alternativ geht es auh so direkt:
strut builtin exitbuiltin = {
"exit",
&exit_builtin
};
NoheinTipp:FallsSiedieseAufgabenihtshaen,könnenSiedienahfolgendenAufga-
bentrotzdemlösen,indemSiesihanobigemBeispielorientieren.
18 Builtin eho (3 Punkte)
ShreibenSieeinBuiltineho,welhesdieangegebenenArgumentewiederaufderStandard-
ausgabeausgibt.Vorsiht:BeidieserAufgabemüssenSiesiherstellen,dassauhwirklihIhr
Builtinausgeführtwirdundniht/bin/eho-testen Siediesggf.durhdasEinfügeneiner
ZusatzausgabeinIhrerImplementation.DasgleihegiltfürdiefolgendenbeidenAufgaben.
19 Builtin env (3 Punkte)
ShreibenSieeinBuiltinenv,welhesalleUmgebungsvariablenaufderStandardausgabeaus-
gibt.
20 Builtin setenv (3 Punkte)
ShreibenSieeinBuiltinsetenv,welheseineUmgebungsvariablezumEnvironmenthinzufügt.
SiekönnenaufdiePrüfungdoppeltvorhandenerUmgebungsvariablenverzihten.EinBeispiel
hierzuwäre:
A=1
%% setenv B=2
%% env
A=1
B=2
%% setenv A=3
%% env
A=1
B=2
A=3
%%
21 Parsererweiterung (7 Punkte)
ErweiternSiedenParserdertinyshso,dassnihtnurLeerzeihen,sondernauhTabulatorzei-
hen(Tabs)alsTrennzeihenzwishendenTokensstehenkönnen.