Permitir que un usuario no root cargue/descargue en el directorio del sitio web

Permitir que un usuario no root cargue/descargue en el directorio del sitio web

Tengo un sitio web en mi VPS. Instalo Debian 7 en ese VPS. Mi documento http está ubicado en el directorio donde /var/www/example.cominstalé Nginx en ese servidor y el directorio /var/www/example.comes propiedad del usuario www-datay del grupo www-data. Quiero agregar un usuario no root (llamémoslo someone) para poder descargar o cargar documentos en ese directorio a través de un cliente FTP o SFTP como FileZilla.

encontréesteyesteguía que explica que se puede hacer usando chroot. Intenté configurarlo pero no funcionó. Aquí hay algunos comandos que usé hasta ahora.

  1. useradd someone
  2. groupadd sftpusers
  3. usermod -G sftpusers someone
  4. vi /etc/ssh/sshd_config

Agregué este código

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

Y al final del archivo agregué

Match group sftpusers
    ChrootDirectory /var/www/example.com
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp
  1. service ssh restart

Pero cuando me conecté a través de FileZilla, me dio un error. Sospecho que este error se debe a que /var/www/example.comes propiedad del usuario www-datay del grupo www-data.

Pregunta: Cómo permitir que un usuario no root pueda descargar o cargar documentos en /var/www/example.comun directorio a través de un cliente FTP o SFTP como FileZilla. Este usuario no root no debería poder acceder al directorio principal como/var/www/

Respuesta1

OH, por amor a todas las cosas lindas y tiernas, no establezcas permisos 777 en NADA que sea accesible para world+dog (es decir, los directorios de tu sitio web, carpetas ftp anónimas).

¡Linux moderno y BSD tienen ACL por usuario que puede configurar y funcionan perfectamente! Puede usar esto para agregar rwx para usuarios específicos y también para grupos específicos. ¡Es muy fácil de hacer una vez que los entiendes!

TLDR; use el comando setfacl de la siguiente manera #setfacl -m someuser:rwx /public_html ¡SHAZAM! Ahora que algún usuario ha leído/escrito/ejecutado en su directorio public_html, le recomiendo que lea la página de manual de setfacl o al menos un CÓMO para familiarizarse con su funcionalidad. Aquí hay una introducción simple a las ACL del sistema de archivos: https://www.redhat.com/sysadmin/linux-access-control-lists

Es excelente para servidores web donde es necesario permitir el acceso a desarrolladores específicos que tienen sus propias cuentas sin otorgar rwx a world+dog.

Respuesta2

así es como configuro mi sftp para un usuario específico

1] crear un usuario

 adduser {USER}

2]editar /etc/ssh/sshd_config

 PasswordAuthentication yes 

 Subsystem sftp
 internal-sftp -u 0007 -f AUTH -l VERBOSE 
 Match Group {USER}
     ChrootDirectory {FOLDER}
     ForceCommand internal-sftp -u 0007
     AllowTcpForwarding no
     GatewayPorts no
     X11Forwarding no

3]establecer derechos para el usuario

 chmod -R 777 {FOLDER}

4]reiniciar ssh

service ssh restart

reemplace {USER} por su usuario y {FOLDER} por su carpeta y debería funcionar. ;)

Respuesta3

Muy bien, después de prueba y error, parece que aquí está la respuesta.

  1. adduser someone
  2. vi /etc/ssh/sshd_config Estoy usando la configuración de Froggiz, por lo que mi código se ve así:

    PasswordAuthentication yes 
    
    Subsystem sftp internal-sftp -u 0007 -f AUTH -l VERBOSE 
         Match Group someone
         ChrootDirectory /var/www
         ForceCommand internal-sftp -u 0007
         AllowTcpForwarding no
         GatewayPorts no
         X11Forwarding no
    
  3. service ssh restart

  4. chmod -R 777 /var/www/example.com. Esto permitirá que alguien cargue/descargue archivos y permitirá que el servidor web/php procese archivos en este directorio.

información relacionada