The Information Systems and Computer Applications examination covers material that is usually taught in an introductory college-level business information systems course.

Crear un chroot con únicamente una shell y el comando ssh by Jordi Prats

Vamos a ver cómo crear un entorno con chroot con lo mínimo necesario para que un usuario se pueda conectar y realizar conexiones por ssh pero poca cosa más (una máquina de salto).

 

Para configurar esta máquina de salto, nuestro servidor ssh debe ser como mínimo la versión OpenSSH 4.9. Primero crearemos el chroot en /home con la shell bash:

cd /home
mkdir chroot
cd chroot/
ls
mkdir {bin,dev,lib,etc}
cp -p /bin/bash bin/
for i in $(ldd bin/bash 2>&1 | sed 's@\([^/]*\)\([/lib/]\?[^ ]*\).*@\2@'); do cp $i lib/; done
mknod dev/null c 1 3
mknod dev/zero c 1 5
mknod dev/urandom c 1 9
mknod dev/tty c 5 0
chmod 0666 dev/{null,zero}

A continuación copiaremos el comando ssh y todas sus librerías:

for i in $(ldd /usr/bin/ssh | sed 's@[^/]*\(/\?[/a-z0-9\._-]\+\)\?.*@\1@'); do mkdir -p $(dirname ${i:1}); cp $i $(dirname ${i:1}); done
cp /lib/libnss_files.so.2 lib/
mkdir -p usr/bin
cp /usr/bin/ssh usr/bin
cp /etc/nsswitch.conf etc/
cp /etc/resolv.conf etc/

Y prepararemos la home para el usuario, en este caso “ftl” para el usuario con id 99:

mkdir -p home/ftl/
echo -e 'root:x:0:0:root:/root:/bin/bash\nftl:x:99:99:jump!:/home/ftl:/bin/bash' > etc/passwd

Y para acabar la configración, deberemos dar una configuración incial al cliente ssh. En este caso usamosStrictHostKeyChecking no ya que no va a tener permiso de escritura en ninguna parte del chroot:

mkdir etc/ssh
echo -e 'Protocol 2\nStrictHostKeyChecking no\n\nHost *\tGSSAPIAuthentication yes' > etc/ssh/ssh_config

A continuación deberemos configurar el servidor ssh para que use el chroot, añadiendo la siguiente configuración:

Match Group chroot
ChrootDirectory /home/chroot

Y modificando la siguiente:

Subsystem sftp internal-sftp

A continuación deberemos crear un usuario con el grupo chroot (que indicamos con Match Group) con el id que hemos definido en el etc/passwd del chroot y su home:

useradd -o -u 99 -g 99 -G chroot -d /home/ftl ftl

Una vez aplicada la configuración, si accedemos con dicho usuario veremos que únicamente tenemos la shell y el comando ssh:

# ssh localhost -l ftl
ftl@localhost's password: 
Last login: Thu Feb 21 06:33:15 2013 from 1.2.3.4
-bash-3.2$ ls
-bash: ls: command not found
-bash-3.2$ pwd
/home/ftl
-bash-3.2$ echo a > ~/test
-bash: /home/ftl/test: Permission denied
-bash-3.2$ echo a > /test
-bash: /test: Permission denied
-bash-3.2$ echo a > /tmp/test
-bash: /tmp/test: No such file or directory
-bash-3.2$ ssh
usage: ssh [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-e escape_char] [-F configfile]
           [-i identity_file] [-L [bind_address:]port:host:hostport]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-R [bind_address:]port:host:hostport] [-S ctl_path]
           [-w tunnel:tunnel] [user@]hostname [command]

Tags: 

Relacionados

 

Enhanced by Zemanta

Comments are closed.