Portál AbcLinuxu, 30. dubna 2025 21:23
Tak už jsem vyřešil skoro všechny základní problémy v projektu, který v PHP-ku píšu. Poslední věc, se kterou si tak trošku nevím rady, je jak zajistit spouštění systémových příkazů jako iptables, nebo service ...(které může spouštět jenom root).
Dělat to přes sudo NOPASSWD se mi zdá docela hloupé, protože tím udělam docela díru do systému, která by se sice myslím dala nějak zalepit pomocí SELinuxu, ale do toho se mi nechce.
Existuje tedy nějaká dobrá metoda, jak to v PHP zajistit?
Předem děkuji za rady.
Tiskni
Sdílej:
restart_httpd.sh
ve kterym bude jen /sbin/service httpd restart
a do sudoerrs das neco jako
uzivatel ALL = NOPASSWD: /usr/local/bin/restart_httpd.sh
tim uzivateli povolis pres sudo poustet jen /usr/local/bin/restart_httpd.sh
sudo
. To už je lepší. Můžete si třeba vytvořit nějakého uživatele a sudo povolit jemu, z PHP pak spouštět pod daným uživatelem sudo -u
. Samozřejmě je nutné počítat s tím, že kdokoliv může vidět zdrojové kódy toho PHP (nebo nějaký konfigurační soubor, kam uložíte jméno/heslo toho uživatele), může spouštět i ten sudo skript.
ls -l /usr/sbin/suid-php: -r-sr-x--- root suidphp suid-php
head -1 aaa.cgi: #/usr/sbin/suid-php
potom by ešte bolo možné vytvoriť virtual host s iným User ako celý apache, a sudo povoliť len na tohoto užívateľa.
MyExec($command)
ktera teprve udela
exec ('sudo "'.AddSlashes($command).'"');
(pripadne zalogovani a dalsi veci) a dusledne volat to vzdy pres tuhle funkci.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.