Em um host CentOS de 64 bits, estou usando scriptmake_chroot_jail.sh
para colocar um usuário na prisão, não permitindo que ele veja nada que não esteja em casa /home/jail/home/user1
.
Eu fiz isso digitando isto:
sudo ./make_chroot_jail.sh user1
depois, ao tentar conectar-se ao usuário1 primeiro, recebi um erro como:
/bin/su: user guest does not exist
corrigi isso copiando algumas bibliotecas perdidas:
sudo cp /lib64/libnss_compat.so.2 /lib64/libnss_files.so.2 /lib64/libnss_dns.so.2 /lib64/libxcrypt.so.2 /home/jail/lib64/
sudo cp -r /lib64/security/ /home/jail/lib64/
Mas agora, ao tentar conectar-se ao usuário1 digitando su user1
e depois digitando sua senha, estou recebendo este erro:
could not open session
Então a questão é como conectar-se ao usuário1 nesta situação?
PS Aqui estão as permissões de alguns arquivos, isso pode ser útil para fornecer uma solução:
-rwsr-xr-x 1 root root /home/jail/bin/su
drwxr-xr-x 4 root root /home/jail/etc
-rw-r--r-- 1 root root /home/jail/etc/pam.d/su
-rw-r--r-- 1 root root /home/jail/etc/passwd
-rw------- 1 root root /home/jail/etc/shadow
ATUALIZAÇÃO1
Após algumas modificações consegui me conectar ao usuário1, mas a sessão fecha imediatamente! Acho que é um problema de PAM, mas não consigo encontrar uma maneira de corrigi-lo.
Aqui está a entrada de log para ação de fechamento de /val/log/secure
:
Oct 6 15:19:42 localhost su: pam_unix(su:session): session closed for user user1
O que faz com que a sessão saia imediatamente após o lançamento?
Responder1
Para corrigir o could not open session
problema, sem abandonar totalmente o make_chroot_jail.sh, você também precisa copiar as /usr/lib/libcrack*
bibliotecas. Edite o script, onde tem:
# If you are using a 64 bit system and have strange problems with login comment
# the following lines in, perhaps it will work (motto: if you can't find the
# needed library just copy all of them)
#
# cp /lib/*.* ${JAILPATH}/lib/
# cp /lib/lib64/*.* ${JAILPATH}/lib/lib64/
Mudar para:
cp /lib/*.* ${JAILPATH}/lib/
cp /lib64/*.* ${JAILPATH}/lib64/
cp -rp /lib64/security ${JAILPATH}/lib64/
cp /usr/lib64/libcrack* ${JAILPATH}/usr/lib64/
Apenas um adendo rápido, o que foi dito acima corrigiu esse problema com SuSE - SLES 11 sp2 de 64 bits. Também renomeei o $JAILPATH/lib
para $JAILPATH/lib64
. E para esse sistema operacional, tive que adicionar um arquivo /etc/profile vazio na prisão (você pode usá-lo para inserir um prompt PS1).
Responder2
Eu encontrei uma solução.
Primeiro de tudo você deve esquecer make_chroot_jail.sh e usarKit de prisão.
Enfrentei alguns problemas ao usá-lo, mas eventualmente tudo funciona.
Aqui estão as etapas de como usei o Jailkit e como corrigi os problemas que estavam ocorrendo:
A. Faça ./configure; make; make install
como está descrito em INSTALL.txt
.
B. Adicione /usr/sbin
se $PATH
ainda não estiver lá.
C. Faça isto:
jk_init -v -j /home/jail basicshell editors extendedshell netutils ssh sftp scp
Isso pode falhar com uma mensagem de erro como esta:
`ERROR: configfile /usr/jk_init.ini does not exist`
Para corrigir isso, /usr/sbin/jk_init
mude INIPREFIX='/usr'
para INIPREFIX='/etc/jailkit'
e tente novamente.
D. Faça isto:
jk_jailuser -v -m -j /home/jail customer01
Isso pode falhar com uma mensagem de erro como esta:
invalid shell, /home/jail/usr/sbin/jk_lsh does not exist
Para corrigir faça isso:
jk_init -v -j /home/jail jk_lsh
e tente novamente. Em vez disso, você pode adicionar itens jk_lsh
à lista na etapa C.
E. Agora, ao tentar conectar-se ao cliente01, a conexão pode ser encerrada imediatamente após o lançamento. Para corrigir esse problema, /home/jail/etc/passwd
altere o shell do cliente01 e configure-o para bash assim:
customer01:x:518:601::/home/customer01:/bin/bash
em vez disso:
customer01:x:518:601::/home/customer01:/usr/sbin/jk_lsh