¿Cómo agregar un usuario ssh que solo tiene permisos para acceder a una carpeta específica?

17

¿Cómo agregar un usuario ssh que solo tiene permisos para acceder a una carpeta específica?

useradd -d /var/www/xyz.com.tr/musteri  -s /bin/bash -g sshd musteri

Creé un usuario llamado musteri. Configuré su carpeta de inicio y grupo. Por lo tanto, deseo integrar a los musteriusuarios en "/var/www/xyz.com.tr/musteri". No quiero que acceda a otra carpeta.

Violonchelo
fuente
¿Desea que el usuario tenga acceso completo al shell, o solo protocolos de copia de archivos como sftp y rsync?
Gilles 'SO- deja de ser malvado'
Si es lo último, es posible que desee considerarlo scponlycomo un shell, posiblemente operando en chrootmodo para restringir su acceso a ese directorio y a ningún otro lugar.
Shadur
1
@Gilles: quiero acceder a través de sftp. Pero, no quiero que acceda a otra carpeta.
Cell-o
1
@ Cell-o: si solo necesita unos pocos protocolos de transferencia de archivos y no shells, use chroot plus scponly o rssh (Google scponly chrooto rssh chrootdebería guiarlo hacia los procedimientos).
Gilles 'SO- deja de ser malvado'
¿Qué tal el uso de ACL?
fpmurphy

Respuestas:

19

Parece que quiere que su müşteriler tenga acceso de transferencia de archivos a una carpeta sin darles realmente shells. Esto es algo bueno porque, como señaló Binfalse , es difícil proporcionar shells a las personas con acceso limitado porque los shells necesitan acceder a todo tipo de cosas dispersas en el sistema solo para ejecutarse.

Para dar acceso SFTP a una carpeta específica, puede hacer algo como esto.

  1. Agregue un nuevo grupo al sistema, diga 'sftponly'.
  2. Agregue cualquier usuario en su sistema que debería tener derechos restringidos para este grupo. También podría darles shells restringidos como / bin / true, pero no es obligatorio.
  3. Cambie su archivo de configuración ssh (generalmente /etc/ssh/sshd_config) con estas líneas
    Subsistema sftp internal-sftp

    Match Group sftponly
        ChrootDirectory% h
        AllowTCPForwarding no
        X11 Reenvío no
        ForceCommand internal-sftp

Esto activaría el subsistema sftp dentro de SSH y forzaría a los miembros de ese grupo de sistemas a usar solo ese sistema al iniciar sesión. También los incluiría en sus directorios de inicio. También puede cambiarlo para que sea una subcarpeta de sus directores de inicio con algo así ChrootDirectory %h/musteri_sftppara que no puedan ver el resto de sus archivos del sistema, sino que inicien sesión directamente en una subcarpeta especial de su carpeta de inicio.

Kolay gelsin.

Caleb
fuente
Öncelikle teşekkürler. ;) Como mencionaste, configuré SFTP. Pero tengo un problema con respecto a iptables. Esta es mi regla. -> A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
Cell-o
1
Birşey değil. Si bien FTP usaría el puerto 21, SFTP es un protocolo similar a ftp que se ejecuta en el canal SSH, por lo que usará el puerto SSH que, de manera predeterminada, es 22.
Caleb
Tenga en cuenta que también debe ubicar y comentar cualquier comando del subsistema previamente existente (por ejemplo, subsistema sftp / usr / lib / openssh / sftp-server)
CnrL
¡Resolvió mi problema y aprendí algunas frases turcas útiles! ¡Prima!
eimajenthat
2

En mi opinión, esto es muy difícil, si no imposible. Cuando el usuario se conecta a través de SSH, al menos necesita un shell, en su caso el bash. Para ejecutar /bin/bashnecesita permisos para acceder /bin. bashen sí mismo necesita leer algunas cosas de /etc(por ejemplo /etc/bash.bashrc), por lo que el usuario también necesita acceso /etc. Suponiendo que el usuario no solo quiera pasar el rato en este directorio, es posible que desee leer un archivo, sino que para ejecutarlo, por ejemplo vim, también necesita acceso /usr/bin.
Esto es solo una pequeña demostración, hay algunas dependencias más, por ejemplo, realmente no sé qué sucederá si el usuario no tiene acceso a /tmp...

Debes pensar en tu intención. ¿Desea que alguien tenga acceso de lectura / escritura a una parte de su servicio web? Luego, puede configurar algo como FTP para exportar un directorio específico a este usuario. Entonces puede leer / escribir estos archivos sin acceso SSH.
Otra buena solución sería un repositorio. Por ejemplo, configure un repositorio GIT y deje que el usuario lo clone. Él puede hacer sus cambios localmente y enviarle un parche. Puede decidir si desea aplicar este parche o no, una reversión para parches con errores también es muy fácil.

binfalse
fuente
rbashestá diseñado para hacer exactamente esto.
bahamat
Esta cosa se llama un shell restringido . Pero como Cell-o solo quiere permitir transferencias de archivos, no es la herramienta adecuada.
Gilles 'SO- deja de ser malvado'