|
| 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
| |
|
|