Instalar PROFTPD y panel de administracion web
MONTAR SERVIDOR FTP (PROFTPD) + PANEL DE GESTION WEB (proFTP Administrator)
Vamos a ver como montar un servidor FTP con administracion web para poder crear usuarios y modificar las cuotas y demas.
1. Lo primero es añadir en el repositorio de descargas, la siguiente dirección para que podamos instalar los paquetes necesarios y así poder instalar el servidor ftp.
# zypper addrepo http://download.opensuse.org/repositories/openSUSE:/11.4:/Contrib/standard/ opensuse-contrib-x86_64
2. Actualizamos los repositorios y buscamos todo lo relacionado con proftpd.
# Yast (Yast2 Control Center) -> Software –> Software Management -> proftpd
3. Instalamos los siguientes paquetes para montar el servidor ftp.
proftpd, proftpd-doc, proftp-ldap, proftpd-mysql, proftpd-pgsql
4. Ahora pasamos a descargar la última versión del panel de gestión web proFTP Administrator.
5. Descomprimimos y colocamos la carpeta en la ruta del servidor web que utilicemos, apache2 en nuestro caso.
# mv download proftpd_admin_v1.2.tar.gz
# tar -xzvf proftpd_admin_v1.2.tar.gz
# mv /root/proftpd_admin_v1.2 /srv/www/vhosts/proftp_admin
6. Creamos la estructura de la BBD MySQL para la gestión del panel web y usuarios Proftpd.
# mysql -uroot –p
mysql >
CREATE DATABASE proftpd_admin;
USE proftpd_admin;
CREATE TABLE usertable (
userid text,
passwd text,
homedir text,
shell text,
uid int(11) NOT NULL auto_increment,
gid int(11) default NULL,
count int(11) NOT NULL default '0',
lastlogin datetime NOT NULL default '0000-00-00 00:00:00',
lastlogout datetime NOT NULL default '0000-00-00 00:00:00',
expiration datetime NOT NULL default '0000-00-00 00:00:00',
disabled tinyint(4) default '0',
det_name tinytext,
det_mail tinytext,
det_adress tinytext,
det_notes tinytext,
PRIMARY KEY (uid)
) TYPE=MyISAM;
CREATE TABLE grouptable (
groupname text,
gid int(11) NOT NULL auto_increment,
members text,
description tinytext,
PRIMARY KEY (gid),
UNIQUE KEY gid_2 (gid),
KEY gid (gid)
) TYPE=MyISAM;
CREATE TABLE xfer_stat (
userid text,
file text,
size bigint(20) default '0',
address_full text,
address_ip text,
command text,
timespent text,
time text,
cmd text,
dunno text
) TYPE=MyISAM;
CREATE TABLE `ftpquotalimits` (
`name` varchar(30) NOT NULL default '',
`quota_type` enum('user','group','class','all') NOT NULL default 'user',
`per_session` enum('false','true') NOT NULL default 'false',
`limit_type` enum('soft','hard') NOT NULL default 'hard',
`bytes_in_avail` float NOT NULL default '0',
`bytes_out_avail` float NOT NULL default '0',
`bytes_xfer_avail` float NOT NULL default '0',
`files_in_avail` int(10) unsigned NOT NULL default '0',
`files_out_avail` int(10) unsigned NOT NULL default '0',
`files_xfer_avail` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`name`)
) TYPE=MyISAM;
CREATE TABLE `ftpquotatallies` (
`name` varchar(30) NOT NULL default '',
`quota_type` enum('user','group','class','all') NOT NULL default 'user',
`bytes_in_used` float NOT NULL default '0',
`bytes_out_used` float NOT NULL default '0',
`bytes_xfer_used` float NOT NULL default '0',
`files_in_used` int(10) unsigned NOT NULL default '0',
`files_out_used` int(10) unsigned NOT NULL default '0',
`files_xfer_used` int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;
CREATE TABLE admintable (
ID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(30) NOT NULL,
password CHAR(64) NOT NULL,
email VARCHAR(100) NOT NULL,
lastlogin datetime NOT NULL default '0000-00-00 00:00:00',
disabled tinyint(4) default '0',
falseLogins int(11) NOT NULL default '0'
) TYPE=MyISAM;
INSERT INTO usertable (uid) VALUES (9999);
DELETE FROM usertable WHERE uid=9999;
INSERT INTO grouptable (gid) VALUES (9999);
DELETE FROM grouptable WHERE gid=9999;
INSERT INTO grouptable (groupname, description) VALUES ("admins", "Administrators");
INSERT INTO grouptable (groupname, description) VALUES ("users", "Ordinary users");
/* prodtpd-administratror user */
GRANT ALL ON usertable TO proftpd@localhost IDENTIFIED BY 'test';
GRANT ALL ON grouptable TO proftpd@localhost IDENTIFIED BY 'test';
GRANT ALL ON xfer_stat TO proftpd@localhost IDENTIFIED BY 'test';
GRANT ALL ON ftpquotatallies TO proftpd@localhost IDENTIFIED BY 'test';
GRANT ALL ON ftpquotalimits TO proftpd@localhost IDENTIFIED BY 'test';
GRANT ALL ON admintable TO proftpd@localhost IDENTIFIED BY 'test';
/* userQuota.php DB User */
GRANT SELECT ON * TO userview@localhost IDENTIFIED BY 'test123';
Se crean dos usuarios en la base de datos proftpd_admin:
proftpd@ localhost con la contraseña test
userview@ localhost con la contraseña test123
7. Comprobar que el directorio, donde está el panel de gestión web de ftp, tiene los permisos adecuados para la configuración (ejecución para el usuario de apache2).
# chmod 775 -R /srv/www/vhosts/proftpd_admin/
# chown wwwrun -R /srv/www/vhosts/proftpd_admin/
# chgrp www -R /srv/www/vhosts/proftpd_admin/
8. Configurar el apartado filepaths
who: /usr/bin/who (usuarios del sistema conectados)
df: /bin/df
ps: /bin/ps
sysctl: /sbin/sysctl
ftpwho: /usr/local/bin/ftpwho –f /var/log/scoreboard (usuarios ftp conectados)
9. Entraremos a el proftpd_admin,desde el navegador http://localhost/eldominio o http://eldominio. posiblemente nos salga esto:
"The configuration file called configuration.xml is NOT writable and you not alter....bla bla bla"
10. Ahora tenemos nos salda esto:
"connecting to database failed with errors: Access denied for user root@localhost bla bla bla bla"
esto nos dice que debemos configurar el accesso a la base de datos: nos vamos a la pestaña "configure" -> "database" y nos dará un error.
Ahora nos aseguramos que tenemos las opciones iguales a estas o en su defecto, las cambiamos, o modificamos todo el contenido del fichero y dejamos esto que tenemos a continuacion:
Si no tienes este inconveniente pasa al paso 10. Esto ocurre porque nuestro archivo configuration.xml no tienes los permisos de lectura y escritura adecuados:
#chmod 776 configuration.xml
10. Ahora tenemos nos salda esto:
"connecting to database failed with errors: Access denied for user root@localhost bla bla bla bla"
esto nos dice que debemos configurar el accesso a la base de datos: nos vamos a la pestaña "configure" -> "database" y nos dará un error.
Lo recomendable es que la base de datos creada proftpd_admin tenga su propio usuario, y no el root del sistema, ademas.
Este punto no necesita mucha explicacion;
username: nombre dueño base datos
password:"lacontraseña"
hostname"donde esta mysql, en este caso localhost"
database:"en este caso proftpd_admin" (como sale en el script superior)
11 Configuraremos los archivos de proftpd para gestionar los usuarios con mysql:
Estos en Debian squeeze se encuntran en: /etc/proftpd de los archivos alojados nos interesan:
- proftpd.conf
- modules.conf
- include_mysql.conf
vamos a hacer un backup de este:
#cd /etc/proftpd
#cp proftpd.conf proftpd.conf.back
Ahora nos aseguramos que tenemos las opciones iguales a estas o en su defecto, las cambiamos, o modificamos todo el contenido del fichero y dejamos esto que tenemos a continuacion:
ServerName "Server Ncw" ServerType standalone ServerIdent on "Bienvenido" DeferWelcome on DefaultServer on DisplayLogin .welcome # Textfile to display on login DisplayConnect .connect # Textfile to display on connection #DisplayFirstChdir .firstchdir # Textfile to display on first changedir UseReverseDNS off IdentLookups off Port 21 Umask 022 MaxInstances 15 MaxClientsPerHost 3 "Only %m connections per host allowed" MaxClients 10 "Only %m total simultanious logins allowed" MaxHostsPerUser 1 User ftp Group nogroup ScoreboardFile /var/log/scoreboard #carga modulos Include /etc/proftpd/modules.conf # Some logging formats LogFormat default "%h %l %u %t \"%r\" %s %b" LogFormat auth "%v [%P] %h %t \"%r\" %s" LogFormat write "%h %l %u %t \"%r\" %s %b" # Define log-files to use TransferLog /var/log/proftpd.xferlog ExtendedLog /var/log/proftpd.access_log WRITE,READ write ExtendedLog /var/log/proftpd.auth_log AUTH auth ExtendedLog /var/log/proftpd.paranoid_log ALL default SQLLogFile /var/log/proftpd.mysql QuotaLog /var/log/proftpd.quota # Set up authentication via SQL # =========== AuthOrder mod_sql.c SQLAuthTypes Backend SQLConnectInfo proftpd_admin@localhost usuario contraseña SQLUserInfo usertable userid passwd uid gid homedir shell SQLGroupInfo grouptable groupname gid members SQLUserWhereClause "disabled=0 and (NOW()<=expiration or expiration=-1 or expiration=0)" # Log the user logging in SQLLog PASS counter SQLNamedQuery counter UPDATE "lastlogin=now(), count=count+1 WHERE userid='%u'" usertable # logout log SQLLog EXIT time_logout SQLNamedQuery time_logout UPDATE "lastlogout=now() WHERE userid='%u'" usertable # display last login time when PASS command is given SQLNamedQuery login_time SELECT "lastlogin from usertable where userid='%u'" SQLShowInfo PASS "230" "Last login was: %{login_time}" # xfer Log in mysql SQLLog RETR,STOR transfer1 SQLNamedQuery transfer1 INSERT "'%u', '%f', '%b', '%h', '%a', '%m', '%T', now(), 'c', NULL" xfer_stat SQLLOG ERR_RETR,ERR_STOR transfer2 SQLNamedQuery transfer2 INSERT "'%u', '%f', '%b', '%h', '%a', '%m', '%T', now(), 'i', NULL" xfer_stat # 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 AllowStoreRestart on AllowRetrieveRestart on RequireValidShell off PathDenyFilter "\\.ftp)|\\.ht)[a-z]+$" DefaultRoot ~ DenyFilter \*.*/AllowOverwrite on
HideNoAccess off
AllowAll DenyGroup !admins AllowOverwrite on HideNoAccess on DenyGroup !admins AllowAll
En la linea 45 hay que cambiar usuario por el dueño de la base de datos proftpd_admin y la contraseña de esta misma
Modificar (reemplazar) el archivo modules.conf por:
# # 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' 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 decommen 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 moduleto use this #LoadModule mod_sql_odbc.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 proftpd-mod-pgsql or proftpd-mod-mysql 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 proftpd-mod-pgsql or proftpd-mod-mysql to use this #LoadModule mod_wrap2_sql.c #LoadModule mod_dynmasq.c # keep this module the last one LoadModule mod_ifsession.c #cuota tabs
nos falta el include_mysql.conf:
Proftpd es uno de los servidores FTP que más problemas da a la hora de instalar, lo bueno es que todos los problemas tienen una fácil solución.
Proftpd no inicia a veces cuando recién lo instalamos por dos problemas comunes, a veces es por que el hostname que tenemos es falso o no resuelve a ningún lado o bien da un error como el que dice el titulo:
No Valid Servers Configured
El error completo es:
Primero podemos deshabilita IPv6 en /etc/proftpd/proftpd.conf, aunque no es estrictamente necesario.
Pero la solución adecuada es editar el archivo /etc/hosts y añadir ahí el hostname que tenemos, el hostname se encuentra en /etc/hostname en mi caso server6
Así que vamos a editar /etc/hosts
Si no tenemos nuestra IP ( la IP del servidor )en el fichero la agregamos y lo dejamos algo así
Bien ese es uno de los problemas, a veces simplemente no inicia por que nuestro Host no resuelve a ninguna IP, o sea hace un chequeo de DNS, pero eso igual lo solucionamos con este método, aunque no siempre pasa, a veces esta deshabilitada la opción de revisar el fichero hosts antes que las DNS y si esto es así ira directamente a resolver el hosts en las DNS y si no apuntan a ninguna IP dará el mismo error.
En caso de tener el fichero hosts desabilitado y que no detecte lo que podemos en el, podemos habilitarlo en: /etc/nsswitch.conf la opción de hosts, si no la tenemos la añadimos, quedando algo así:
Enlaces relacionados:
AllowStoreRestart on AllowRetrieveRestart on RequireValidShell off PathDenyFilter "\\.ftp)|\\.ht)[a-z]+$" DefaultRoot ~ DenyFilter \*.*/ # Set up authentication via SQL # =========== AuthOrder mod_sql.c SQLAuthTypes Backend SQLConnectInfo proftpd_admin@localhost proftpd new159753 SQLUserInfo usertable userid passwd uid gid homedir shell SQLGroupInfo grouptable groupname gid members SQLUserWhereClause "disabled=0 and (NOW()<=expiration or expiration=-1 or expiration=0)" # Log the user logging in SQLLog PASS counter SQLNamedQuery counter UPDATE "lastlogin=now(), count=count+1 WHERE userid='%u'" usertable # logout log SQLLog EXIT time_logout SQLNamedQuery time_logout UPDATE "lastlogout=now() WHERE userid='%u'" usertable # display last login time when PASS command is given SQLNamedQuery login_time SELECT "lastlogin from usertable where userid='%u'" SQLShowInfo PASS "230" "Last login was: %{login_time}" # xfer Log in mysql SQLLog RETR,STOR transfer1 SQLNamedQuery transfer1 INSERT "'%u', '%f', '%b', '%h', '%a', '%m', '%T', now(), 'c', NULL" xfer_stat SQLLOG ERR_RETR,ERR_STOR transfer2 SQLNamedQuery transfer2 INSERT "'%u', '%f', '%b', '%h', '%a', '%m', '%T', now(), 'i', NULL" xfer_stat # 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 SQLDefaultUID 65534 CreateHome on 1770 uid 0 gid 0 ### Shaper ### TransferRate RETR 1000.0 TransferRate STOR 1000.0
Reiniciamos nuestro proftpd
#/etc/init.d/proftpd restart
Nuevamente accedemos al dominio que asignamos a apache o http://localhost/proftpd_admin y debemos ir a configure > Filepaths saldrán errores.
- en el campo who va: /usr/bin/who
- en el campo ftpwho: /usr/bin/ftpwho
- en kernel configuration file: /usr/src/linux-headers-2.6.32-5-amd64 (esto depende de tu kernel)
- en proftpd: /usr/sbin/proftpd
Es probable que en configure -> extensions->quota, no deje habilitarlas.
Dirigete al archivo configuration.xml que esta en /var/www/eldominio y encuentra:
quota>0 user
Donde sale un 0 cambialo por un 1, y listo, la demas configuracion es intitutiva, la creación, modificación , asignación de reglas y quota,etc.
Posible problema de nombre de host
No Valid Servers Configured
Proftpd no inicia a veces cuando recién lo instalamos por dos problemas comunes, a veces es por que el hostname que tenemos es falso o no resuelve a ningún lado o bien da un error como el que dice el titulo:
No Valid Servers Configured
El error completo es:
root@Server6:~# /etc/init.d/proftpd restartEs un problema que se puede dar por varios motivos y normalmente es por que nuestro hosts no esta configurado o bien por que tenemos IPv6 en el hosts pero el dominio apunta a la IPv4 y por eso proftpd no puede resolver el host del servidor.
Stopping ftp server: proftpd.
Starting ftp server: proftpd – warning: unable to determine IP address of ‘Server6′
– error: no valid servers configured
– Fatal: error processing configuration file ‘/etc/proftpd/proftpd.conf’
failed!
Primero podemos deshabilita IPv6 en /etc/proftpd/proftpd.conf, aunque no es estrictamente necesario.
Pero la solución adecuada es editar el archivo /etc/hosts y añadir ahí el hostname que tenemos, el hostname se encuentra en /etc/hostname en mi caso server6
Así que vamos a editar /etc/hosts
Si no tenemos nuestra IP ( la IP del servidor )en el fichero la agregamos y lo dejamos algo así
IPSERVIDOR server6.skamasle.com server6Básicamente ese es todo el problema.
Bien ese es uno de los problemas, a veces simplemente no inicia por que nuestro Host no resuelve a ninguna IP, o sea hace un chequeo de DNS, pero eso igual lo solucionamos con este método, aunque no siempre pasa, a veces esta deshabilitada la opción de revisar el fichero hosts antes que las DNS y si esto es así ira directamente a resolver el hosts en las DNS y si no apuntan a ninguna IP dará el mismo error.
En caso de tener el fichero hosts desabilitado y que no detecte lo que podemos en el, podemos habilitarlo en: /etc/nsswitch.conf la opción de hosts, si no la tenemos la añadimos, quedando algo así:
hosts: files dnsY eso sería todo.
Enlaces relacionados:
No hay comentarios:
Publicar un comentario