» »

[C] problem z system(), exec()... čuden izpis v konzoli

[C] problem z system(), exec()... čuden izpis v konzoli

Moravče ::

Lep pozdrav!

Programiram neko zadevščino in nikakor ne uspem pogruntati kaj je narobe. Zadeva se odvija v linuxu Ubuntu HH.

Gre pa takole, iz c programa bi rad izvršil sistemsko komando "sudo -k" (ker moraš imeti root privilegij za zadevo) in kolikor probam z system("sudo -k"), execvp("sudo -k", arg); arg = {NULL}... Zmeraj dobim v programu, ko ga zaženem nek čuden output: �Y���������������d̿�����̿�̿���| ; in zadeva se tudi ne izvede.

Kaj delam narobe?

Hvala in lep pozdrav!

PS: To je zadeva za neko seminarsko nalogo in nima nobene praktične vrednosti. Rabim pa tole izvest v njej.

zdobersek ::

Ce bi rad videl, ta bi tvoj program imel root privilegije, ga zaganjaj z "sudo program".

Moravče ::

Ja vem to, ampak bi ga rad na koncu odjavil. To rabim naredit, saj pravim da nima praktične vrednosti :) Hvala, lp!

fiction ::

Rad bi odjavil koga? Lahko pokazes cel program? Imam namrec filing, da v njem kar mrgoli varnostnih
ranljivosti. system("tvojukaz") naredi fork() in potem sin z execve() pozene /bin/sh -c tvojukaz.
Kar pomeni, da moras paziti, da v "tvojukaz" ni raznih posebnih znakov, ki jih shell po svoje intepretira
(ala ; & > ). Tudi drugace je zaradi manjsega overheada bolje, ce uporabis direktno execve() sistemski klic
oz. kaksno od njegovih ovojnic iz (g)libc-ja - exec*.

V tvojem primeru je program brez absolutne poti kar pomeni da lahko naredim nekaj ala:
export PATH=.:$PATH
ln -s /bin/sh ./sudo
./program
In mi bo tvoj program pognal ukazno lupino namesto "sudo -k".

Ce hoces, da program tece z visjimi privlegiji, je na UNIX-u na voljo set-user-id koncept.
Ta bit, ki ga nastavis s chmod izvrsljivi datoteki pomeni, da se bo program izvajal s privilegiji
lastnika datoteke in ne s tistimi od uporabnika, ki je program zagnal.

Ukaz passwd recimo ima tipicno lastnika root in nastavljen suid bit. Fora je v tem, da mora pri spremembi
gesla program pisati v /etc/shadow (navaden uporabnik pa ponavadi nima niti bralnega dostopa do te datoteke).
Tako dejansko navaden user pozene program, ki se izvaja potem kot root. Fora je v tem, da "passwd"
naredi le tocno dolocene zadeve kot administrator in nanj uporabnik ne more kaj dosti vplivati.
Ce bi po drugi strani program imel varnostno ranljivost in bi uporabnik lahko izvajal poljubne ukaze
kot root, potem je s tem zvisal svoje privilegije.

sudo program nima smisla - ce tisti uporabnik lahko poganja sudo, potem najbrz lahko naredi tudi "sudo -k", ne? :) Je pa drugace sudo se eden izmed suid root programov.

mojcica54 ::

Ojla!
Js mam pa eno vprasanje in sicer se v soli ucimo programiranja v C-ju. In sicer maromo zdej nardit eno seminarsko. Pa neke (kr veliko) ne znam in vas prosim za pomoc. tak nekak sm nardila: imam structe, ki jih zapisujem v binarne datoteke, zdej bi pa js dolocene te structe iz datoteke zbrisala, kak naj to nardim???
Hvala za pomoc!

BigWhale ::

Kar tako ven zbrisat ne mores. Bo treba datoteko odpret, prebrat ven stvari, ki jih zelis in zapisat nazaj v novo datoteko, tistih, ki bi jih rada zbrisala, pa enostavno ne zapises. :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

V enem izmed Ubuntujevih neuradnih ohranjevalnikov zaslona najdena zlonamerna koda (strani: 1 2 )

Oddelek: Novice / Varnost
748564 (6372) Ales
»

Nice summer reading

Oddelek: Informacijska varnost
172432 (1869) poweroff
»

Ubuntu 8.10 desktop - težave

Oddelek: Operacijski sistemi
252613 (2059) Gapi
»

Fedora in Red Hat strežniki kompromitirani! (strani: 1 2 )

Oddelek: Novice / Ostala programska oprema
769257 (6800) MrStein
»

disable root login

Oddelek: Operacijski sistemi
181478 (1168) 'FireSTORM'

Več podobnih tem