execute as root

Submitted by Jancis on Mon, 05/30/2005 - 09:34

Savajadzējās no http* PHP skripta nokopēt konfigurācijas failu no vienas temp mapes uz /etc tomēr reāli to tā vienkārši nevar izdarīt. Kāpēc? - Tapēc, ka webserveris griežas ar parasta lietotāja tiesībām, bet sistēmas failus var rediģēt tikai superlietotājs - root.

Risinājumu meklējumos nonācu pie secinājumiem, ka:
1. Tam sistēmas failam var nomainīt permisijas tā, lai webservera lietotājs to var rediģēt.
2. Nomainīt webservera lietotāju pret root.
3. crontab var ik pa laikam to izdarīt automātiski ar root tiesībām
4. kāda cita programma tiek izpildīta un tā vai nu pati autorizējas kā root un to izdara vai arī tai programmai ir parametrs, kas izpilda citu programmu ar root tiesībām.

PHP komendu izpilde: http://lv.php.net/manual/en/ref.exec.php

1. risinājums nav slikts. Tikai daudzām linux sistēmām ir mode crontabā ielikt skriptu, kas pārbauda avi sistēmas faili nav world-writable vai kautkādā citā veidā zaudējuši savu drošību...

2. Par webserveri ar root tiesībām uzreiz aizmirsu.. nederīgs risinājums.

http://www.start-linux.com/articles/article_165.php

3. Noderīgi, tomēr tad būtu jāgaida konkrēts laika posms līdz crontab to izdara. Gribas lai tas notiek uzreiz.

Crontab apraksts: http://www.adminschoice.com/docs/crontab.htm
Crontab ģenerators: http://www.htmlbasix.com/crontab.shtml

4. Jau meklēju un atradu tādus variantus, kā expect, kas var autorizēties un arī parastu GCC programmu, kas dara to pašu..

Expect: http://expect.nist.gov/
Izpilde caur citu programmu: target="_blank">http://www.faqts.com/knowledge_base/view.phtml/aid/17492/fid/51

--
Here is a simple C program to do that.

run.c:

#include <stdio.h&gt
#include <unistd.h>

#define RUN_CMD "cmd" //the command to be run

int main(){
setreuid(geteuid(),geteuid());
system(RUN_CMD);

return(1);
}

Replace cmd with the command to run, then compile and change the
permissions etc.

gcc run.c
chown root a.out
chmod 4755 a.out
--

Tas vel nav viss.. tā kā uz servera PHP Safe_mode = On, tad nepieciešams norādīt safe_mode_exec_dir uz kādu mapi no kuras atļauta programmu izpilde PHP.

Atradu interesantus tutoriāļus arī te: http://www.startlinux.co.nz/