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/test1
y luego podrá escribir.
Sin embargo, es un poco molesto e idealmente quiero que el usuario ingrese al /var/base/test1/test1
directorio 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 /test1
como solución alternativa.
Respuesta larga
openssh
requiere que ChrootDirectory
todos 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 ChrootDirectory
no pueda manipularse maliciosamente y, por ejemplo, reemplazarse por un enlace simbólico a algún lugar completamente distinto. Si el ChrootDirectory
directorio principal o cualquiera de sus directorios principales no son propiedad de root o se pueden escribir en grupo o en todo el mundo, sshd
rechaza 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 chroot
aplicar el directorio, se cambia a /var/base/test1/test1
. De esa manera, el usuario no necesita cambiar, test1
sino que ya inicia su sftp
sesión en ese directorio.
$ sftp -P 2222 test1@localhost
test1@localhost's password:
Connected to localhost.
sftp> pwd
Remote working directory: /test1