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/.
Mam problem z moim serwerem proftpd połączony z bazą danych MySQL.
Polega on na tym, że czasem na otworzenie katalogu trzeba czekać nawet 1-3min! Nie wiem co tutaj może być źle. Przez sftpd (konta root) wszystko działa prawidłowo, tylko na tym proftpd coś nie.
[b]proftpd.conf[/b]:
# # /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file. # To really apply changes reload proftpd after modifications. # # Includes DSO modules Include /etc/proftpd/modules.conf # Set off to disable IPv6 support which is annoying on IPv4 only boxes. UseIPv6 off # If set on you can experience a longer connection delay in many cases. IdentLookups off ServerName "Debian" ServerType standalone DeferWelcome off MultilineRFC2228 on DefaultServer on ShowSymlinks on TimeoutNoTransfer 600 TimeoutStalled 600 TimeoutIdle 1200 DisplayLogin welcome.msg DisplayChdir .message true ListOptions "-l" DenyFilter \*.*/ PathDenyFilter "(\.ftpaccess)$" UseReverseDNS off # Use this to jail all users in their homes # DefaultRoot ~ # Users require a valid shell listed in /etc/shells to login. # Use this directive to release that constrain. # RequireValidShell off # Port 21 is the standard FTP port. Port 21 # In some cases you have to specify passive ports range to by-pass # firewall limitations. Ephemeral ports can be used for that, but # feel free to use a more narrow range. # PassivePorts 49152 65534 # If your host was NATted, this option is useful in order to # allow passive tranfers to work. You have to use your public # address and opening the passive ports used on your firewall as well. # MasqueradeAddress 1.2.3.4 # This is useful for masquerading address with dynamic IPs: # refresh any configured MasqueradeAddress directives every 8 hours <IfModule mod_dynmasq.c> # DynMasqRefresh 28800 </IfModule> # To prevent DoS attacks, set the maximum number of child processes # to 30. If you need to allow more than 30 concurrent connections # at once, simply increase this value. Note that this ONLY works # in standalone mode, in inetd mode you should use an inetd server # that allows you to limit maximum number of processes per service # (such as xinetd) MaxInstances 30 # Set the user and group that the server normally runs at. User proftpd Group nogroup # Umask 022 is a good standard umask to prevent new files and dirs # (second parm) from being group and world writable. Umask 022 022 # Normally, we want files to be overwriteable. AllowOverwrite on # Uncomment this if you are using NIS or LDAP via NSS to retrieve passwords: # PersistentPasswd off # This is required to use both PAM-based authentication and local passwords # AuthOrder mod_auth_pam.c* mod_auth_unix.c # Be warned: use of this directive impacts CPU average load! # Uncomment this if you like to see progress and transfer rate with ftpwho # in downloads. That is not needed for uploads rates. # # UseSendFile off TransferLog /var/log/proftpd/xferlog SystemLog /var/log/proftpd/proftpd.log #<IfModule mod_quotatab.c> #QuotaEngine off #</IfModule> <IfModule mod_ratio.c> Ratios off </IfModule> # Delay engine reduces impact of the so-called Timing Attack described in # http://security.lss.hr/index.php?page=details&ID=LSS-2004-10-02 # It is on by default. <IfModule mod_delay.c> DelayEngine off </IfModule> <IfModule mod_ctrls.c> ControlsEngine off ControlsMaxClients 2 ControlsLog /var/log/proftpd/controls.log ControlsInterval 5 ControlsSocket /var/run/proftpd/proftpd.sock </IfModule> <IfModule mod_ctrls_admin.c> AdminControlsEngine off </IfModule> # # Alternative authentication frameworks # #Include /etc/proftpd/ldap.conf #Include /etc/proftpd/sql.conf # # This is used for FTPS connections # #Include /etc/proftpd/tls.conf # # Useful to keep VirtualHost/VirtualRoot directives separated # #Include /etc/proftpd/virtuals.con DefaultRoot ~ SQLBackend mysql # The passwords in MySQL are encrypted using CRYPT SQLAuthTypes Plaintext Crypt SQLAuthenticate users # used to connect to the database # databasename@host database_user user_password SQLConnectInfo baza@ip user pass # Here we tell ProFTPd the names of the database columns in the "usertable" # we want it to interact with. Match the names with those in the db SQLUserInfo ftpuser userid passwd uid gid "CONCAT('/home/', homedir) AS homedir" shell SQLUserWhereClause "status=1" # Here we tell ProFTPd the names of the database columns in the "grouptable" # we want it to interact with. Again the names match with those in the db SQLGroupInfo ftpgroup groupname gid members # set min UID and GID - otherwise these are 999 each SQLMinID 500 # create a user's home directory on demand if it doesn't exist CreateHome off # Update count every time user logs in SQLLog PASS updatecount SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser # Update modified everytime user uploads or deletes a file SQLLog STOR,DELE modified SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser # User quotas # =========== QuotaEngine on QuotaDirectoryTally on QuotaDisplayUnits Mb QuotaShowQuotas on SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}' AND quota_type = '%{1}'" SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'" SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquotatallies SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies QuotaLimitTable sql:/get-quota-limit QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally RootLogin off RequireValidShell off TransferRate RETR 3840.0 TransferRate STOR 6400.0
[b]modules.conf[/b]:
# # This file is used to manage DSO modules and features. # # This is the directory where DSO modules reside ModulePath /usr/lib/proftpd # Allow only user root to load and unload modules, but allow everyone # to see which modules have been loaded ModuleControlsACLs insmod,rmmod allow user root ModuleControlsACLs lsmod allow user * LoadModule mod_ctrls_admin.c LoadModule mod_tls.c # Install one of proftpd-mod-mysql, proftpd-mod-pgsql or any other # SQL backend engine to use this module and the required backend. # This module must be mandatory loaded before anyone of # the existent SQL backeds. LoadModule mod_sql.c # Install proftpd-mod-ldap to use this #LoadModule mod_ldap.c # # 'SQLBackend mysql' or 'SQLBackend postgres' (or any other valid backend) directives # are required to have SQL authorization working. You can also comment out the # unused module here, in alternative. # # Install proftpd-mod-mysql and decomment the previous # mod_sql.c module to use this. LoadModule mod_sql_mysql.c # Install proftpd-mod-pgsql and decomment the previous # mod_sql.c module to use this. #LoadModule mod_sql_postgres.c # Install proftpd-mod-sqlite and decomment the previous # mod_sql.c module to use this #LoadModule mod_sql_sqlite.c # Install proftpd-mod-odbc and decomment the previous # mod_sql.c module to use this #LoadModule mod_sql_odbc.c # Install one of the previous SQL backends and decomment # the previous mod_sql.c module to use this #LoadModule mod_sql_passwd.c LoadModule mod_radius.c LoadModule mod_quotatab.c LoadModule mod_quotatab_file.c # Install proftpd-mod-ldap to use this #LoadModule mod_quotatab_ldap.c # Install one of the previous SQL backends and decomment # the previous mod_sql.c module to use this LoadModule mod_quotatab_sql.c LoadModule mod_quotatab_radius.c LoadModule mod_wrap.c LoadModule mod_rewrite.c LoadModule mod_load.c LoadModule mod_ban.c LoadModule mod_wrap2.c LoadModule mod_wrap2_file.c # Install one of the previous SQL backends and decomment # the previous mod_sql.c module to use this #LoadModule mod_wrap2_sql.c LoadModule mod_dynmasq.c #LoadModule mod_vroot.c #LoadModule mod_exec.c #LoadModule mod_shaper.c LoadModule mod_ratio.c LoadModule mod_site_misc.c #LoadModule mod_sftp.c #LoadModule mod_sftp_pam.c # Install one of the previous SQL backends and decomment # the previous mod_sql.c module to use this #LoadModule mod_sftp_sql.c LoadModule mod_facl.c #LoadModule mod_unique_id.c # keep this module the last one LoadModule mod_ifsession.c
[b]Struktura bazy danych[/b]:
CREATE TABLE IF NOT EXISTS `ftpgroup` ( `groupname` varchar(50) COLLATE utf8_polish_ci NOT NULL, `gid` int(11) NOT NULL, `members` varchar(50) COLLATE utf8_polish_ci NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci; INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser'); CREATE TABLE IF NOT EXISTS `ftpquotalimits` ( `name` varchar(50) COLLATE utf8_polish_ci NOT NULL, `quota_type` varchar(50) COLLATE utf8_polish_ci NOT NULL DEFAULT 'user', `per_session` varchar(50) COLLATE utf8_polish_ci NOT NULL DEFAULT 'false', `limit_type` varchar(50) COLLATE utf8_polish_ci NOT NULL DEFAULT 'hard', `bytes_in_avail` varchar(50) COLLATE utf8_polish_ci NOT NULL DEFAULT '0', `bytes_out_avail` varchar(50) COLLATE utf8_polish_ci NOT NULL DEFAULT '0', `bytes_xfer_avail` varchar(50) COLLATE utf8_polish_ci NOT NULL DEFAULT '0', `files_in_avail` varchar(50) COLLATE utf8_polish_ci NOT NULL DEFAULT '0', `files_out_avail` varchar(50) COLLATE utf8_polish_ci NOT NULL DEFAULT '0', `files_xfer_avail` varchar(50) COLLATE utf8_polish_ci NOT NULL DEFAULT '0', UNIQUE KEY `name` (`name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci; CREATE TABLE IF NOT EXISTS `ftpquotatallies` ( `name` varchar(50) NOT NULL, `quota_type` varchar(50) NOT NULL DEFAULT 'user', `bytes_in_used` varchar(50) NOT NULL DEFAULT '0', `bytes_out_used` varchar(50) NOT NULL DEFAULT '0', `bytes_xfer_used` varchar(50) NOT NULL DEFAULT '0', `files_in_used` varchar(50) NOT NULL DEFAULT '0', `files_out_used` varchar(50) NOT NULL DEFAULT '0', `files_xfer_used` varchar(50) NOT NULL DEFAULT '0', UNIQUE KEY `name` (`name`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `ftpuser` ( `userid` varchar(50) COLLATE utf8_polish_ci NOT NULL, `passwd` varchar(50) COLLATE utf8_polish_ci NOT NULL, `uid` int(11) NOT NULL DEFAULT '2004', `gid` int(11) NOT NULL DEFAULT '2004', `homedir` varchar(50) COLLATE utf8_polish_ci NOT NULL, `shell` varchar(50) COLLATE utf8_polish_ci NOT NULL DEFAULT '/usr/sbin/nologin', `count` int(11) NOT NULL DEFAULT '0', `accessed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `status` int(11) NOT NULL DEFAULT '1', UNIQUE KEY `userid` (`userid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
Liczę na pomoc.
Offline
spróbuj go przepiąć na PAM (pam-mysql).
W razie, jakby w nim znaleźli hard-dziurę albo [url=http://www.h-online.com/open/news/item/Back-door-in-ProFTPD-FTP-server-1146592.html]backdoora[/url], łatwiej będzie go można zmienić na inny.
Jak masz gotowe konfigi, wskazujące na ten sam certyfikat ssl, i ten sam moduł Pam, to zamianę między Proftpd a Pure-Ftpd można zrobić w ciagu 3 minut.
U mnie , z pam-mysql otwierał katalogi w sekundę.
Ten [url=http://dug.net.pl/tekst/159/konfiguracja_serwera_vsftpd_z_wirtualnymi_uzytkownikami_w_bazie_mysql_/]przepis[/url] działa ze wszystkimi serwerami, nie tylko vsftpd.
A sftp lepiej puścić na orginalnym ssh, znacznie to bezpieczniejsze od serwerów ftp.
I też conieco potrafi, np:
Match group sftpgroup ChrootDirectory /home GatewayPorts no X11Forwarding no ForceCommand internal-sftp AllowTcpForwarding no
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2012-03-16 21:15:20)
Offline
Zaraz to protestuję.
Co do sftp miałem na myśli to zwykłe FTP, które daje ssh, bez żadnego serwera ftp.
Zainstalowałem libpam-mysql, i co dalej?
Przecież w /etc/pam.d/proftpd nie będę ustalał połączenia z bazą danych, bo ustawiam przecież w /etc/proftpd/proftpd.conf
I tak wolno się ładuje albo wcale :/
Ostatnio edytowany przez desavil (2012-03-16 20:12:44)
Offline
W [b]modules.conf[/b] zostawiłem tylko:
ModulePath /usr/lib/proftpd LoadModule mod_sql.c LoadModule mod_sql_mysql.c LoadModule mod_quotatab.c LoadModule mod_quotatab_sql.c
I wydaje mi się, że działa szybko. Pierwsze ładowanie po połączeniu głównego katalogu ok. 5s, a katalogi bez problemów.
Tylko czy mogę takie moduły zostawić, czy to czegoś nie pogorszy?
Korzystam tylko z użytkowników z bazy danych oraz quoty, również w bazie jest ustawiana. Z resztą wyżej podałem główny config.
PS. Zmieniłem na domyślne modules jak w pierwszym poście i znów muli :D, będę chyba wywalał po jednej opcji i sprawdzał która to.
Te FTP chyba ma fazy... hehe
@edit
sorry za post pod postem, ale myślałem, że doda to tego powyższego.
Ostatnio edytowany przez desavil (2012-03-16 20:17:31)
Offline
/etc/pam.d/ftp
dla wszystkich serwerów, wspólny.
Interfejs pam jest taki sam dla wszystkich.
W /etc/pam.d/ftp wklejasz:
auth required /lib/security/pam_mysql.so user=vsftpd passwd=hasloftp host=localhost db=vsftpd table=ftp_users usercolumn=login passwdcolumn=haslo crypt=2 account required /lib/security/pam_mysql.so user=vsftpd passwd=hasloftp host=localhost db=vsftpd table=ftp_users usercolumn=login passwdcolumn=haslo crypt=2
Użyszkodników dodajesz przez useradd z powłoką /bin/false, czy to brzmi znajomo?
Poza tym ta wersja Proftpd może mieć jakiś błąd z uwierzytelnieniem, może spróbuj na jakiejś innej, jeśli masz w Synapticu jakieś dostępne, względnie paczka z Ubuntu może być.
Możesz też, jakby nic innego nie dało rady, zbudować go na miejscu przez dpkg.
Jakbyś się kiedyś poddał Gentoizacji ;), to proszę bardzo:
net-ftp/proftpd
Available versions: [b]1.3.3e[/b] [b]1.3.3f[/b] [b]1.3.3g[/b] ~1.3.4a {acl authfile ban +caps case clamav copy (+)ctrls deflate diskuse doc exec ident ifsession ifversion ipv6 kerberos ldap memcache mysql ncurses nls pam +pcre postgres qos radius ratio readme rewrite selinux sftp shaper sitemisc softquota sqlite ssl tcpd test trace vroot xinetd}[/quote]
dostępne 3 wersje stabilne i jedna testowa.Co do sftp miałem na myśli to zwykłe FTP, które daje ssh, bez żadnego serwera ftp.[/quote]
Porównując jakość, stabilność i bezpieczeństwo serwera ssh i serwera ftp (dowolnego), mogę chyba tylko polecić wizytę u dobrej i ładnej psycholożki :D
Z serwerów ftp, z pośród trzech: proftpd, pure-ftp, [url=http://www.h-online.com/open/news/item/Vsftpd-backdoor-discovered-in-source-code-update-1272310.html]vsftpd[/url], tylko pure nie miał w ciągu ostatnich 2 lat wpadki z backdoorem, ani jakichś olbrzymich kłopotów z bezpieczeństwem.
A każdy serwer ftp w ciagu 3 lat miewa co najmniej tyle dziur, co Openssh przez ostatnie 20 lat.
Tu masz małe [url=http://www.gentoo.org/doc/pl/security/security-handbook.xml?part=1&chap=10#doc_chap6]porównanie[/url].
A kawałek wyżej mały wstęp:10.d. FTP
Generalnie używanie FTP (File Transfer Protocol) to kiepski pomysł. FTP używa niezaszyfrowanych haseł (są przesyłane czystym tekstem), nasłuchuje na dwóch portach (standardowo 20 i 21), a ponadto jest często atakowane przez włamywaczy szukających anonimowych serwerów w celu wymiany warezów. W związku z wieloma brakami w bezpieczeństwie protokołu FTP powinno się zamiast niego używać sftp lub HTTP. Jeśli nie jest to możliwe należy zabezpieczyć FTP jak to tylko możliwe i przygotować się na sporo problemów.[/quote]
Edyta:
Co do: "[b]miałem na myśli to zwykłe FTP[/b], które daje ssh, [b]bez żadnego serwera ftp[/b]", to takie cudo powinieneś opatentować :DDDDDD
Pozdrawiam
;-)Ostatnio edytowany przez Jacekalex (2012-03-16 20:32:58)
W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem para bellum ;) | Pozdrawiam :)Offline
[b]LoadModule mod_ratio.c[/b] <- powodowało długie wczytywanie katalogów
[b]LoadModule mod_ifsession.c[/b] <- długie listowanie katalogów/plików przy logowaniu
Po usunięciu ich działa prawie idealnie :)
Mój system to Debian 6.0 64bit - [b]ProFTPD Version 1.3.3a[/b]
Proponujesz dodatkowo jakąś aktualizację?
Wnioskuję, dodatkowo że lepiej używać jeżeli chodzi o serwer FTP: Pure-FTPd?
Ostatnio edytowany przez desavil (2012-03-16 21:02:41)
Offline
Pure-ftpd w Debianie ma najłatwiejszą, wrecz banalną konfigurację, choćnie ma tylu bajerów, co Proftpd.
Co do ssh, to poprawilem w poście 2 konfig do chrootowania sftpgroup, sprawdziłem 5 minut temu, działa.
Tylko trzeba ustawić w głównej sekcji konfigu:
Subsystem sftp internal-sftp KeepAlive yes
bez problemu przez sftp i sshfs włażę do folderu uzyszkodnika
grep pies /etc/passwd pies:x:1004:1004::/home/pies:/bin/false
Wymagało to jeszcze dodania powłoki [b]/bin/false[/b] do [b]/etc/shells[/b], ale działa.
W przeciwieństwie do ftp, nie wymaga portów pasywnych,, żadnych kilku(nastu) portów, tylko 1, logowanie po kluczach kryptograficznych (jak ktoś lubi), w porównaniu z ftp po prostu miód malina.
Pomijając 25 razy prostsze połączenie za natem, kiedy masz 1 port komunikacji, a nie 50.
Aktualny konfig sshd (dość chaotyczny, ale działa ;) ):
Port 22 ListenAddress 0.0.0.0 Protocol 2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key ServerKeyBits 4096 SyslogFacility AUTH LogLevel INFO LoginGraceTime 15 PermitRootLogin without-password StrictModes yes MaxAuthTries 5 RSAAuthentication yes AuthorizedKeysFile .ssh/autorized.keys PermitTunnel yes RhostsRSAAuthentication no IgnoreUserKnownHosts no PasswordAuthentication yes PermitEmptyPasswords no UsePAM no AllowTcpForwarding yes GatewayPorts yes X11Forwarding yes X11DisplayOffset 10 X11UseLocalhost yes PrintMotd yes PrintLastLog yes TCPKeepAlive yes UseLogin no UsePrivilegeSeparation yes PermitUserEnvironment no ClientAliveInterval 3 ClientAliveCountMax 3 UseDNS yes PidFile /var/run/sshd.pid Subsystem sftp internal-sftp KeepAlive yes HPNBufferSize 2048 Match group sftpgroup ChrootDirectory /home PermitTunnel no GatewayPorts no X11Forwarding no ForceCommand internal-sftp AllowTcpForwarding no
Krótko piszac, [b]user[/b] z powłoką [b]/bin/false[/b] dodany do grupy [b]sftpgroup[/b], jeśli posiada folder w [b]/home/user[/b] i uprawnienia tego folderu to [b]700[/b], ma miły prywatny zakątek na pliki, i zarazem diabelnie mało może zmalować na serwerze, 15 razy mniej, niż przy dowolnym serwerze ftp.
Do przydzialów quoty masz np [b]cgroup[/b] (chyba, jeszcze nie testowalem), [b]/etc/security/limits.conf [/b] (na pewno i działała), albo quoty dyskowe, do wyklikania w Webminie (też działa).
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2012-03-16 21:34:17)
Offline
Chyba się nie rozumiemy.
W ssh nic nie chcę zmieniać. Podałem tylko przykład, że łącząc się z nim (konto root) w celu przeglądania plików, wszystko działa szybko (czyli to nie wina obciążonego serwera itp).
Czyli coś z proftpd źle ustawione.
Ostatnio edytowany przez desavil (2012-03-16 22:16:26)
Offline
To tu masz instrukcję, co robić, żeby wyczaić, co jest grane.
http://www.proftpd.org/docs/howto/Debugging.html
Offline
Time (s) | Query |
---|---|
0.00008 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00116 | 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='18.222.163.134' WHERE u.id=1 |
0.00088 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.222.163.134', 1732448346) |
0.00051 | SELECT * FROM punbb_online WHERE logged<1732448046 |
0.00051 | SELECT topic_id FROM punbb_posts WHERE id=197825 |
0.00095 | SELECT id FROM punbb_posts WHERE topic_id=20902 ORDER BY posted |
0.00080 | 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=20902 AND t.moved_to IS NULL |
0.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00131 | 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=20902 ORDER BY p.id LIMIT 0,25 |
0.00093 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=20902 |
Total query time: 0.00722 s |