Toon posts:

[linux][PHP][INN] commando van newsserver webbased uitvoeren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allemaal,

Ik heb een op INN & newsx gebaseerde newsserver opgezet. Deze wil ik gaan managen met een webinterface welke geschreven is in PHP. Het komt er in het heel kort op neer dat als ik een bepaalde knop indruk er een bepaald commando wordt uitgevoerd.

nu gaat dit bv met cat/ls/who perfect. Maar zodra ik een commando van de INN-server gebruik (ik verwijs naar dit bestand via een volledig pad) dan wordt het commando simpelweg niet uitgevoerd. bv newsgroepen toevoegen gaat als volgt.

code:
1
ctlinnd newgroup alt.test


Normaal zou de uitvoer van dit commando "ok" zijn. Echter krijg ik in mijn PHP output helemaal nix terug. Dus het is zeer aannemelijk dat het commando niet wordt uitgevoerd. Maar bv ls doet het perfect.

Eerst had ik problemen met elk commando. Maar na ESLinux uitgeschakeld te hebben was dit opgelost.

Wat ik dus niet begrijp is... waarom dit commando gewoon niet wordt uitgevoerd, terwijl andere commando; s het wel doen. ik heb ook op de bestanden zo hoog mogelijke rechten gezet... maar dit mocht ook niet baten. wat doe ik hier fout of ben ik vergeten ?

Dit is mijn PHP-code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Newsfeeder</title>
<style type="text/css">
<!--
body {
        background-color: #6CB5BB;
}
-->
</style></head>

Groep toevoegen

<body>

<form action="GroepToevoegen.php" METHOD="GET">
  <table width="200" border="0">
    <tr>
      <th scope="row"><div align="left">Groepnaam:</div></th>
      <td><input name="commando" type="text" size="100"></td>
    </tr>
    <tr>
      <th scope="row"><div align="left">Omschrijving:</div></th>
      <td><input name="commando2" type="text" size="100"></td>
    </tr>
    <tr>
      <th scope="row"><input name="submit" type="submit" value='Toevoegen'></th>
      <td>&nbsp;</td>
    </tr>
  </table>
  </form>

<?php
if(isset($_GET['commando'])){
echo "Deze groepnaam heeft u ingevuld: ".$_GET['commando']."\n";
$command = $_GET['commando'];
echo $command;
echo "Deze omschrijving heeft u ingevuld: ".$_GET['commando2']."\n";
$command2 = $_GET['commando2'];
echo $command2;

$temp = "./groupmanager newgroup $command";
echo "<pre>$temp</pre>";
$temp2 = "./addline.o newsgroups \"$command $command2\"";
echo "<pre>$temp2</pre>";
$output = shell_exec($temp);
echo "<pre>$output</pre>";
$output2 = shell_exec($temp2);
echo "<pre>$output2</pre>";
}
?>

</body>
</html>



De groupmanager (een symbolic link naar ctlinnd (het programma om newsgroepen aan de server toe te voegen) wordt hier dus niet uitgevoerd. Terwijl het addline programma wel zonder problemen uitgevoerd kan worden. Iemand die weet wat hier aan de hand is ? het commando groupmanager/ctlinnd werkt als deze met de hand wordt uitgevoerd echter wel.

  • mithras
  • Registratie: Maart 2003
  • Niet online
Bedoel je "met de hand" dat je eigen user dit kan uitvoeren, of dat Apache het ook mag uitvoeren. Ik neem aan dat je php als module laad en je php scripts door de apache gebruiker laat uitvoeren. Wat is de user die apache gebruikt, en mag die ook de symlink volgen & executen?

Verwijderd

Topicstarter
mithras schreef op maandag 24 september 2007 @ 14:44:
Bedoel je "met de hand" dat je eigen user dit kan uitvoeren, of dat Apache het ook mag uitvoeren. Ik neem aan dat je php als module laad en je php scripts door de apache gebruiker laat uitvoeren. Wat is de user die apache gebruikt, en mag die ook de symlink volgen & executen?
als ik het met de hand onder gebruiker root invoerd doet die het wel. En aangezien apache ook ls uitvoerd dachtik dat ctlinnd ook meot kunnen... maar blijkbaar niet. Nu moet ik eerlijk toegeven dat ik niet zo;n linux man ben... zit normaal in de embedded system wereld. hoe vraag ik de grouppolicy van apache op ? en hoe kan ik deze veranderen ?

  • mithras
  • Registratie: Maart 2003
  • Niet online
Verwijderd schreef op maandag 24 september 2007 @ 15:24:
[...]


als ik het met de hand onder gebruiker root invoerd doet die het wel. En aangezien apache ook ls uitvoerd dachtik dat ctlinnd ook meot kunnen... maar blijkbaar niet. Nu moet ik eerlijk toegeven dat ik niet zo;n linux man ben... zit normaal in de embedded system wereld. hoe vraag ik de grouppolicy van apache op ? en hoe kan ik deze veranderen ?
In de apache config (ligt aan je systeem waar die staat, beginnen te zoeken in /etc/apache of /etc/apache2 als je apache2 hebt is een goed idee ;) ) kan je de gebruiker uitlezen. Ik gok dat dat nobody is, dus als je su'd naar nobody en dan probeert de simlink te volgen weet je of dat het probleem is.

Verwijderd

Topicstarter
mithras schreef op maandag 24 september 2007 @ 15:27:
[...]
In de apache config (ligt aan je systeem waar die staat, beginnen te zoeken in /etc/apache of /etc/apache2 als je apache2 hebt is een goed idee ;) ) kan je de gebruiker uitlezen. Ik gok dat dat nobody is, dus als je su'd naar nobody en dan probeert de simlink te volgen weet je of dat het probleem is.
Bij mij is dit /etc/httpd/conf/httpd.conf --> in die file staat dat het de main config file van apache is ... ffe zoeken

Verwijderd

Topicstarter
hij draaid onder user apache. Maar als ik su apache doe dan krijg ik "
This account is currently not available" dit krijg ik ook als ik de server uit de lucht haal. Is er een manier hoe ik rechten voor een bepaalde groep gebruikers kan inzien en veranderen. in dit geval dan de groep apache?

Verwijderd

Topicstarter
ik doe nu dus dit en nog steeds geen response! van dat programma wat er instaat!

<Directory /usr/lib/news/bin>
Options All
AllowOverride All
</Directory>

  • MindStorm
  • Registratie: Juli 2002
  • Laatst online: 16-01-2024
Kun je even de output van /var/log/messages bekijken? Het klinkt een klein beetje alsof selinux toch nog aan staat. Kijk voor de zekerheid even in de selinux configuratie (voor redhat based distros staat die in /etc/sysconfig/selinux).

Verwijderd

Topicstarter
MindStorm schreef op dinsdag 25 september 2007 @ 11:16:
Kun je even de output van /var/log/messages bekijken? Het klinkt een klein beetje alsof selinux toch nog aan staat. Kijk voor de zekerheid even in de selinux configuratie (voor redhat based distros staat die in /etc/sysconfig/selinux).
ik heb /var/log/messages gekeken. Vind geen vermeldingen die verband houden met aanvragen die dit script doet. geen denieds of errors. enkel de standaard dingen

/etc/sysconfig/selinux voor de zekerheid nog ffe bekeken de de parameter
SELINUX staat op disabled. Dit had ik al een tijd geleden gedaan omdat ik eerst wel errors kreeg in /var/log/messages nadat ik dit had uitgezet waren de errors over.

ondanks dat ik geen errors krijg werkt het nog steeds allemaal niet :( is er geen manier dat ik bv kan loggen wat er gebeurd als dat commando wordt uitgevoerd. misschien dat er intern een foutmelding ofzo optreed. Ben al alleen met dit meer dan een week bezig maar kom er gewoon neit uit

Verwijderd

Verwijderd schreef op maandag 24 september 2007 @ 16:04:
hij draaid onder user apache. Maar als ik su apache doe dan krijg ik "
This account is currently not available" dit krijg ik ook als ik de server uit de lucht haal. Is er een manier hoe ik rechten voor een bepaalde groep gebruikers kan inzien en veranderen. in dit geval dan de groep apache?
Heeft je apache user wel een shell??

Dit kun je checken in de file: /etc/passwd
De velden in deze file zijn gescheiden door :

Het laatste veld is de shell voor de user..... Check dus de shell van apache, staat hier bv. /bin/false dan kan je nooit als user apache een command prompt krijgen.

Dit moet je dan ff aanpassen naar bv. /bin/sh dan nog ff een su apache

Als je eenmaal apache bent, dan kun je testen of je die commando's onder deze user kunt uitvoeren.

Ben niet zo van de news servers (nog nooit wat mee gedaan)... maar ik denk dat je met vrij grote zeker kunt zeggen dat het idd een rechten probleem is... De user root mag in principe alles, de apache user niet.

[ Voor 10% gewijzigd door Verwijderd op 26-09-2007 15:35 ]


Verwijderd

Topicstarter
Verwijderd schreef op woensdag 26 september 2007 @ 15:30:
[...]


Heeft je apache user wel een shell??

Dit kun je checken in de file: /etc/passwd
De velden in deze file zijn gescheiden door :

Het laatste veld is de shell voor de user..... Check dus de shell van apache, staat hier bv. /bin/false dan kan je nooit als user apache een command prompt krijgen.

Dit moet je dan ff aanpassen naar bv. /bin/sh dan nog ff een su apache

Als je eenmaal apache bent, dan kun je testen of je die commando's onder deze user kunt uitvoeren.

Ben niet zo van de news servers (nog nooit wat mee gedaan)... maar ik denk dat je met vrij grote zeker kunt zeggen dat het idd een rechten probleem is... De user root mag in principe alles, de apache user niet.
oke harstikke bedankt. Ik was nu idd kapabel om het commando onder de user apache uit te testen. nu weet ik iig wat het probleem is. iig een permissie probleem. ik heb het vermoeden dat ik het commando ctlinnd alleen kan uitvoeren als root of apache..... want krijg nu de volgende fout

code:
1
ctlinnd: cannot setup communication (mkstemp failure): Permission denied


Nu is de vraag waar ik dan apache dezelfde persmissies kan geven als news in voor dit specifieke commando. Ben iig al een heel stuk verder! bedankt daarvoor.

Als er iemand nog tips heeft hoor ik dat graag :D Ik ga weer ffe verder met uitzoeken

Verwijderd

Nu is de vraag waar ik dan apache dezelfde persmissies kan geven als news in voor dit specifieke commando. Ben iig al een heel stuk verder! bedankt daarvoor.

Als er iemand nog tips heeft hoor ik dat graag :D Ik ga weer ffe verder met uitzoeken
Tja... zoals ik eerder al zei heb ik nog nooit met een news server iets gedaan dus ik weet niet of je in de config van de news server zaken zo kan aanpassen dat de apache user dat soort dingen wel mag doen. Grote kans dat dit wel aan te passen is.

Maar goed... mocht dat niet zo zijn dan kun je dit uiteraard oplossen met "sudo". Hiermee kunnen normale users commando's uitvoeren als de root user. Als je bv. "ls" uit zou willen voeren als root dan tik je in je prompt: "sudo ls"

Nu ligt het aan je sudo config of ie dan om een password vraagt of niet... Als ie om een password vraagt moet je je eigen password gebruiken, niet het root password.

Uiteraard moet je sudo ook configgen om gebruikers rechten te geven om sudo te mogen gebruiken. Je kan gebruikers rechten geven voor enkele commando's of zelfs voor alle commando's. Ook kun je in deze config instellen of sudo dan om een password moet vragen of niet.

Aangezien je je apache user sudo rechten gaat geven, dit moet dus ook zonder password, omdat je dit vanuit scripts gaat aanroepen, brengt dit natuurlijk een security risk met zich mee. Je moet de apache user dus alleen sudo rechten geven voor de commando's waarvoor het echt nodig is.

De sudo config kun je aanpassen met het commando: "visudo"

Verder wordt het wel een heel lang verhaal als ik je ook moet uitleggen hoe je sudo moet configgen, maar daar is genoeg documentatie voor te vinden op internet. Mocht je problemen ondervinden en nog een vraag hebt moet je 'm maar stellen, dan kan ik je wel weer helpen.

  • mithras
  • Registratie: Maart 2003
  • Niet online
Verwijderd schreef op donderdag 27 september 2007 @ 10:02:
[...]

Aangezien je je apache user sudo rechten gaat geven, dit moet dus ook zonder password, omdat je dit vanuit scripts gaat aanroepen, brengt dit natuurlijk een security risk met zich mee. Je moet de apache user dus alleen sudo rechten geven voor de commando's waarvoor het echt nodig is.
Is in plaats van Apache sudo rechten geven, het niet 100x makkelijker en veiliger om ctlinnd de mogelijkheid geven om uitgevoerd te worden door gewone gebruikers?

Wat zijn de rechten van de symlink en het doel van de symlink. Je kan het uitvinden door dit uit te voeren, mits ctlinnd natuurlijk in /usr/local/bin staat ;)
ls -l /usr/local/bin/ctlinnd

Verwijderd

mithras schreef op donderdag 27 september 2007 @ 10:26:
[...]
Is in plaats van Apache sudo rechten geven, het niet 100x makkelijker en veiliger om ctlinnd de mogelijkheid geven om uitgevoerd te worden door gewone gebruikers?

Wat zijn de rechten van de symlink en het doel van de symlink. Je kan het uitvinden door dit uit te voeren, mits ctlinnd natuurlijk in /usr/local/bin staat ;)
ls -l /usr/local/bin/ctlinnd
Zoals je kan lezen heb ik ook gezegd dat het waarschijnlijk wel mogelijk is om vanuit de newsserver ervoor te zorgen dat de apache user rechten krijgt, alleen kan ik zo niet zeggen hoe... geen ervaring met newsservers.

Alleen zo gemakkelijk als jij het doet overkomen, is het zeker niet... Omdat je vanuit de eerder geposte foutmelding kunt opmaken dat de apache user wel rechten heeft tot het executen van het commando... er gaat iets anders fout met permissies.
Pagina: 1