Entonces estoy intentando crear un usuario que solo tenga acceso a una carpeta específica dentro de mi public_html
carpeta. He creado con éxito el usuario y puedo iniciar sesión. Tuve algunos problemas para iniciar sesión al principio, porque la carpeta tenía que ser propiedad de root, antes de que el usuario sftp pudiera hacerlo.
Entonces seguí esta guía:https://serverfault.com/questions/584986/bad-ownership-or-modes-for-chroot-directory-component- indicándome que cambie la propiedad de la carpeta a raíz.
Después de hacer esto, puedo iniciar sesión correctamente; sin embargo, una vez que inicio sesión, no puedo agregar archivos ni hacer nada dentro de esta carpeta, ya que es propiedad de root.
Intenté crear un grupo y agregar el usuario root y el usuario sftp como miembros de este grupo, pero tampoco funcionó.
Mi solución fue crear otro directorio dentro de la carpeta sftp, usando el usuario root, y luego cambiar la propiedad al usuario sftp, pero esto me parece demasiado complicado y además agrega otra carpeta a la estructura de árbol, lo cual no soy un gran admirador. de.
¿Alguna idea de cómo permitir que un usuario sftp tenga acceso de escritura a una carpeta, mientras que root sigue siendo el propietario?
Respuesta1
Se habla mucho sobre este tipo de cosas en algunos sitios de intercambio de pilas. Pero en caso de que esto no sea un duplicado...
En mi CentOS 7, cuando usa ChrootDirectory para restringir a un usuario a un directorio, ese directorio debe ser propiedad de la raíz y no puede permitir el acceso de escritura a ningún otro usuario, ya sea mediante permisos o FACL. Puede configurar un enlace simbólico, pero el usuario sftp no podrá seguirlo si está restringido a un directorio. Entonces tienes que hacer esto.
Crear un usuario
useradd ftp_user
configurar contraseña
passwd ftp_user
Configurar permisos. La dirección de su casa será su cárcel.
chown root:root /home/ftp_user
chmod 0755 /home/ftp_user
Restringir al usuario a esa cárcel ahora
vi /etc/ssh/sshd_config
Cambia esto:
#Subsystem sftp /usr/lib/openssh/sftp-server
a
Subsystem sftp internal-sftp
Agregar
Match User ftp_user
ChrootDirectory %h
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
Guardar y salir vi.
No olvides:
systemctl restart sshd
Ahora los engañamos. Digamos que tu cliente tiene un sitio web con el que le permitirás seguir jugando en /var/www/corny_website
Asegúrese de que tenga permisos en ese directorio.
setfacl -m u:ftp_user:rwx /var/www/corny_website
setfacl -d -m u:ftp_user:rwx /var/www/corny_website
Ahora lo montas en lugar de vincularlo simbólicamente.
mkdir /home/ftp_user/corny_website
mount --bind /var/www/corny_website /home/ftp_user/
Ahora, cuando el usuario sftps. No recibirá ese error de tubería rota y solo podrá ver /home/ftp_user y, lo que es más, solo podrá cargar o descargar desde /var/www/corny_website, que ve como / cursi_sitio web.