martes, 23 de abril de 2013
Configurar el Servidor FTP con Kubuntu
Instalación
sudo apt-get install vsftpd
También puedes descargarlo de su web oficial.
Configuración
vsftpd
Vamos
a abrir el fichero de configuración del vsftpd y analizar los puntos más
importantes:
sudo nano /etc/vsftpd.conf
Hay muchos parámetros que podemos configurar, pero esto estaría lo básico:
·
listen = YES
Para que se inicie con el sistema.
Para que se inicie con el sistema.
anonymous_enable = NO
No permitimos que usuarios anónimos puedan conectarse a nuestro servidor. Es por seguridad, pero si tú quieres permitirlo tendrás que configurar algunos parámetros más para que no puedan trastear mucho.
No permitimos que usuarios anónimos puedan conectarse a nuestro servidor. Es por seguridad, pero si tú quieres permitirlo tendrás que configurar algunos parámetros más para que no puedan trastear mucho.
·
local_enable = YES
Para poder conectarse con los usuarios locales del servidor donde está instalado.
Para poder conectarse con los usuarios locales del servidor donde está instalado.
·
write_enable = YES
Si quieres que los usuarios puedan escribir y no sólo descargar cosas.
Si quieres que los usuarios puedan escribir y no sólo descargar cosas.
·
local_umask = 022
Esta máscara hace que cada vez que subas un archivo, sus permisos sean 755. Es lo más típico en servidores FTP.
Esta máscara hace que cada vez que subas un archivo, sus permisos sean 755. Es lo más típico en servidores FTP.
·
chroot_local_user = YES
chroot_list_enable = YES
Sirven para que los usuarios locales puedan navegar por todo el árbol de directorios del servidor. Evidentemente esto sólo queremos permitírselo a ciertos usuarios, para ello tenemos el siguiente parámetro.
chroot_list_enable = YES
Sirven para que los usuarios locales puedan navegar por todo el árbol de directorios del servidor. Evidentemente esto sólo queremos permitírselo a ciertos usuarios, para ello tenemos el siguiente parámetro.
·
chroot_list_file =
/etc/vsftpd.chroot_list
Indicamos el fichero donde están listados los usuarios que pueden navegar hacía arriba por los directorios del servidor, lo normal es que sea el administrador del servidor y poco más.
Indicamos el fichero donde están listados los usuarios que pueden navegar hacía arriba por los directorios del servidor, lo normal es que sea el administrador del servidor y poco más.
Hay
pocos parámetros más, pero si quieres échales un vistazo porque vienen bien
explicados en el propio fichero.
vsftpd.chroot_list
Este
fichero no suele existir así que debemos crearlo y editarlo. Aquí irán los
nombres de usuarios que queremos que puedan listar todos los directorios del
servidor y no sólo el suyo asignado por FTP. Esto viene bien para usuarios
administradores.
sudo nano /etc/vsftpd.chroot_list
Este
comando te abrirá un documento vacío, pon en cada línea un nombre de usuario.
Ejemplo:
pepe
juan
virtual
Grupo FTP
Todos
los usuarios que queramos utilizar para FTP deben estar albergados en el mismo
grupo para así darles unos permisos especiales como no poder conectarse por SSH
al servidor.
Creamos
el grupo:
sudo groupadd ftp
Creamos
una shell fantasma para que no puedan entrar a la consola del servidor:
sudo mkdir /bin/ftp
Abrimos
la lista de shells del sistema:
sudo nano /etc/shells
Agregamos
nuestra shell fantasma al final del fichero:
/bin/ftp
Usuario FTP
Lo
primero es crearle una carpeta de usuario. Puedes hacerlo donde tú quieras,
pero yo suelo meterles a todos en una subcarpeta del home general.
Creamos
la carpeta para meter a los usuarios:
sudo mkdir /home/ftp
Creamos
la carpeta del usuario particular:
sudo mkdir /home/ftp/pepe
sudo mkdir /home/ftp/juan
sudo mkdir /home/ftp/virtual
Creamos
el usuario:
sudo useradd -g ftp -d /home/ftp/pepe -c "Pepe P" pepe
sudo useradd -g ftp -d /home/ftp/juan -c "Juan P" juan
sudo useradd -g ftp -d /home/ftp/virtual -c "Virtual P" virtual
Explicación:
-g ftp => el usuario pertenece al
grupo ftp
-d /home/ftp/pepe => el directorio principal del usuario es /home/ftp/pepe
-c “Pepe P” => el nombre completo del usuario es Pepe P
pepe => la última palabra será el nombre de usuario
-d /home/ftp/pepe => el directorio principal del usuario es /home/ftp/pepe
-c “Pepe P” => el nombre completo del usuario es Pepe P
pepe => la última palabra será el nombre de usuario
Ahora
le asignamos una contraseña:
sudo passwd pepe
sudo passwd juan
sudo passwd virtual
Y
finalmente le asignamos la shell fantasma:
sudo usermod -s /bin/ftp pepe
sudo usermod -s /bin/ftp juan
sudo usermod -s /bin/ftp virtual
Este
paso se podía haber hecho al crear el usuario, pero lo dejo separado por si
queremos asignarle la shell fantasma o no.
Errores conocidos
530 Login incorrect
Este
error es el más común con la última versión del vsftpd. Es un gran quebradero
de cabeza con una solución muy simple:
sudo apt-get remove vsftpd
sudo rm /etc/pam.d/vsftpd
sudo apt-get install vsftpd
500 OOPS: vsftpd:
refusing to run with writable root inside chroot()
Este
error se da porque vsftpd no permite que los usuarios puedan escribir en su
carpeta raíz. Una solución es quitarle los permisos de escritura a esa carpeta.
Esto hará que el usuario no pueda hacer nada en su propia carpeta, así que lo
mejor es crearle otra dentro con permisos normales para que pueda utilizarla.
sudo chmod 555 /home/ftp/pepe
sudo mkdir /home/ftp/pepe/documentos
sudo chown pepe:ftp /home/ftp/pepe/documentos
Con
todo esto ya deberías poder acceder al servidor FTP con cualquier usuario del
sistema sin ningún problema.
Instalando FileZilla
Para instalar FileZilla en Ubuntu, Xubuntu, Kubuntu, etc
sudo apt-get install filezilla
sudo apt-get install filezilla
lunes, 22 de abril de 2013
Como abrir puertos en Linux (Ubuntu)
Abre la terminal (Ctrl+Alt+T) y ejecuta la
siguiente orden:
Ubuntu Server, Xubuntu , Kubuntu, etc
sudo iptables -A INPUT -p tcp -i eth0 --dport 3306 -j ACCEPT
Se recomienda instalar firestarter, es una GUI de iptables muy practicas e intuitiva.....
Nota: se necesita conexión a Internet
Código:
sudo apt-get install firestarter
Sockets con Hilos
ServidorHilo.java
desconnectar();
import java.io.*;
import java.net.*;
import java.util.logging.*;
public class ServidorHilo extends Thread {
private Socket socket;
private DataOutputStream dos;
private DataInputStream dis;
private int idSessio;
public ServidorHilo(Socket
socket, int id) {
this.socket = socket;
this.idSessio = id;
try {
dos = new
DataOutputStream(socket.getOutputStream());
dis = new
DataInputStream(socket.getInputStream());
} catch (IOException ex) {
Logger.getLogger(ServidorHilo.class.getName()).log(Level.SEVERE,
null, ex);
}
}
public void desconnectar() {
try {
socket.close();
} catch (IOException ex) {
Logger.getLogger(ServidorHilo.class.getName()).log(Level.SEVERE, null,
ex);
}
}
@Override
public void run() {
String accion =
"";
try {
accion =
dis.readUTF();
if(accion.equals("hola")){
System.out.println("El cliente con idSesion "+this.idSessio+"
saluda");
dos.writeUTF("adios");
}
} catch (IOException ex) {
Logger.getLogger(ServidorHilo.class.getName()).log(Level.SEVERE, null,
ex);
}
}
}
En
el constructor creamos dos buffers (uno de entrada y otro de salida) para
gestionar los envíos y recibos del cliente, y dentro del método RUN gestionamos
qué hacer cuando recibamos un mensaje del cliente.
Servidor
La
clase Servidor.java se encarga de asignar un nuevo Thread a
cada nueva conexión.
import java.io.*;
import java.net.*;
import java.util.logging.*;
public class Servidor {
public static void main(String
args[]) throws IOException {
ServerSocket ss;
System.out.print("Inicializando
servidor... ");
try {
ss = new
ServerSocket(10578);
System.out.println("\t[OK]");
int idSession = 0;
while (true) {
Socket socket;
socket =
ss.accept();
System.out.println("Nueva conexión entrante:
"+socket);
((ServidorHilo)
new ServidorHilo(socket, idSession)).start();
idSession++;
}
} catch (IOException ex) {
Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE,
null, ex);
}
}
}
Cliente
El Cliente.java lo
representamos mediante otra clase llamada Persona que se encarga de enviar y
recibir los mesnajes que vienen y van del servidor.
import java.io.*;
import java.net.Socket;
import java.util.*;
import java.util.logging.*;
class Persona extends Thread {
protected Socket sk;
protected DataOutputStream
dos;
protected DataInputStream dis;
private int id;
public Persona(int id) {
this.id = id;
}
@Override
public void run() {
try {
sk = new
Socket("127.0.0.1", 10578);
dos = new
DataOutputStream(sk.getOutputStream());
dis = new
DataInputStream(sk.getInputStream());
System.out.println(id
+ " envía saludo");
dos.writeUTF("hola");
String
respuesta="";
respuesta =
dis.readUTF();
System.out.println(id
+ " Servidor devuelve saludo: " + respuesta);
dis.close();
dos.close();
sk.close();
} catch (IOException ex) {
Logger.getLogger(Persona.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public class Cliente {
public static void
main(String[] args) {
ArrayList<Thread>
clients = new ArrayList<Thread>();
for (int i = 0; i < 5;
i++) {
clients.add(new
Persona(i));
}
for (Thread Thread :
clients) {
Thread.start();
}
}
}
Suscribirse a:
Entradas (Atom)