![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 148 Pomógł: 0 Dołączył: 16.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
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 ![]() thx z gory ![]() |
|
|
![]()
Post
#2
|
|
![]() Administrator serwera Grupa: Przyjaciele php.pl Postów: 909 Pomógł: 0 Dołączył: 12.08.2003 Skąd: /var/www/wroclaw.php Ostrzeżenie: (0%) ![]() ![]() |
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 ![]() -------------------- Powrót do przeszłości :)
![]() |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 10.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
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.
|
|
|
![]()
Post
#4
|
|
![]() Administrator serwera Grupa: Przyjaciele php.pl Postów: 909 Pomógł: 0 Dołączył: 12.08.2003 Skąd: /var/www/wroclaw.php Ostrzeżenie: (0%) ![]() ![]() |
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). -------------------- Powrót do przeszłości :)
![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 148 Pomógł: 0 Dołączył: 16.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
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
![]() 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 ![]() PS. sorry za literowki jak sie pisze o 4 nad ranem to tak jest :/ |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
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. ![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 148 Pomógł: 0 Dołączył: 16.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
adwol: wlasnie myslalem o czyms takim
![]() 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 ![]() 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 ![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
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
![]() 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). |
|
|
![]()
Post
#9
|
|
![]() Administrator serwera Grupa: Przyjaciele php.pl Postów: 909 Pomógł: 0 Dołączył: 12.08.2003 Skąd: /var/www/wroclaw.php Ostrzeżenie: (0%) ![]() ![]() |
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 ![]() Trzymajmy się zasady potrojonego bezpieczeństwa, a będziemy żyć długo bez siwych włosów... ![]() -------------------- Powrót do przeszłości :)
![]() |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 148 Pomógł: 0 Dołączył: 16.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
Bakus :
Co do tego to nie ma problemu zupelnie Skrypty ma obslugiwac maly hosting - powiedzmy 3 typy kont : -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 ![]() |
|
|
![]()
Post
#11
|
|
![]() Administrator serwera Grupa: Przyjaciele php.pl Postów: 909 Pomógł: 0 Dołączył: 12.08.2003 Skąd: /var/www/wroclaw.php Ostrzeżenie: (0%) ![]() ![]() |
Nie bądź taki skromny
![]() 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"... -------------------- Powrót do przeszłości :)
![]() |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 148 Pomógł: 0 Dołączył: 16.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
dlatego rzeczy typu postmaster admin da sie do banned przeciez adwol nawet napisal o sprawdzaniu poprawnosci danych
![]() |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
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ę? -------------------- |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 0 Dołączył: 29.08.2002 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
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). -------------------- pozd.
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
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] |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
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). |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
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. -------------------- |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
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?) ![]() ![]() -------------------- |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat To znaczy o co mam zapytać administratora - czy może mu wysłąć (strukture bazy?)
![]() ![]() 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 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 08:31 |