Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam! Mam stworzony katalog /home/www, w którym trzymam wszystkie katalogi ze stronami użytkowników(/home/www/login_użytkownika). Mam skonfigurowany serwer Proftpd (każdy użytkownik ftp ma swój katalog w /home/www/login_użytkownika i tam wrzuca swoje stronki). Wszystkich użytkowników przechowuje w Mysqlu. W Apache mam stworzonego jednego virtualhosta, który obsługuje wszystkich użytkowników. Czy jest możliwa konfiguracja apache w ten sposób, aby każdy użytkownik miał prawa do przeglądania swojego katalogu i nie mógł przeglądać katalogów innych użytkowników. Każdy skrypt powinien wykonywać się z prawami danego użytkownika. Proszę o odpowiedz.
Offline
Jest możliwe. IMHO najlepiej aby pliki stron były w /home/user/katalog_na_www (czyli np standardowo /home/user/public_html) Do tego dla każdego użytkownika robisz vhosta. Ale wcześniej instalujesz apache2-mpm-prefork tudzież kompilujesz go samemu i instalujesz suPHP (dla skryptów PHP) i w konfiguracji vhosta dodajesz
suPHPUser uzytkownik suPHPGroup grupa
lub instalujesz modul suExec (dla skryptów cgi). Tym sposobem masz użytkownika zamkniętego w obrębie jego "hołma" a skrypty PHP wykonują się z jego uprawnieniami. Dobra rzecz to ustawić w php.ini execdir (czy coś w ten deseń) i poblokować większość poleceń a do execdir dodać symlinki do tych które będzie można wykonać z poziomu php.
Z tego co przetestowałem to standardowo Debianowy apache (o AFAIR apache2-mpm-worker) nie łapie suPHP ani suExec dlatego trzeba go albo przekompilować albo zainstalować mpm-prefork.
Jak nie chce Ci się robić dla każdego użyszkodnika vhosta poczytaj o mechanizmie massvhost w apache.
Offline
Nie wiem czy to jest dobre rozwiązanie. Jeśli by ktoś mógł proszę, aby napisał bardzo ogólnie jak takie coś skonfigurować. Mam skonfigurowany proftpd tak, że każdy użytkownik ma w katalogu /home/www swój katalog i tam przez ftp wrzuca swoje stronki. Użytkownicy proftpd są odseparowani i przechowywani w bazie mysql. Mam jeden zewnętrzny adres ip i w apache mam jednego virtual hosta dla tego ip. Główny katalog virtual hosta to /home/www (ten sam co proftpd), w którym przechowywane są stronki wszystkich użytkowników. Użytkownik wyświetla swoją stronkę tak: http://adres_ip/nazwa_użytkownika1, http://adres_ip/nazwa_użytkownika2. Czy da się ich jakoś odseparować, aby jeden user nie mógł przeglądać katalogów innego usera?
Offline
Może za bardzo zamotałem.
Mój FTP (dokładniej proFTPd) jest połączony z MySQL i konta FTP są tworzone tylko dla userów z bazy (automatycznie za pomocą skryptów). Każdy user z bazy ma swój katalog /home/www/users i chciałem właśnie dla tych userów dać możłiwość nie tylko posiadania kont FTP ale także, aby mogli sobie robić swoje strony WWW. Zależało by mi na tym aby użytkownicy byli dseparowani podobnie jak mam to zrobione w proftp
tzn, aby jeden użytkownik miał dostęp przez www tylko i wyłącznie do swojego katalogu. Próbowałem za pomocą modułu Apache auth_mysql, ale on uwierzytelnia użytkownika tylko na poziomie HTTP.
Czy istnieje jakiś moduł, który podobnie jak proftpd pobiera informację o użytkownikach z Mysql? Prosiłbym o podpowiedz jak sie za to zabrać (ogólnie).
Offline
Time (s) | Query |
---|---|
0.00015 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00133 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.129.42.198' WHERE u.id=1 |
0.00069 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.129.42.198', 1732963143) |
0.00063 | SELECT * FROM punbb_online WHERE logged<1732962843 |
0.00060 | DELETE FROM punbb_online WHERE ident='3.12.34.192' |
0.00054 | SELECT topic_id FROM punbb_posts WHERE id=142939 |
0.00007 | SELECT id FROM punbb_posts WHERE topic_id=16356 ORDER BY posted |
0.00060 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=16356 AND t.moved_to IS NULL |
0.00009 | SELECT search_for, replace_with FROM punbb_censoring |
0.00122 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=16356 ORDER BY p.id LIMIT 0,25 |
0.00085 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=16356 |
Total query time: 0.00681 s |