Directorio raíz del usuario SFTP

Directorio raíz del usuario SFTP

He reunido el siguiente script que funciona bien. Creará un usuario sftp y cuando el usuario inicie sesión estará en /var/base/test1, donde no puede escribir en este directorio, luego debe ingresar /var/base/test1/test1y luego podrá escribir.

Sin embargo, es un poco molesto e idealmente quiero que el usuario ingrese al /var/base/test1/test1directorio cuando inicia sesión a través de ftp. ¿Hay alguna manera de facilitar esto? Si cambio ChrootDirectory (en sshd_config) a /var/base/test1/test1, el usuario ftp ya no podrá iniciar sesión.

mkdir -p /var/base/test1/test1
chown root:root /var/base/test1
chown root:root /var/base
chmod 755 /var/base/test1
adduser --disabled-password --gecos test1
echo “test1:apassword” | chpasswd
chown test1:test1 /var/base/test1/test1
vim /etc/ssh/sshd_config
systemctl restart sshd

sshd_config:

Match User test1
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/base/test1
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

Respuesta1

Respuesta corta

Esto no es posible, pero lo proponemos /test1como solución alternativa.

Respuesta larga

opensshrequiere que ChrootDirectorytodos los componentes de la ruta que conducen a él sean propiedad de root y nadie más pueda escribirlos. Esta es una medida de seguridad para garantizar que ChrootDirectoryno pueda manipularse maliciosamente y, por ejemplo, reemplazarse por un enlace simbólico a algún lugar completamente distinto. Si el ChrootDirectorydirectorio principal o cualquiera de sus directorios principales no son propiedad de root o se pueden escribir en grupo o en todo el mundo, sshdrechaza el inicio de sesión. Si esto sucede, verá algo como esto en /var/log/auth.log:

Jun 10 07:54:01 ubuntu-bionic sshd[2251]: fatal: bad ownership or modes for chroot directory "/var/base/test1"
Jun 10 07:54:01 ubuntu-bionic sshd[2173]: pam_unix(sshd:session): session closed for user test1

El mensaje de error debería indicarle la dirección correcta.

Esto también se indica explícitamente en elpágina de manual sshd_config:

DirectorioChroot
Especifica el nombre de ruta de un directorio al chroot(2) después de la autenticación. Al iniciar la sesión, sshd(8) comprueba que todos los componentes del nombre de ruta sean directorios de propiedad raíz en los que ningún otro usuario o grupo pueda escribir. Después del chroot, sshd(8) cambia el directorio de trabajo al directorio de inicio del usuario.[...]

Por seguridad, es muy importante evitar que otros procesos del sistema (especialmente aquellos fuera de la cárcel) modifiquen la jerarquía de directorios. Una mala configuración puede generar entornos inseguros que sshd(8) no puede detectar.

Solución alterna

Sin embargo, puede configurar el directorio de inicio del usuario en /test1( sudo usermod test1 -d /test1), de esa manera, después de chrootaplicar el directorio, se cambia a /var/base/test1/test1. De esa manera, el usuario no necesita cambiar, test1sino que ya inicia su sftpsesión en ese directorio.

$ sftp -P 2222 test1@localhost
test1@localhost's password: 
Connected to localhost.
sftp> pwd
Remote working directory: /test1

información relacionada