1. ¡OFERTA! con cupón "DIRVPS": hosting por $0,01 y también VPS Linux y Windows por $0,01 el primer mes por Interserver ← publi
    Descartar aviso
Descartar aviso
Al usar este sitio web, aceptas que nosotros y nuestros socios podamos establecer cookies para fines tales como personalizar el contenido y la publicidad. Más información.

Pregunta con VPS

Tema en 'VPS Hosting' iniciado por KGBayala528, 2 Dic 2011.

  1. KGBayala528

    KGBayala528 Nuevo usuario

    Hola buenas soy nuevo en esta comunidad y vengo a preguntarles
    es posible crear un usuario que solo tenga acceso a una carpeta en especifico
    osea
    digamos el usuario Pepito entra por SSH y solo tiene acceso a la carpeta Servidor y que solo pueda tener acceso a esa y a ninguna mas
    Espero que me ayan entendido
    Gracias
     
  2.  
  3. mlumbreras

    mlumbreras Usuario activo

    Sí que se puede. Lo que pides hacer se conoce vulgarmente como enjaular a un usuario.

    Enjaular a un usuario dentro de un sistema Linux viene a ser lo mismo que restringirle el acceso a un determinado árbol de directorios. Por ejemplo, podemos enjaular a un determinado usuario dentro de su propio home, y que no pueda acceder al resto de directorios de la raíz (/etc, /var, /bin, etc.).

    La idea es construirle un entorno con una serie de comandos básicos (ls, cp, ...) que queramos que pueda usar, así como las librerías de las que dependen dichas órdenes.

    Por ejemplo, vamos a construir un directorio enjaulado (/srv/jail) en el que encerraremos al usuario user1 y le daremos acceso a través de SSH, SFTP y SCP. Para ello emplearemos la aplicación jailkit, disponible en los repositorios RPMForge. En este caso, utilizaremos una distribución CentOS 5.4 de 64 bits.

    CODE, HTML o PHP Insertado:
    [root@centos ~]# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
    
    [root@centos ~]# rpm -Uhv rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
    
    [root@centos ~]# yum install jailkit
    
    En primer lugar utilizaremos la herramienta jk_init para crear el directorio que definiremos como jaula y añadiremos las herramientas de conexión que se podrán utilizar. También copiaremos la shell que utilizará el usuario user1. Para ello emplearemos el comando jk_cp, ya que aparte de copiar la shell, copiará también las librerías necesarias.

    CODE, HTML o PHP Insertado:
    [root@centos ~]# jk_init -v -j /srv/jail jk_lsh ssh sftp scp
    
    [root@centos ~]# jk_cp -v -f /srv/jail /bin/bash
    
    [root@centos ~]# ls -l /srv/jail/
    total 48
    drwxr-xr-x 2 root root 4096 feb  5 16:52 bin
    drwxr-xr-x 2 root root 4096 feb  5 16:49 dev
    drwxr-xr-x 3 root root 4096 feb  5 16:52 etc
    drwxr-xr-x 2 root root 4096 feb  5 16:49 lib
    drwxr-xr-x 2 root root 4096 feb  5 16:52 lib64
    drwxr-xr-x 6 root root 4096 feb  5 16:49 usr
    
    Después añadiremos al sistema el usuario user1 y le asignaremos una password. También será necesario añadir el registro generado en /etc/passwd dentro del fichero passwd que se habrá creado en el entorno enjaulado.

    CODE, HTML o PHP Insertado:
    root@centos ~]# useradd user1
    
    [root@centos ~]# passwd user1
    
    [root@centos ~]# cat /etc/passwd | grep user1
    user1:x:501:501::/home/user1:/bin/bash
    
    [root@centos ~]# cat /etc/passwd | grep user1 >> /srv/jail/etc/passwd
    
    A continuación vamos a enjaular al usuario user1 dentro de la jaula. Veremos como cambia automáticamente el directorio home y la shell asignada previamente.

    CODE, HTML o PHP Insertado:
    [root@centos ~]# jk_jailuser -m -j /srv/jail user1
    
    [root@centos ~]# cat /etc/passwd | grep user1
    user1:x:500:500::/srv/jail/./home/user1:/usr/sbin/jk_chrootsh
    
    Por último, añadiremos la siguiente configuración al fichero jk_lsh.ini

    CODE, HTML o PHP Insertado:
    [root@centos ~]# cat /srv/jail/etc/jailkit/jk_lsh.ini
    [user1]
    paths= /usr/bin, /usr/lib/
    executables= /usr/bin/scp, /usr/libexec/openssh/sftp-server
    
    Si en este momento intentamos acceder a través de una sesión SCP, veremos que tenemos varios fallos al iniciar la sesión. Esto se debe a que el cliente SCP utiliza varias herramientas (ls, groups, sh e id) que no hemos añadido a nuestro entorno enjaulado.

    Para añadirlas, utilizaremos el comando jk_cp que ya vimos en los párrafos anteriores. Lo mismo para cualquier herramienta que necesitemos agregar.

    CODE, HTML o PHP Insertado:
    [root@centos ~]# jk_cp -v -f /srv/jail /bin/ls /usr/bin/groups /bin/sh /usr/bin/id
    
    Si sólo hubiéramos querido darle acceso al usuario user1 a través del protocolo SFTP, tendríamos que haber ejecutado las siguientes órdenes:

    CODE, HTML o PHP Insertado:
    [root@centos ~]# jk_init -v -j /srv/jail jk_lsh sftp
    
    [root@centos ~]# useradd user1
    
    [root@centos ~]# passwd user1
    
    [root@centos ~]# jk_jailuser -m -j /srv/jail user1
    
    [root@centos ~]# cat /srv/jail/etc/jailkit/jk_lsh.ini
    [user1]
    paths= /usr/bin, /usr/lib/
    executables= /usr/bin/scp, /usr/libexec/openssh/sftp-server
    
    Esto es todo, espero que te haya servido.

    Salu2!
     
    A ideasmultiples le gusta esto.
  4. KGBayala528

    KGBayala528 Nuevo usuario

    Men una pregunta como le ago en Debian 6 de 32 bits?
    Gracias
     
  5. mlumbreras

    mlumbreras Usuario activo

    A partir de la versión 4.8 de OpenSSH, se soporta el chrooting, así que no es necesario aplicar ningún parche.

    Para saber la versión de OpenSSH que tienes instalada, ejecuta:

    CODE, HTML o PHP Insertado:
    # dpkg -p openssh-server
    
    Si no tienes instalado OpenSSH, lo instalas:

    CODE, HTML o PHP Insertado:
    # apt-get install ssh openssh-server
    
    Para habilitar chroot SFTP, abres el archivo /etc/ssh/sshd_config...

    CODE, HTML o PHP Insertado:
    # vi /etc/ssh/sshd_config
    
    y te aseguras de que en este archivo conste la siguiente línea:

    CODE, HTML o PHP Insertado:
    [...]
    Subsystem sftp /usr/lib/openssh/sftp-server
    [...]
    
    Luego agregas las siguientes lineas al final de este mismo archivo (Notar que ChrootDirectory /home es en donde queremos encerrar al usuario)

    CODE, HTML o PHP Insertado:
    [...]
    Match User user1
       ChrootDirectory /home
       AllowTCPForwarding no
       X11Forwarding no
       ForceCommand /usr/lib/openssh/sftp-server
    
    user1 es el nombre del usuario a encerrar y como dije antes, /home es el directorio donde estará encerrado. Si son mas usuarios, se agregan mas líneas como estas pero para el resto de los usuarios.

    Si los usuarios que quieres enjaular son muchos, es más rápido crear directamente un grupo que esté enjaulado. De manera, que todos los usuarios pertenecientes a ese grupo sólo podrán acceder al directorio especificado, en este caso, /home.

    Para crear un grupo, en este mismo archivo, añadimos:

    CODE, HTML o PHP Insertado:
    [...]
    Match Group users
       ChrootDirectory /home
       AllowTCPForwarding no
       X11Forwarding no
       ForceCommand /usr/lib/openssh/sftp-server
    
    Ahora reiniciamos OpenSSH

    CODE, HTML o PHP Insertado:
    # /etc/init.d/ssh restart 
    
    Es muy importante es que si tenemos un usuario en /home/user1 demos permisos para que solo ese usuario pueda leer y escribir en ese directorio

    CODE, HTML o PHP Insertado:
    # chmod 700 /home/user1
    
    Para habilitar chroot para SSH, primero instalas algunos pre-requisitos:

    CODE, HTML o PHP Insertado:
    # apt-get install sudo debianutils coreutils
    
    Descargas make_chroot_jail.sh y lo copias a /usr/local/sbin , luego le das permisos de ejecucion, de la siguiente forma:

    CODE, HTML o PHP Insertado:
    # cd /usr/local/sbin
    # wget http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/make_chroot_jail.sh
    # chmod 700 /usr/local/sbin/make_chroot_jail.sh
    
    Agregamos un enlace simbólico /home/home:

    CODE, HTML o PHP Insertado:
    # cd /home
    # ln -s . home
    
    Ahora ejecutamos:

    CODE, HTML o PHP Insertado:
    # make_chroot_jail.sh [B]user1[/B] /bin/bash [B]/home[/B]
    
    Ahora como hiciste con los usuarios que se conectarán por ftp, debemos agregar en el archivo de configuracion de ssh, los usuarios y grupos que se van a conectar por ssh:

    CODE, HTML o PHP Insertado:
    # vi /etc/ssh/sshd_config
    
    Agregas las siguientes líneas:

    CODE, HTML o PHP Insertado:
    [...]
    Match User user1
       ChrootDirectory /home
       AllowTCPForwarding no
       X11Forwarding no
    
    Y para crear un grupo:

    CODE, HTML o PHP Insertado:
    [...]
    Match Group users
       ChrootDirectory /home
       AllowTCPForwarding no
       X11Forwarding no
    
    Ahora reinicias Openssh:

    CODE, HTML o PHP Insertado:
    # /etc/init.d/ssh restart
    Y das permiso al usuario en concreto:

    CODE, HTML o PHP Insertado:
    # chmod 700 /home/user1
    
    Esto es todo. Espero que ahora te sirva.

    Salu2!
     


Alojamiento web, Hosting Reseller, Servidores Dedicados - All in Hosting


    
    
    
    
Blog · Sitios amigos: GuiaHosting · Unidominios · Interalta ·