¿Cómo puedo crear un usuario solo para sftp?

15

He agregado un usuario al sistema a través de la adduserherramienta. Luego, en /etc/passwd, intenté cambiar el /bin/bashto /sbin/nologino to /dev/null, pero ninguno de estos funcionó.

Me gustaría que el usuario no tenga la opción de obtener un shell interactivo y solo usarlo sftp. ¿Hay alguna manera?

Sé que se ha preguntado aquí antes, pero parece que nadie dio una respuesta satisfactoria.

Toni Rosa
fuente
¿Qué quieres decir con "sin suerte"?
Paweł Brodacki
Quise decir que el scp / sftp remoto no funcionaba. Lo resolví usando el shell scponly como lo sugirió Iain
Toni Rosa

Respuestas:

9

El comando que debe usar para cambiar el shell es chsh . El shell nologin puede ser /sbin/nologino /usr/sbin/nologin(verifique lo que tiene mirando /etc/shells) pero /bin/falseprobablemente sería una mejor opción.

chsh -s /bin/false user

Deberías considerar configurar algo como scponly que hará exactamente lo que quieres.

Iain
fuente
Gracias por tu respuesta. He intentado con los shells dentro de / etc / shell sin suerte ... / bin / false da una "conexión perdida" y / sbin / nologin devuelve un "Esta cuenta no está disponible actualmente". Probaré esto scponly
Toni Rosa
¡Lo resolví usando el shell scponly! Saludos
Toni Rosa
3
¡Esta respuesta es la aguja en el heno! Asegúrese /bin/falsey /bin/nologinson realmente disponible en /etc/shells!
Afr
@Afri Bien, pero ... realmente querrás leer serverfault.com/questions/328395/… . Esto está bastante fuertemente contraindicado.
Reinderien
@Afr no ponen nologinen /etc/shells! serverfault.com/a/328424
RobAu
9

También debería poder hacerlo con OpenSSH 4.9 y versiones posteriores, con lo que también puede hacer un "chroot" adicional para aumentar la seguridad.

En su /etc/ssh/sshd_config:

Match User user
ChrootDirectory /home/user
ForceCommand internal-sftp
AllowTcpForwarding no

Entonces corre:

chsh -s /bin/false user
chown root:root /home/user
mkdir /home/user/uploads
chown user /home/user/uploads

El usuario solo podrá escribir en / home / user / uploads.

https://debian-administration.org/article/590/OpenSSH_SFTP_chroot_with_ChrootDirectory

Eduardo Ivanec
fuente
+1 He puesto esto en mi lista para investigar.
user9517
1
Lo he usado y funciona bien: también puede darle al usuario la opción de iniciar sesión en el entorno chroot con un shell, pero en ese caso debe copiar un mínimo de bibliotecas y algunas otras utilidades como se esperaba. Jailkit ( olivier.sessink.nl/jailkit ) es útil para eso.
Eduardo Ivanec
Gracias, ForceCommand fue una pista. No necesito chroot, pero sí quiero iniciar sesión en SFTP con cuentas de servicio.
AnrDaemon
2

Creo que la mejor manera es con mysecureshell

http://mysecureshell.sourceforge.net/en/index.html

Puede hacer un chroot de un usuario con esto fácilmente e incluso limitar el ancho de banda si es necesario.

Miguel
fuente
Lo resolví usando el shell scponly, pero es interesante saber esto mysecureshell
Toni Rosa
1

Puede agregar un usuario -s /bin/falsepara deshabilitar su shell, pero lo que realmente debería considerar para configurar es una cuenta sftp chrooteada. Esto "encarcelará" a un usuario en su propio directorio y evitará que pueda acceder o modificar cualquier archivo o directorio fuera del directorio chroot.

salsa
fuente
Gracias por su respuesta, pero no parece funcionar. Recibo una "conexión perdida" cada vez que intento que un usuario use el shell / bin / false.
Toni Rosa