/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
Afvikle script som uprivilegeret der skal ~
Fra : PP


Dato : 29-10-06 08:05

Jeg har et CGI script, som afvikles som den uprivilegerede apache bruger.

Scriptet skal udføre en kommando (iptables -A) igennem f.eks. system() men
iptables kræver at man er root.

Hvad gør man i sådan et tilfælde?

PP

PS. også spurgt i .perl, men det er vist mere et UNIX spørgsmål



 
 
Jesper Krogh (29-10-2006)
Kommentar
Fra : Jesper Krogh


Dato : 29-10-06 08:08

I dk.edb.system.unix, skrev PP:
> Jeg har et CGI script, som afvikles som den uprivilegerede apache bruger.
>
> Scriptet skal udføre en kommando (iptables -A) igennem f.eks. system() men
> iptables kræver at man er root.
>
> Hvad gør man i sådan et tilfælde?

laver et script der gør det og delegerer permission til den bruger
apache kører som med sudo, så den kan lave en

sudo script

uden at blive promptet for password. (se man sudoers)

Hvorfor et specielt script? Ellers kan du ikke sikre at brugeren ikke
samtidigt kan lave en -X eller -F

Jesper
--
../Jesper Krogh, jesper@krogh.cc, Jabber ID: jesper@jabbernet.dk


Thorbjørn Ravn Ander~ (29-10-2006)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 29-10-06 08:37

"PP" <pp@pp.pp> writes:

> Jeg har et CGI script, som afvikles som den uprivilegerede apache bruger.
>
> Scriptet skal udføre en kommando (iptables -A) igennem f.eks. system() men
> iptables kræver at man er root.
>
> Hvad gør man i sådan et tilfælde?

En passende opsat sudo.

--
Thorbjørn Ravn Andersen

Christian E. Lysel (29-10-2006)
Kommentar
Fra : Christian E. Lysel


Dato : 29-10-06 11:06

On Sun, 2006-10-29 at 08:05 +0100, PP wrote:
> Jeg har et CGI script, som afvikles som den uprivilegerede apache bruger.
>
> Scriptet skal udføre en kommando (iptables -A) igennem f.eks. system() men
> iptables kræver at man er root.
>
> Hvad gør man i sådan et tilfælde?

Er det muligt for mig at kalde scriptet med argumenter?

Kan man evt. styre system() kaldet via argumenterne?

Hvad sker der hvis et argument er a="192.168.0.1 ; rm -rf /" og
kaldet er system(iptables -A input -j ACCEPT -s $a)?


Jeg fandt på denne metode, sidst en spurte om noget ligende.

http://groups.google.com/group/dk.edb.system.unix/msg/7c8b8da83de43730





Kent Friis (29-10-2006)
Kommentar
Fra : Kent Friis


Dato : 29-10-06 13:13

Den Sun, 29 Oct 2006 11:06:00 +0100 skrev Christian E. Lysel:
> On Sun, 2006-10-29 at 08:05 +0100, PP wrote:
>> Jeg har et CGI script, som afvikles som den uprivilegerede apache bruger.
>>
>> Scriptet skal udføre en kommando (iptables -A) igennem f.eks. system() men
>> iptables kræver at man er root.
>>
>> Hvad gør man i sådan et tilfælde?
>
> Er det muligt for mig at kalde scriptet med argumenter?

Ja.

> Kan man evt. styre system() kaldet via argumenterne?

Ikke forstået.

> Hvad sker der hvis et argument er a="192.168.0.1 ; rm -rf /" og
> kaldet er system(iptables -A input -j ACCEPT -s $a)?

Så har du meget fri plads...

Sørg ALTID for at validere input, inden du overhovedet begynder at
overveje system() og/eller sudo.

Mvh
Kent
--
"So there I was surrounded by all these scary creatures
They were even scarier than what Microsoft call features"
- C64Mafia: Forbidden Forest (Don't Go Walking Slow).

Søren Reinke (29-10-2006)
Kommentar
Fra : Søren Reinke


Dato : 29-10-06 14:01

Kent Friis wrote:
>
>> Hvad sker der hvis et argument er a="192.168.0.1 ; rm -rf /" og
>> kaldet er system(iptables -A input -j ACCEPT -s $a)?
>
> Så har du meget fri plads...

Yeps, et glimrende eksempel på en injection via en form

Nej hvor kunne mange sikkerhedshuller være undgået hvis folk huske en
vigtig regel i brug af data fra brugeren.

Stol ALDRIG på data fra brugeren !

>
> Sørg ALTID for at validere input, inden du overhovedet begynder at
> overveje system() og/eller sudo.

I det hele tage valider input, escape karakterer der kan lave ballade,
kør regexp så input kun er gyldig input osv.

--
Best regards
C.T.O. Søren Reinke
www.Xray-Mag.com Your free online dive magazine
Download it in PDF, just like a real magazine

Kent Friis (29-10-2006)
Kommentar
Fra : Kent Friis


Dato : 29-10-06 14:21

Den Sun, 29 Oct 2006 14:01:00 +0100 skrev Søren Reinke:
> Kent Friis wrote:
>>
>>> Hvad sker der hvis et argument er a="192.168.0.1 ; rm -rf /" og
>>> kaldet er system(iptables -A input -j ACCEPT -s $a)?
>>
>> Så har du meget fri plads...
>
> Yeps, et glimrende eksempel på en injection via en form
>
> Nej hvor kunne mange sikkerhedshuller være undgået hvis folk huske en
> vigtig regel i brug af data fra brugeren.
>
> Stol ALDRIG på data fra brugeren !
>
>>
>> Sørg ALTID for at validere input, inden du overhovedet begynder at
>> overveje system() og/eller sudo.
>
> I det hele tage valider input, escape karakterer der kan lave ballade,
> kør regexp så input kun er gyldig input osv.

Regexp er måske overkill i denne situation, der skal man kende syntax'en
ret godt for at være sikker på at man ikke har åbnet for en uheldig
kombination. Et ip-nummer er rimelig simpelt at genkende.

Iøvrigt findes der funktioner til at lave et ip-nummer om til en 32-bit
integer, og tilbage igen, så er man sikker på outputet er et ip-nummer.
Samtidig er det nok også nemmere at checke en integer for om den har
en acceptabel værdi, så folk ikke åbner for broadcast, multicast og
alt muligt andet underligt.

Mvh
Kent
--
"So there I was surrounded by all these scary creatures
They were even scarier than what Microsoft call features"
- C64Mafia: Forbidden Forest (Don't Go Walking Slow).

Benny Amorsen (29-10-2006)
Kommentar
Fra : Benny Amorsen


Dato : 29-10-06 14:51

>>>>> "SR" == Søren Reinke <soren@REMOVE.reinke.dk> writes:

SR> Stol ALDRIG på data fra brugeren !

Et af problemerne er interfaces, der ikke er klart strukturerede. Det
kan være ganske vanskeligt at validere, at en streng ikke fører til
noget uhensigtsmæssigt, hvis den sendes til en shell. Det er noget
nemmere at benytte system() med flere argumenter (i tilfældet perl),
så man har en klar struktur på argumenterne og ikke er afhængig af en
shell.


/Benny


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste