Enjaulamento de usuário no sistema operacional

Coloco neste artigo, as configurações para criar uma jaula para um usuário no sistema operacional.

[ Hits: 1.263 ]

Por: Bruno Augusto Lobo Soares em 03/09/2018


Enjaulamento de usuário no sistema operacional



Estarei pontuando abaixo as devidas configurações:

1. Criação do diretório do usuário:

# mkdir /home/squadra

2. Arquivos de suporte de sessão do usuário:

# ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
crw-rw-rw- 1 root root 1, 3 Mai 19 2014 /dev/null
crw-rw-rw- 1 root root 1, 8 Mai 19 2014 /dev/random
lrwxrwxrwx 1 root root 15 Mai 19 2014 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Mai 19 2014 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Mai 19 2014 /dev/stdout -> /proc/self/fd/1
crw-rw-rw- 1 root tty 5, 0 Jul 12 17:31 /dev/tty
crw-rw-rw- 1 root root 1, 5 Mai 19 2014 /dev/zero


3. Criação do diretório de sessão:

# mkdir -p /home/squadra/dev/

4. Com o comando mknod crie os arquivos. Lembrando de usar sempre o parâmetro -m para especificar os bits de permissões dos arquivos.

# mknod -m 666 null c 1 3
# mknod -m 666 random c 1 8
# mknod -m 666 tty c 5 0
# mknod -m 666 zero c 1 5


5. Mudar a permissão do home do usuário:

# chmod 0755 /home/squadra/

6. Validar a permissão do home do usuário:

# ls -ltr /home/squadra
dr-xr-xr-x. 27 root root 4096 Mar 22 10:50

7. Agora temos que criar o diretório bin e copiar o /bin/bash:

# mkdir -p /home/squadra/bin
# cp -v /bin/bash /home/squadra/bin/

"/bin/bash" -> "/home/squadra/bin/bash"

8. Como o bash requer as bibliotecas. Se faz necessário a criação do diretório /lib64 dentro do home do usuário e a cópia das lib.

# mkdir -p /home/squadra/lib64
# ldd /bin/bash

linux-vdso.so.1 => (0x00007fff272f6000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003b69e00000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003b59a00000)
libc.so.6 => /lib64/libc.so.6 (0x0000003b59e00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003b59600000)


# cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/squadra/lib64/
"/lib64/libtinfo.so.5" -> "/home/squadra/lib64/libtinfo.so.5"
"/lib64/libdl.so.2" -> "/home/squadra/lib64/libdl.so.2"
"/lib64/libc.so.6" -> "/home/squadra/lib64/libc.so.6"
"/lib64/ld-linux-x86-64.so.2" -> "/home/squadra/lib64/ld-linux-x86-64.so.2"


9. Agora iremos criar o usuário:

# useradd squadra
useradd: aviso: o diretório pessoal já existe.
Não copiando nenhum arquivo do diretório skel.


10. Iremos criar o diretório /etc no home do usuário e realizar a cópia do /etc/passwd e /etc/group:

# mkdir /home/squadra/etc
# cp -vf /etc/{passwd,group} /home/squadra/etc/
"/etc/passwd" -> "/home/squadra/etc/passwd"
"/etc/group" -> "/home/squadra/etc/group"


11. Agora chegou a hora de definirmos o enjaulamento no ssh:

# vi /etc/ssh/sshd_config

#define username to apply chroot jail to
Match User squadra
#specify chroot jail
ChrootDirectory /home/squadra

12. Restart do ssh:

# service sshd restart

13. Como o meu usuário irá apenas ler logs, eu defini os comandos que ele pode executar:

# cp -v /bin/ls /home/squadr/bin/
# cp -v /bin/cat /home/squadr/bin/
# cp -v /bin/more /home/squadr/bin/
# cp -v /bin/tail /home/squadr/bin/


14. Uma dica: verificar as lib de todos os comandos. Caso não estiverem no arquivo /home/squadra/lib64/, basta copiar. Exemplo abaixo:

# ldd /bin/ls
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f544ba0c000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f544b61b000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f544b3a9000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f544b1a5000)
/lib64/ld-linux-x86-64.so.2 (0x00007f544be56000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f544af86000)


Lembrando que o usuário (squadra) foi apenas o meu usuário de teste.

Espero ter ajudado com esse artigo!

   

Páginas do artigo
   1. Enjaulamento de usuário no sistema operacional
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Replicação com OpenLDAP

Tor e Hidden Service Protocol - Explicando tecnicamente a "Deep Web"

Checando vulnerabilidades com o Nikto

Certificação CISSP

YASG (Yet Another Security Guide)

  
Comentários
[1] Comentário enviado por Ragen em 18/09/2018 - 11:58h

Muito bacana seu artigo! Parabéns.

Gostaria de compartilhar também uma alternativa para a cópia dos binários.

Você poderia, por exemplo, usar o mount:

mount --bind /bin /home/user/bin
mount --bind /etc /home/user/etc
mount --bind /lib/x86_64-linux-gnu /home/user/lib64

Se você não quiser montar o /etc ou /bin inteiro, pode gerar um fake chroot com a cópia dos arquivos que você listou e monta-los a partir de /chroot/{bin,etc,lib64...} por exemplo.

Outra forma seria usar hardlinks, mas eles não podem ser usados para apontar para diretórios (Pois aponta para o endereço do inode).

Se você usar apenas um conta com esse Chroot é ok, mas em caso muitos users enjaulados é muito difícil até de manter os binários e libs atualizadas, já que fica tudo esparramado. Além de usar espaço em disco desnecessário!



[2] Comentário enviado por albfneto em 19/09/2018 - 17:52h

legal isso. Favoritado!
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor HostGator.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Viva o Android

Tópicos

Top 10 do mês

Scripts