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.com
instalé Nginx en ese servidor y el directorio /var/www/example.com
es propiedad del usuario www-data
y 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.
useradd someone
groupadd sftpusers
usermod -G sftpusers someone
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
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.com
es propiedad del usuario www-data
y del grupo www-data
.
Pregunta: Cómo permitir que un usuario no root pueda descargar o cargar documentos en /var/www/example.com
un 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.
adduser someone
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
service ssh restart
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.