Strona 1 z 1

skrypt php adduser + reser ftp

: 03 kwie 2012, 11:04
autor: wujeksamozuo
Hej, w trakcie pisania skryptu php napotkałem problem mianowicie jak za pomocą php moge w limuxie dodać użytkownika z konkretnym loginem i katalogiem domowym?
Czy należy np napisać jakis plik wykonywalny w którym bedą komendy dodawania usera i w skrypcie php dać polecenie uruchomienia go? czy jak? i kolejne pytanie, jak zrestartować proftpd z poziomu skryptu php?

Re: skrypt php adduser + reser ftp

: 03 kwie 2012, 11:19
autor: ethanak
Jeśli to ma być wykonane z poziomu serwera HTTP to zapomnij o takiej możliwości.

Re: skrypt php adduser + reser ftp

: 03 kwie 2012, 11:25
autor: wujeksamozuo
Dlaczego? w windowsie była możliwość uruchamiania np plikow bat z poziomu php.

Re: skrypt php adduser + reser ftp

: 03 kwie 2012, 11:53
autor: soulreaver1
Możesz przekazać dowolne polecenie z php do konsoli Linuxa za pomocą funkcji php "exec" lub "system".

Kod: Zaznacz cały

$sysquery = system("sh ~/scripts/useradd.sh $user $pass", $result);
useradd.sh:
#!/bin/bash
useradd $1
passwd $1 $2

Re: skrypt php adduser + reser ftp

: 03 kwie 2012, 12:11
autor: wujeksamozuo
No i własnie takiej odpowiedzi oczekiwałem :)
Jakiś przykład działania?

Kod: Zaznacz cały

<?php
echo exec("adduser NAZWA_USERA");
echo exec ("/opt/lampp/lampp stopftp");
echo exec ("/opt/lampp/lampp startftp");
Czy to będzie poprawne? a co z prawami admina? Pewnie bedzie wymagane podanie hasła administratora, jak to uzupełnic?

Re: skrypt php adduser + reser ftp

: 03 kwie 2012, 12:40
autor: ethanak
No i właśnie w tym problem że nie odpalisz bezpośrednio programu z prawami roota z poziomu serwera. Po prostu serwer uruchamiając zewnętrzne polecenie ignoruje bit SUID.
Jest możliwe obejście tego (sam to stosowałem), ale nie w php. Stąd moja odpowiedź że się nie da.
BTW. nie useradd ani adduser tylko newusers, soulreaver1 nie wpuszczaj ludzi w kanał próbując wyważać otwarte drzwi.

Tu masz przykładowy kod w C:

Kod: Zaznacz cały

#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

main()
{
    seteuid(0);
    setegid(0);
    setuid(0);
    setgid(0);
    system("/tu/polecenie/coś/robiące/z/prawami/roota");
}
Kompilujesz to, zmieniasz właściciela na root.root, dajesz chmoda 6755 i wywołujesz pośrednio przez skrypt w bashu.

Re: skrypt php adduser + reser ftp

: 03 kwie 2012, 13:14
autor: soulreaver1
ethanak pisze: BTW. nie useradd ani adduser tylko newusers, soulreaver1 nie wpuszczaj ludzi w kanał próbując wyważać otwarte drzwi.
Bardzo przepraszam że próbowałem pomóc :evil: . Widzę że przyjmujesz że celowo sugeruję komuś trudniejszy sposób rozwiązania problemu, a ja po prostu nie znałem wcześniej polecenia newusers, więc zaproponowałem rozwiązanie które znam.

Re: skrypt php adduser + reser ftp

: 03 kwie 2012, 13:19
autor: ethanak
Nic takiego nie sugeruję - po prostu zaznaczyłem że skoro istnieje polecenie robiące dokładnie to co jest potrzebne nie ma potrzeby tworzyć protez.
Zresztą Twój sposób i tak nie będzie działać (uprawnienia)...

Re: skrypt php adduser + reser ftp

: 03 kwie 2012, 22:46
autor: wujeksamozuo
Chłopaki zamiast sie kłócić lepiej powiedzieli byście mi krok po kroku jak sie do tego zabrac ;>
Moze zapytam jeszcze tak: Czy do utworzenia usera wymagane bedzie hasło admina i di restartu proftpd?

Re: skrypt php adduser + reser ftp

: 04 kwie 2012, 06:14
autor: ethanak
Przecież Ci napisałem wyraźnie. Jeśli nie zrozumiałeś to znaczy, że zadanie Cię przerasta.

Re: skrypt php adduser + reser ftp

: 04 kwie 2012, 07:41
autor: jacekalex
A ja tylko dodam, że wrzucanie skryptów z setuid 0 na serwer www jest delikatnie piszac niemądre (mam na myśli bezpieczeństwo), raczej radziłbym komunkację z zewnętrznym demonem przez soket, albo najprostsza opcja odpowiedni wpis wysłany do pliku logu i z drugiej strony Swatch, który zczytuje log i wykonuje odpowiednie akcje.

W dodatku, obecnie w Ubuntu Apache ma wbudowaną funkcję chroot, i jest chroniony Apparmorem, a jak appparmor i chroot pozwolą wykonać skrypt z setuid 0 z poziomu apacha, to mnie na ręku kaktus wyrośnie. :rotfl:

Poza tym pewno lamerstwo totalne wyłazi z samego problemu:
Czemu nie zastosujesz pam-mysql albo pam-postgresql, sktrypt php insertuje usera do bazy, serwer ftp korzysta z uwierzytelnienia pam (też wykorzystuje pam-*sql), przy próbie zalogowania automatycznie tworzy folder domowy pacjenta ( w Proftpd to jest wykonalne, w Pure-ftpd też), i gotowe.

To by było na tyle
:craz:

Re: skrypt php adduser + reser ftp

: 04 kwie 2012, 08:30
autor: ethanak
jacekalex pisze: a jak appparmor i chroot pozwolą wykonać skrypt z setuid 0 z poziomu apacha, to mnie na ręku kaktus wyrośnie. :rotfl:
Pytanie: co ma chroot wspólnego z suidem? Bo może czegoś nie wiem...
Pytanie drugie: jak często sukulenta podlewasz? Podobno za często nie można... A ładnie kwitnie? ;)
(uprzedzając: właśnie udało mi się z poziomu apacza wykonać jako root 'touch cośtam.txt')
Poza tym pewno lamerstwo totalne wyłazi z samego problemu:
To inna sprawa - ale może ktoś chce to zrobić właśnie w taki lamerski sposób?

Re: skrypt php adduser + reser ftp

: 04 kwie 2012, 09:02
autor: jacekalex
Właśnie jako root stworzyleś plik txt? gratulacje, widocznie nie masz włączonego apparmora dla Apacha, co wymaga zaistalowania libapache2-mod-apparmor (o ile pamiętam).
I jeśli ktoś zamierza wystawić Apacha na świat, to lepiej go włączyć.
Z resztą tu masz znacznie lepsze wyjaśnienie problemu shell_exec i takich skryptów:
http://forums.gentoo.org/viewtopic-p-6801366.html

Pozdrawiam
:craz:

Re: skrypt php adduser + reser ftp

: 04 kwie 2012, 09:36
autor: ethanak
jacekalex pisze:Właśnie jako root stworzyleś plik txt? gratulacje, widocznie nie masz włączonego apparmora dla Apacha, co wymaga zaistalowania libapache2-mod-apparmor (o ile pamiętam).
Mam - specjalnie na Twoją cześć włączyłem (konkretnie aby sprawdzić czy mi się to uda). Co do problemów z shell_exec i takich tam to walczyłem z tym ładnych parę lat temu, stąd conieco tricków w pamięci zostało :)

Zresztą - może coś zrobiłem źle, jeśli chcesz to sprawdź sam i mnie popraw (sposób podany parę postów wyżej).

Re: skrypt php adduser + reser ftp

: 11 kwie 2012, 23:49
autor: ekitowski
Jak by się uparł to można skorzystać z http://www.libssh2.org/, http://pecl.php.net/package/ssh2 i odpalamy sobie shella w php-ie i działamy - tylko czy w tym przypadku to jest sensowne rozwiązanie? Oczywiście to pytanie należy to tych z gatunku retorycznych...
Pozdrawiam