Configuración de FTP en Amazon Cloud Server [cerrado]

257

Estoy tratando de configurar FTP en Amazon Cloud Server, pero sin suerte. Busco en la red y no hay pasos concretos para hacerlo.

Encontré esos comandos para ejecutar:

$ yum install vsftpd
$ ec2-authorize default -p 20-21
$ ec2-authorize default -p 1024-1048
$ vi /etc/vsftpd/vsftpd.conf
#<em>---Add following lines at the end of file---</em>
    pasv_enable=YES
    pasv_min_port=1024
    pasv_max_port=1048
    pasv_address=<Public IP of your instance>
$ /etc/init.d/vsftpd restart

Pero no sé dónde escribirlos.

SharkTheDark
fuente
10
Esta pregunta debe migrarse a serverfault.com.
Jérôme Verstrynge

Respuestas:

570

Jaminto hizo un gran trabajo respondiendo la pregunta, pero recientemente realicé el proceso yo mismo y quería ampliar la respuesta de Jaminto.

Supongo que ya tiene una instancia EC2 creada y le ha asociado una dirección IP elástica.


Paso # 1: Instale vsftpd

SSH a su servidor EC2. Tipo:

> sudo yum install vsftpd

Esto debería instalar vsftpd.

Paso # 2: abra los puertos FTP en su instancia EC2

A continuación, deberá abrir los puertos FTP en su servidor EC2. Inicie sesión en la consola de administración de AWS EC2 y seleccione Grupos de seguridad en el árbol de navegación de la izquierda. Seleccione el grupo de seguridad asignado a su instancia EC2. Luego seleccione la pestaña Entrante, luego haga clic en Editar:

ingrese la descripción de la imagen aquí

Agregue dos Reglas TCP personalizadas con rangos de puertos 20-21 y 1024-1048. Para Source, puede seleccionar 'Anywhere'. Si decide configurar la Fuente en su propia dirección IP, tenga en cuenta que su dirección IP podría cambiar si se asigna a través de DHCP.

ingrese la descripción de la imagen aquí



Paso # 3: Actualiza el archivo vsftpd.conf

Edite su archivo de configuración vsftpd escribiendo:

> sudo vi /etc/vsftpd/vsftpd.conf

Deshabilite FTP anónimo cambiando esta línea:

anonymous_enable=YES

a

anonymous_enable=NO

Luego agregue las siguientes líneas al final del archivo vsftpd.conf:

pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048
pasv_address=<Public IP of your instance> 

Su archivo vsftpd.conf debería tener un aspecto similar al siguiente, excepto que asegúrese de reemplazar pasv_address con su dirección IP pública:

ingrese la descripción de la imagen aquí

Para guardar los cambios, presione escape, luego escriba :wq, luego presione enter.



Paso # 4: reinicia vsftpd

Reinicie vsftpd escribiendo:

> sudo /etc/init.d/vsftpd restart

Debería ver un mensaje que se parece a:

ingrese la descripción de la imagen aquí


Si esto no funciona, intente:

> sudo /sbin/service vsftpd restart



Paso 5: crea un usuario FTP

Si echa un vistazo a / etc / vsftpd / user_list, verá lo siguiente:

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

Esto básicamente dice: "No permita el acceso FTP a estos usuarios". vsftpd permitirá el acceso FTP a cualquier usuario que no esté en esta lista.

Por lo tanto, para crear una nueva cuenta FTP, es posible que deba crear un nuevo usuario en su servidor. (O, si ya tiene una cuenta de usuario que no figura en / etc / vsftpd / user_list, puede pasar al siguiente paso).

Crear un nuevo usuario en una instancia EC2 es bastante simple. Por ejemplo, para crear el usuario 'bret', escriba:

> sudo adduser bret
> sudo passwd bret

Así se verá:

ingrese la descripción de la imagen aquí



Paso 6: restringir a los usuarios a sus directorios de inicio

En este punto, sus usuarios de FTP no están restringidos a sus directorios de inicio. Eso no es muy seguro, pero podemos solucionarlo con bastante facilidad.

Edite su archivo de configuración vsftpd nuevamente escribiendo:

> sudo vi /etc/vsftpd/vsftpd.conf

Descomente la línea:

chroot_local_user=YES

Debería verse así una vez que hayas terminado:

ingrese la descripción de la imagen aquí

Reinicie el servidor vsftpd nuevamente así:

> sudo /etc/init.d/vsftpd restart

¡Todo listo!


Apéndice A: sobrevivir a un reinicio

vsftpd no se inicia automáticamente cuando se inicia el servidor. Si eres como yo, eso significa que después de reiniciar tu instancia EC2, sentirás un momento de terror cuando el FTP parece estar roto, ¡pero en realidad, simplemente no se está ejecutando! Aquí hay una forma práctica de arreglar eso:

> sudo chkconfig --level 345 vsftpd on

Alternativamente, si está utilizando redhat, otra forma de administrar sus servicios es mediante el uso de esta ingeniosa interfaz gráfica de usuario para controlar qué servicios deberían iniciarse automáticamente:

>  sudo ntsysv

ingrese la descripción de la imagen aquí

Ahora vsftpd se iniciará automáticamente cuando se inicie su servidor.


Apéndice B: Cambiar el directorio de inicio FTP de un usuario

* NOTA: Iman Sedighi ha publicado una solución más elegante para restringir el acceso de los usuarios a un directorio específico. Consulte su excelente solución publicada como respuesta *

Es posible que desee crear un usuario y restringir su acceso FTP a una carpeta específica, como / var / www. Para hacer esto, deberá cambiar el directorio de inicio predeterminado del usuario:

> sudo usermod -d /var/www/ username

En este ejemplo específico, es típico otorgar permisos de usuario al grupo 'www', que a menudo se asocia con la carpeta / var / www:

> sudo usermod -a -G www username
clone45
fuente
3
En step 3después de añadir líneas en el archivo, ¿cómo puedo guardarlo?
Sumit Bijvani
2
ok todo listo, ahora ¿cómo puedo conectarme a ftp?
Sumit Bijvani
77
Hola sumit Vi es un editor bastante complicado. Para guardar su trabajo, escriba escape, luego ": wq" (sin las comillas), luego presione enter. En cuanto a FTP, es difícil de responder porque se basará en su cliente FTP. Si tengo tiempo, intentaré agregar algunas instrucciones a mi respuesta para configurar algunos clientes FTP populares. Personalmente, uso Aptana Studio. En Aptana, crea un sitio SFTP y le proporciona a Aptana el archivo de autenticación de clave pública que obtuvo cuando creó su instancia EC2. Si está usando filezilla, intente usar pageant.exe. ¡Salud!
clone45
66
Esto es excelente. Muy claro. Muchas gracias.
AC Patrice
11
En realidad, tal vez podría darme crédito. Reposaba mi respuesta el 13 de enero
clone45
27

Para habilitar ftp pasivo en un servidor EC2, debe configurar los puertos que su servidor ftp debe usar para las conexiones entrantes, luego abra una lista de puertos disponibles para las conexiones de datos del cliente ftp.

No estoy tan familiarizado con Linux, pero los comandos que publicó son los pasos para instalar el servidor ftp, configurar las reglas del firewall ec2 (a través de la API de AWS), luego configurar el servidor ftp para usar los puertos que permitió en el firewall ec2 .

Entonces, este paso instala el cliente ftp (VSFTP)

> yum install vsftpd

Estos pasos configuran el cliente ftp

> vi /etc/vsftpd/vsftpd.conf
--    Add following lines at the end of file --
     pasv_enable=YES
     pasv_min_port=1024
     pasv_max_port=1048
     pasv_address=<Public IP of your instance> 
> /etc/init.d/vsftpd restart

pero los otros dos pasos son más fáciles de realizar a través de la consola de Amazon en los grupos de seguridad EC2. Allí debe configurar el grupo de seguridad asignado a su servidor para permitir conexiones en los puertos 20, 21 y 1024-1048

jaminto
fuente
Sé lo que significan esas líneas, pero no sé dónde escribirlas ... Ese es el problema ...
SharkTheDark
1
en la línea de comando en el servidor en el que está instalando el servidor ftp?
jaminto
2
Conéctese a su servidor a través de SSH: blog.taggesell.de/index.php?/archives/…
jaminto
En caso de que aún reciba un error (500 OOPS: vsftpd: se niega a ejecutar con raíz de escritura dentro de chroot ()), esto solucionó el problema para mí: benscobie.com/…
kaore
¡Me sorprende que el FTP anónimo esté ENCENDIDO por defecto!
jeffkee
16

Gracias @ clone45 por la buena solución. Pero solo tuve un problema importante con el Apéndice b de su solución. Inmediatamente después de cambiar el directorio de inicio a var / www / html, no pude conectarme al servidor a través de ssh y sftp porque siempre muestra los siguientes errores

permission denied (public key)

o en FileZilla recibí este error:

No supported authentication methods available (server: public key)

Pero podría acceder al servidor a través de una conexión FTP normal.

Si encontró el mismo error, simplemente deshaga el apéndice b de la solución @ clone45 configurando el directorio de inicio predeterminado para el usuario:

sudo usermod -d /home/username/ username

Pero cuando configura el directorio de inicio predeterminado del usuario, el usuario tiene acceso a muchas otras carpetas fuera de / var / www / http. Entonces, para asegurar su servidor, siga estos pasos:

1- Crear grupo sftponly Cree un grupo para todos los usuarios a los que desee restringir su acceso solo a ftp y sftp a var / www / html. para hacer el grupo:

sudo groupadd sftponly

2- Jail the chroot Para restringir el acceso de este grupo al servidor a través de sftp, debe encarcelar el chroot para no permitir que los usuarios del grupo accedan a ninguna carpeta, excepto la carpeta html dentro de su directorio de inicio. para hacer esto abra /etc/ssh/sshd.config en el vim con sudo. Al final del archivo, comente esta línea:

Subsystem sftp /usr/libexec/openssh/sftp-server

Y luego agregue esta línea debajo de eso:

Subsystem sftp internal-sftp

Así que reemplazamos el subsistema con internal-sftp. Luego agregue las siguientes líneas debajo:

 Match Group sftponly
        ChrootDirectory /var/www
        ForceCommand internal-sftp
        AllowTcpForwarding no

Después de agregar esta línea, guardé mis cambios y luego reinicio el servicio ssh:

sudo service sshd restart

3- Agregar el usuario al grupo sftponly Cualquier usuario al que desee restringir su acceso debe ser miembro del grupo sftponly. Por lo tanto, lo unimos a sftponly por: sudo usermod -G sftponly username

4- Restringir el acceso del usuario a solo var / www / html Para restringir el acceso del usuario a solo la carpeta var / www / html, necesitamos hacer un directorio en el directorio de inicio (con el nombre de 'html') de ese usuario y luego montar / var / www a / home / username / html de la siguiente manera:

sudo mkdir /home/username/html
sudo mount --bind /var/www /home/username/html

5- Establecer acceso de escritura Si el usuario necesita acceso de escritura a / var / www / html, entonces debe encarcelar al usuario en / var / www que debe tener root: propiedad de raíz y permisos de 755. Luego debe dar / var / www / html propiedad de root: sftponly y permisos de 775 agregando las siguientes líneas:

sudo chmod 755 /var/www
sudo chown root:root /var/www
sudo chmod 775 /var/www/html
sudo chown root:www /var/www/html

6- Bloquear el acceso al shell Si desea restringir el acceso para no acceder al shell para hacerlo más seguro, simplemente cambie el shell predeterminado a bin / false de la siguiente manera:

sudo usermod -s /bin/false username
Iman Sedighi
fuente
en su sudo mount --bind /var/www /home/username/htmlme dijeron que no hay carpeta www. ¿Supongo que esto se hace desde la raíz (donde está la carpeta / home)?
elliotrock
1
sudo chown root:www /var/www/htmlestados chown: grupo no válido: 'root: www'
elliotrock
2
La Parte 6 debería ser mejor debido a las sudo usermod -s /sbin/nologin usernamerestricciones de shell predeterminadas del módulo pam de vsftpd (y parece que funciona mejor en mi caso). Y la parte 4 mountdebe realizarse en cada reinicio, por lo que es una buena idea colocarla en rc.local.
phy25
11

Gran artículo ... funcionó como una brisa en Amazon Linux AMI.

Dos comandos más útiles:

Para cambiar la carpeta de carga FTP predeterminada

Paso 1:

edit /etc/vsftpd/vsftpd.conf

Paso 2: crea una nueva entrada en la parte inferior de la página:

local_root=/var/www/html

Para aplicar permisos de lectura, escritura, eliminación a los archivos en la carpeta para que pueda administrarlos utilizando un dispositivo FTP

find /var/www/html -type d -exec chmod 777 {} \;
Ravi Shanker
fuente
11
que cambia todos los archivos y carpetas a 777, lo que no es seguro para un sitio web
sergiogx
OKAY. Entonces, ¿qué cambio sugieres al respecto?
Ravi Shanker
3
Debe asignar los permisos necesarios, no solo abra todos los permisos a todo o está pidiendo problemas. Por ejemplo, el uso de chmod -R ug + rw / var / www / html otorgará permisos de lectura y escritura para usuarios y grupos a todos los archivos sin otorgar permisos de ejecución innecesarios y permisos a otros. Luego configure los usuarios y grupos en consecuencia para que no necesite modificar otros. Es decir, si su usuario ftp puede leer y escribir todos los archivos y su servidor web puede leer, está configurado. Coloque a ambos usuarios en el mismo grupo y agregue rw al usuario yr al grupo.
AaronM
Debe aplicar 775 a / var / www / html. El resto de subcarpetas y archivos pueden obtener permisos según la necesidad. 777 es muy inseguro.
Iman Sedighi
6

En caso de que tenga habilitado ufw, recuerde agregar ftp:

> sudo ufw allow ftp

Me tomó 2 días darme cuenta de que habilité ufw.

chbong
fuente
o iptables, o ... sí, ¡siempre me olvido también!
jsh
6

No estará bien hasta que agregue su usuario al grupo www mediante los siguientes comandos:

sudo usermod -a -G www <USER>

Esto resuelve el problema del permiso.

Establezca la ruta predeterminada agregando esto:

local_root=/var/www/html
usuario1802434
fuente
4

No olvide actualizar su firewall de iptables si tiene uno para permitir los rangos 20-21 y 1024-1048.

Haga esto desde / etc / sysconfig / iptables

Agregando líneas como esta:

-Una ENTRADA -m estado - estado NUEVO -m tcp -p tcp --dporte 20:21 -j ACEPTAR

-A ENTRADA -m estado - Estado NUEVO -m tcp -p tcp --dport 1024: 1048 -j ACEPTAR

Y reinicie iptables con el comando:

servicio sudo iptables reiniciar

Kevin Meek
fuente
4

He simplificado los pasos clone45:

Abre los puertos como mencionó

sudo su
sudo yum install vsftpd
echo -n "Public IP of your instance: " && read publicip
echo -e "anonymous_enable=NO\npasv_enable=YES\npasv_min_port=1024\npasv_max_port=1048\npasv_address=$publicip\nchroot_local_user=YES" >> /etc/vsftpd/vsftpd.conf
sudo /etc/init.d/vsftpd restart
Bressers de Willem
fuente
2

Seguí la respuesta de clone45 hasta el final. ¡Un gran artículo! Como necesitaba el acceso FTP para instalar complementos en uno de mis sitios de WordPress, cambié el directorio de inicio a / var / www / mysitename. Luego continué agregando mi usuario ftp al grupo apache (o www) así:

sudo usermod -a -G apache myftpuser

Después de esto, todavía vi este error en la página de instalación del complemento de WP: "No se puede ubicar el directorio de contenido de WordPress (wp-content)". Busqué y encontré esta solución en una sesión de preguntas y respuestas de wp.org: https://wordpress.org/support/topic/unable-to-locate-wordpress-content-directory-wp-content y agregó lo siguiente al final de wp- config.php:

if(is_admin()) {
    add_filter('filesystem_method', create_function('$a', 'return "direct";' ));
    define( 'FS_CHMOD_DIR', 0751 );
}

Después de esto, mi complemento WP se instaló con éxito.

CodeBrew
fuente
0

quizás valga la pena mencionar además de la respuesta de clone45 :

Corrección de permisos de escritura para usuarios FTP Chroot en vsftpd

La versión vsftpd que viene con Ubuntu 12.04 Precise no permite que los usuarios locales encriptados escriban de forma predeterminada. Por defecto, tendrá esto en /etc/vsftpd.conf :

chroot_local_user=YES
write_enable=YES

Para permitir que los usuarios locales escriban, debe agregar el siguiente parámetro:

allow_writeable_chroot=YES

Nota: Los problemas con los permisos de escritura pueden aparecer como los siguientes errores de FileZilla :

Error: GnuTLS error -15: An unexpected TLS packet was received.
Error: Could not connect to server

Referencias: la
fijación de permisos de escritura para usuarios FTP con Chrooted en vsftpd
VSFTPd dejó de funcionar después de la actualización

Hartmut
fuente
0

En caso de que obtenga una contraseña 530 incorrecta

1 paso más necesario

en archivo / etc / shells

Agregue la siguiente línea

/ bin / false

Varun Bhatia
fuente
-2

FileZila es una buena herramienta FTP para configurar con Amazon Cloud.

  1. Descargue el cliente FileZila desde https://filezilla-project.org/
  2. Haga clic en Archivo -> Administrador del sitio ->
  3. Nuevo sitio
  4. Proporcione la dirección IP del nombre de host de su ubicación en la nube de Amazon (puerto, si corresponde)
  5. Protocolo - SFTP (puede cambiar según su requisito)
  6. Tipo de inicio de sesión - Normal (para que el sistema no solicite la contraseña cada vez)
  7. Proporcione nombre de usuario y contraseña.
  8. Conectar.

Debe realizar estos pasos solo 1 vez, luego cargará contenido a la misma dirección IP y al mismo sitio.

Pratima
fuente