Cada vez se usa menos el acceso FTP y más el de SFTP por simples razones de seguridad. Pero los usuarios del sistema por defecto tienen acceso a ver todo.
Es por esto que puede ser interesante tener usuarios que estén limitados sólo a determinadas carpetas. Por ejemplo, si tienes varios sitios web de varios usuarios y no quieres que un usuario sea capaz de ver los datos de los demás.
Este tutorial ha sido creado en un VPS de Clouding.io. Puedes crear tu propio VPS desde 3€/mes.
Además, tienes la posibilidad de crear tu VPS con la imagen de WordPress en un clic.
COLABORACIÓN
Limitar el acceso SSH
Lo primero que haremos será limitar el acceso de los usuarios a las carpetas correspondientes. Los vamos a juntar todo en el grupo sftp
.
addgroup sftp
Una vez creado el grupo, haremos cambios en el servidor de SSH.
Editaremos el fichero de configuración:
vim /etc/ssh/sshd_config
Buscaremos el código siguiente:
Subsystem sftp /usr/lib/openssh/sftp-server
Y lo sustituiremos por:
Subsystem sftp internal-sftp
Posteriormente añadiremos una serie de reglas para los usuarios de este grupo:
Match Group sftp
ChrootDirectory %h
ForceCommand internal-sftp
AllowTCPForwarding no
PasswordAuthentication yes
Una vez acabemos, reiniciaremos el servicio y validaremos que funciona.
systemctl restart sshd
systemctl status sshd
Copiando el sistema
Como sólo vamos a dejar que los usuarios accedan a una serie limitada de carpetas, también necesitamos que algunos programas funcionen. Es por esto que deberemos crear una estructura copiada del sistema.
En este ejemplo vamos a crear una carpeta para alojar todo en /webs/
.
mkdir -p /webs/
Validaremos que existen una serie de carpetas reales (no las simbólicas).
ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
que devolverá algo similar a esto:
crw-rw-rw- 1 root root 1, 3 jun 25 14:47 /dev/null
crw-rw-rw- 1 root root 1, 8 jun 25 14:47 /dev/random
lrwxrwxrwx 1 root root 15 jun 25 14:47 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 jun 25 14:47 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 jun 25 14:47 /dev/stdout -> /proc/self/fd/1
crw-rw-rw- 1 root tty 5, 0 jun 25 14:47 /dev/tty
crw-rw-rw- 1 root root 1, 5 jun 25 14:47 /dev/zero
Copiaremos algunas de las carpetas a nuestro nuevo lugar raíz.
mkdir -p /webs/dev/
mknod -m 666 /webs/dev/null c 1 3
mknod -m 666 /webs/dev/random c 1 8
mknod -m 666 /webs/dev/tty c 5 0
mknod -m 666 /webs/dev/zero c 1 5
Limitaremos el acceso a eta carpeta sólo a root y lo validaremos. Es importante que los permisos completos sean sólo al propietario y no al grupo, por lo que usaremos 0755.
chown root: /webs
chmod 0755 /webs
ls -ld /webs
Copiaremos el Bash.
mkdir -p /webs/bin
cp -v /bin/bash /webs/bin
Deberemos copiar algunas bibliotecas. Primero crearemos la estructura de carpetas.
mkdir -p /webs/lib/
mkdir -p /webs/lib64/
mkdir -p /webs/lib/x86_64-linux-gnu/
Y validaremos que existen una serie de ficheros.
ll /lib/x86_64-linux-gnu/{libtinfo.so.*,libdl.so.*,libc.so.*,ld-linux-x86-64.so.*}
ldd /bin/bash
Copiaremos los ficheros correspondientes.
cp -v /lib/x86_64-linux-gnu/{libtinfo.so.*,libdl.so.*,libc.so.*} /webs/lib/
cp -v /lib64/ld-linux-x86-64.so.* /webs/lib64/
cp -va /lib/x86_64-linux-gnu/libnss_files* /webs/lib/x86_64-linux-gnu/
Finalmente, haremos una copia de los permisos de usuario.
mkdir -p /webs/etc/
cp -vf /etc/{passwd,group} /webs/etc/
Con esto tendremos todo lo necesario para que los usuarios puedan conectarse por SFTP e interactuar con la subida y bajada de ficheros.
Creando un usuario
Los usuarios los crearemos para que sólo tengan acceso a esta carpeta /webs/
que hemos creado y que pertenezcan al grupo sftp
.
useradd usuarioejemplo -m -d /webs/usuarioejemplo -G sftp
Podemos validar que está en su grupo y en el del sftp
.
groups usuarioejemplo
Que nos devolverá algo como:
usuarioejemplo : usuarioejemplo sftp
Lo siguiente será quitarle los permisos de acceso por SSH, ya que si acceden por SSH tendrían la posibilidad de ejecutar o acceder a cualquier parte,
usermod -s /bin/false usuarioejemplo
Y finalmente le daremos una contraseña al usuario.
passwd usuarioejemplo
Ahora nos aseguraremos que la carpeta propietaria de ese usuario es de root y que él no puede acceder.
chown root: /webs/usuarioejemplo
chmod 0755 /webs/usuarioejemplo
Y, como hemos cambiado los permisos, grupos y demás, haremos una nueva copia de los accesos.
cp -vf /etc/{passwd,group} /webs/etc/
Accediendo por SFTP
En este momento los usuarios podrán acceder por SFTP al servidor, de la misma forma que lo harían por FTP. Por defecto el puerto del FTP es el 21, y el del SFTP es el 22.
Creando un sitio web
A partir de este momento podríamos crear carpetas para distintos sitios web. Si eres el responsable del sistema, puedes crearle un sitio al usuario.
Primero crearíamos la carpeta
mkdir /webs/usuarioejemplo/www.dominio.es/
Y finalmente nos aseguramos que tenga sus permisos.
chown usuarioejemplo: /webs/usuarioejemplo/www.dominio.es/
En este momento el usuario ya podría gestionar por SFTP todos sus contenidos.
Sobre este documento
Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.