Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Linux+PHP] Skrypt dodajacy konto w systemie !
Forum PHP.pl > Forum > Gotowe rozwiązania
Yacho
Dostalem ostatnio zadanie napisania skryptu zakladajacego nowego uzytkownika w systemie (linux debian)
utworzylem sobie grupe z takimi prawami jakie ma miec nowy user utworzylem skel ale nadal nie wiem jak koncepcyjnie to rozwiazac...
komenda adduser prosi uzytkownika o podanie kilku danych z klwiatury - nie wszystkie mozna podac z linii komend - wiec jak rozwiazc etn problem na poziomie php (da sie wogole?)

ogolnie jestem tez w polu jesli chodzi o zabezpieczenia - nie zabardzo rozsadne wydaje sie nadanie praw roota skryptowi !

Kesetm zupelnie w lesie i nie mam pomyslu - z linuxem mam kontakt od tyogdnia i wydaje mi sie calkiem fajny - z php nieco dluzej ale jak to ze soba polaczyc nie wiem wogole....

Prosze was o wskazanie jakiejs drogi - na pomoc w r4ealizacji przyjdzie czas pozniej (choc oby nie smile.gif )

thx z gory smile.gif
Bakus
Straszliwie zamieszałeś (literówki), ale ja bym zaczął pisanie takiego skryptu od poznania komend jakie dodają userów, uprawnień systemowych jakie są wymagane, itd.

Jeżeli chodzi o bezpieczeństwo to zrób ten skrypt przez SSL, z jakąś wyrafinowaną kontrolą zakładanych kont i najlepiej (jeżeli założenia pracy tego nie definiują) konta mogą byś zakładane przez skrypt bopiero po zaakceptowaniu ich przez admina...

Chyba zbytno nie zagmatwałem odpowiedzi biggrin.gif
Volt3r
Za duzo ci nie pomoge, bo slabo znam php ale tylko ci podpowiem ze adduser to jest skrypt w ktorym trzeba odpowiadac na pytania. A domyslna komenda do dodawania kont jest useradd i do niej podajesz parametry takie jak login, haslo, katalog domowy etc. Jeszcze co do wykonywania z prawami roota to fakt nie jest dobry pomysl, ale istnieje cos takiego jak suid - daje limitowane przywileje roota jakiemus userowi.
Bakus
Na linuxie się zbytnio nieznam, ale chyba można utworzyć użytkownika - dla przykładu: "phpuser", który miał by możliwość wykonywania skryptów w obrębie katalogów userów i katalogu serwera i miałby prawo do wykonywania komendy "useradd"

Będzie to chyba najlepsze rozwiązanie problemu (a przynajmniej jedno z lepszych).

I tak możesz się Yacho cieszyć - pod łindołzem to zadanie nie do wykonania (względy bezpieczeństwa).
Yacho
Volt3r : dzieki - to ulatwi duzo bo juz myslalem ze bede musial uczyc sie basdha i pisac skrypt ktory przezuci mi adduser na linie komend - 1 problem rozwiazany smile.gif

wlasnie teraz sobie uswiadomilem ze raczej konieczna jest akceptacja takich kont przez admina - nic to jak dostane szczegoly projektu to bede sie meczyl dalej - tak czy siak dzieki za podpowiedzi i zachecam do dalszego pisania bo wydaje mi sie ze temat ciekawy smile.gif

PS. sorry za literowki jak sie pisze o 4 nad ranem to tak jest :/
adwol
Uruchamianie z WWW programu suidowego nie jest najlepszym pomysłem, ale są lepsze rozwiązania. I znów kłania się tu technologia bottom halves. Załóż sobie w jakimś SQLu najprostszą bazę z jedną tabelą z polami id, login, hasło, opis, status (plus ew. inne jeśli Ci są potrzebne). W skrypcie na WWW wsadzaj do bazy dane usera do założenia. Drugi skrypt uruchamiaj z rootowego crona np. co godzinę, wyciagaj w nim dane z bazy, sprawdzaj czy są poprawne i zakładaj userów (szkielet rozwiązania dla MySQLa):
[php:1:49dd6832ef]<?php
$res = mysql_query("select id, login, haslo, opis from uzytkownicy where status=0");
while ($row = mysql_fetch_array($res))
{
# tutaj sprawdzanie poprawnosci danych
$login = escapeshellarg($row['login']);
$haslo = escapeshellarg($row['haslo']);
$opis = escapeshellarg($row['opis']);
system("/usr/sbin/useradd -p $haslo -m -c $opis $login", $ret);
$status = ($ret == 0) ? 1 : 2;
mysql_query("update uzytkownicy set status='$status' where id='" . $row['id'] . "'");
}
?>[/php:1:49dd6832ef]
Jak to jest debian to jest tam takie narzędzie jak useradd (jak w większości linuksów). Działa ono wsadowo (jak to już zauważył Volt3r) i nie wymaga interakcji użytkownika. Poczytaj manual od niego to dowiesz się więcej.
Pole status jest po to byś później mógł sprawdzić którzy uzytkownicy zostali założeni poprawnie, a którzy nie.
W miejscu sprawdzania danych możesz sprawdzać np. czy opis nie jest za długi, albo czy nazwa użytkownika nie zawiera nieprawidłowych znaków, ale powinien to za Ciebie już zrobić useradd.
Możliwości jest mnóstwo. winksmiley.jpg
Yacho
adwol: wlasnie myslalem o czyms takim smile.gif
z tym ze myslalem ze lepiej by bylo zeobic 2 tabele - pierwsza zawierajaca userow dodanych 2ga userow oczekujacych na dodanie - ale widac twoj sposob jest lepszy dzieki temu baza mniejsza i wydajniejsza na tym szkielecie ebde mogl obsluzyc wiecej klas uzytkowinkow i wogole - fajny pomysl i dosc prosty nawet smile.gif))

tylko czy odpalanie tego skryptu ktory by dodawal w cronie jest bezpieczne ? czy takich rozwiazan uzywa sie powszechnie ? ;]

Pomyslalem tez ze ten skrypt moglby zostawiac po soobie loga to by ulatwilo wylapywanie abuserstwa winksmiley.jpg
adwol
Cytat
tylko czy odpalanie tego skryptu ktory by dodawal w cronie jest bezpieczne ? czy takich rozwiazan uzywa sie powszechnie ? ;]

Ja tak robie i wiem, że jeszcze kilka osób które znam również. Jak widziałem dyskusje na różnych listach i grupach na temat poprawności takiego rozwiązania to nie było jakichś krytycznych uwag poza oczywistymi, że należy sprawdzać wszelkie możliwe przypadki, zabezpieczyć dostęp do bazy, itp., słowem nic poza to co normalnie powinno się stosować przy pisaniu bezpiecznych programów.
Cytat
Pomyslalem tez ze ten skrypt moglby zostawiac po soobie loga to by ulatwilo wylapywanie abuserstwa winksmiley.jpg

Logiem jest w tym wypadku sama baza. Zauważ, że nie kasujemy nic tylko conajwyżej zmieniamy status z nowego (0) na założony (1) lub problematyczny (2).
Bakus
Do całokształtu można jeszcze dorzucić jakiś systemik, który wykluczał by możliwość zakładania kont typu admin, administrator, postmaster itp.
Wyobraśmy sobie sytuację w której jakiś ważniaczek zakłada sobie konto admin i bez problemu - posługując się tym kontem - wyciąga od innych użytkowników hasła i inne prywatne wiadomości...

Nie wiem, czy dodatkowo, użyszkodniki w systemie będą posiadały pocztę, ale takie zabezpieczenie by się przydało... nigdy nie wiadomo, co oszustowi do głowy strzeli winksmiley.jpg

Trzymajmy się zasady potrojonego bezpieczeństwa, a będziemy żyć długo bez siwych włosów... smile.gif
Yacho
Bakus :
Co do tego to nie ma problemu zupelnie

Skrypty ma obslugiwac maly hosting - powiedzmy 3 typy kont :

- mail
-mail +www
- mail + www + ssh

w formularzu dajesz Pole option z trzema typami konyt.
W systemie tworzysz 3 grupy z odpowiednimi uprawnieniami dla 3 typow kont. Kazda z trzech grup otrzymuje osobny GID (numer identyfikacyjny grupy uzytkownika)
kazdej pozycji z drop-down menu przypisujesz odpowiedni numer grupy - w ten sposob mozesz zakladac bezpiecznie tylko takie konto na jakie admin pozwoli

Mysle tez nad problemem zmiany rodzaju konta dla uzytkownika ale to juz sie zalatwi bo podstawowa koncepcja jest - jutro omawiam z kolega szczegoly i zabieram sie do pracy - znajac moje bledy skladniowe bedziecie mogli caly przebieg projektu zaobserwowac w php poczatkujacy smile.gif
Bakus
Nie bądź taki skromny smile.gif
Apropo UID - nie zmienia to faktu, że ktoś jako postmaster@twoj.system.mini.hostingowy.pl może wysyłać do innych prośby o hasła - z przyczyn "administracyjnych"...
Yacho
dlatego rzeczy typu postmaster admin da sie do banned przeciez adwol nawet napisal o sprawdzaniu poprawnosci danych winksmiley.jpg
spenalzo
A ja odświeże temat bo mam za zadanie zrobić zakładanie kont pocztowych w ramach konta na stronie WWW. Teraz pojawiają się następujące ptania:
1. rozumiem, że hasło nie może być zakodowane?
2. o co musze poprosić admina serwera, żeby można było zakładać skrzynki (pewnie czy jest serwer pocztowy:) ) - tzn jakie uprawnienia musiałby dostać ten skrypt, żeby móc dodawać użytkowników?
3. czy ten kod podany przez adwola nada się?
rachwal
Cytat
[php:1:01611f05f8]<?php
$res = mysql_query("select id, login, haslo, opis from uzytkownicy where status=0");
while ($row = mysql_fetch_array($res))
{
# tutaj sprawdzanie poprawnosci danych
 $login = escapeshellarg($row['login']);
 $haslo = escapeshellarg($row['haslo']);
 $opis = escapeshellarg($row['opis']);
 system("/usr/sbin/useradd -p $haslo -m -c $opis $login", $ret);
 $status = ($ret == 0) ? 1 : 2;
 mysql_query("update uzytkownicy set status='$status' where id='" . $row['id'] . "'");
}
?>[/php:1:01611f05f8]


Ostatnio takze mialem podobny problem -- obawiam sie ze myk z -p $haslo nie przejdzie jesli haslo nie jest encryptowane (w sensie jest plain-textem).
adwol
Cytat
Ostatnio takze mialem podobny problem -- obawiam sie ze myk z -p $haslo nie przejdzie jesli haslo nie jest encryptowane (w sensie jest plain-textem).

Dobre spostrzeżenie. Zamiast:
[php:1:908ba32c08]<?php
$haslo = escapeshellarg($row['haslo']);
?>[/php:1:908ba32c08]
powinno być:
[php:1:908ba32c08]<?php
$haslo = escapeshellarg(crypt($row['haslo']));
?>[/php:1:908ba32c08]
adwol
Cytat
1. rozumiem, że hasło nie może być zakodowane?

Niekoniecznie. To zależy jak chcesz to hasło weryfikować.
Cytat
2. o co musze poprosić admina serwera, żeby można było zakładać skrzynki (pewnie czy jest serwer pocztowy:) ) - tzn jakie uprawnienia musiałby dostać ten skrypt, żeby móc dodawać użytkowników?

Ci userzy mają być jednocześnie systemowi czy tylko pocztowi? A jeśli tylko pocztowi to gdzie są trzymani (plik tekstowy, SQL, LDAP)? Jeśli będą jednocześnie systemowymi to musisz mieć uprawnienia administratora, jeśli nie, to musisz mieć możliwość zapisu tam gdzie są trzymani.
Cytat
3. czy ten kod podany przez adwola nada się?

W oryginalnej formie, prawdopodobnie nie. Ten skrypt zakłada zwykłego systemowego użytkownika pod linuksem, więc jeśli będziesz ich miał gdzie indziej to na nic Ci sie nie przyda. Poza tym nie robi nic więcej co pewnie będziesz potrzebował (ustawienie aliasów, skrzynki, itp).
spenalzo
Cytat
Cytat
1. rozumiem, że hasło nie może być zakodowane?

Niekoniecznie. To zależy jak chcesz to hasło weryfikować.

Mam je akodowane poprzez MD5, ale konto mogloby być zakłądane przy rejestracji.

Cytat
Ci userzy mają być jednocześnie systemowi czy tylko pocztowi? A jeśli tylko pocztowi to gdzie są trzymani (plik tekstowy, SQL, LDAP)? Jeśli będą jednocześnie systemowymi to musisz mieć uprawnienia administratora, jeśli nie, to musisz mieć możliwość zapisu tam gdzie są trzymani.

Dane są trzymane w bazie mysql, konto to ma być jedynie zwykłe konto pocztowe.
adwol
Cytat
Dane są trzymane w bazie mysql, konto to ma być jedynie zwykłe konto pocztowe.

No to założenie konta jest równe zrobieniu wpisu w bazie. Nie potrzebujesz więc uruchamiania żadnych programów systemowych ani uprawnień ponad te wystarczające do zapisu w bazie.

Co do kodowania haseł to zapytaj administratora jakiego formatu wymaga podsystem pocztowy.
spenalzo
Cytat
No to założenie konta jest równe zrobieniu wpisu w bazie. Nie potrzebujesz więc uruchamiania żadnych programów systemowych ani uprawnień ponad te wystarczające do zapisu w bazie.

To znaczy o co mam zapytać administratora - czy może mu wysłąć (strukture bazy?) questionmark.gif Teraz mnie troche zadziwiłeś 8O winksmiley.jpg
adwol
Cytat
To znaczy o co mam zapytać administratora - czy może mu wysłąć (strukture bazy?) questionmark.gif Teraz mnie troche zadziwiłeś  8O winksmiley.jpg

A o co Ty w ogóle pytasz? Bo tak skaczesz między pojęciami i nie sprecyzowałeś co chcesz zrobić.

Piszesz:
Cytat
1. rozumiem, że hasło nie może być zakodowane?

Ale jakie hasło? Do czego? Gdzie jest przechowywane? Czy baza w której jest to hasło jest wykorzystywana do czegoś jeszcze? Jak będziesz je weryfikował?

Zadajesz nieprecyzyjne pytania to dostajesz nieprecyzyjne odpowiedzi.

Napisz od początku i dokładnie co już jest i co chcesz zrobić.
Odpowiedz sobie na pytania:
:arrow: co Ty w ogóle masz zrobić (zarządzanie użytkownikami systemu pocztowego?)
:arrow: gdzie ma być baza użytkowników i kto decyduje o jej formie (Ty czy administrator)
:arrow: czy dorabiasz coś do istniejącego rozwiązania czy tworzysz od zera
:arrow: jeśli rozszerzasz coś istniejącego to co to jest i jak funkcjonuje
spenalzo
Przepraszam :oops: , już pisze:
1. jest sobie portal (w budowie), którego właściciel chce, żeby przy rejestracji użytkownik dostawał własną skrzynkę pocztową w domenie portalu.
2. baza i skrypty są całkowicie stworzone przeze mnie
3. hasło do konta jest przy rejestracji zapisywane poprzez md5 do bazy
4. z administratorem serwera nie gadałem, bo na razie nie wiem, czego zażądać, a nie chce z czymś głupim wyjechać
5. robie wszystko od zera, wiec ze zmiana nie ma problemu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.