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: 2.516 ]

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

Autenticação via hardware: o módulo pam_usb

SELinux na prática

AUDIT: Auditoria de arquivos no Linux para conhecer quem fez alterações em arquivos

Detectando vulnerabilidades com o Nessus

VPN com openVPN no Slackware 11

  
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].

[3] Comentário enviado por ricardoolonca em 29/09/2018 - 11:26h

Parabéns pelo artigo.

Isso é muito útil para enjaular aplicações que não possuem esse recurso nativamente. Ou para limitar os comandos que um usuário de TI (um técnico de um parceiro que dá suporte a uma ferramenta, por exemplo).

[4] Comentário enviado por M4iir1c10 em 11/10/2018 - 16:43h

Legal 😎
Só uma pergunta... Qual é a razão para fazer isto?

Seria o caso de eu emprestar o computador para alguém usar mas eu não quero que ele acesse os meus arquivos?
Tipo guest user?

Iniciante do Linux usando o Kali é como um estudante de medicina fazendo cirurgia cerebral pela primeira vez "solo" !!!!

[5] Comentário enviado por brunols em 11/10/2018 - 17:16h


[4] Comentário enviado por M4iir1c10 em 11/10/2018 - 16:43h

Legal 😎
Só uma pergunta... Qual é a razão para fazer isto?

Seria o caso de eu emprestar o computador para alguém usar mas eu não quero que ele acesse os meus arquivos?
Tipo guest user?

Iniciante do Linux usando o Kali é como um estudante de medicina fazendo cirurgia cerebral pela primeira vez "solo" !!!!



Boa tarde, Vamos lá as respostas as suas perguntas:
Qual é a razão para fazer isto?
R.: Eu em particular enjaulo usuários/aplicações por segurança em sistemas críticos.
Seria o caso de eu emprestar o computador para alguém usar mas eu não quero que ele acesse os meus arquivos?
Tipo guest user?
+ ou - ... Para um melhor entendimento seu, o enjaulamento de usuário nada mais é um sistema operacional que vc estará disponibilizando para um usuário com certos privilégios de comandos e acessos. Sendo que, ele somente enxergará o sua árvore de sistema...


Contribuir com comentário