SSH com CHROOT na AWS (CentOS)

De Wiki Hackstore

Crie os scripts necessários

/bin/chroot-shell

touch /bin/chroot-shell ; chmod +x /bin/chroot-shell ; vi /bin/chroot-shell

Com o seguinte conteúdo:

#!/bin/bash
/usr/bin/sudo /usr/sbin/chroot /home/${USER} /bin/su - ${USER} "$1" "$2" "$3" "$4"


/usr/sbin/criar-user-com-chroot.sh

touch /usr/sbin/criar-user-com-chroot.sh ; chmod +x /usr/sbin/criar-user-com-chroot.sh ; vi /usr/sbin/criar-user-com-chroot.sh

Com o seguinte conteúdo:

#!/bin/bash

if [[ $(echo $*) ]]; then
        usernew="$*"
else
        read -p "Digite o nome do novo usuario: " usernew
fi

USER=$(echo $usernew | sed -e 's/\ /_/g')
PASS="1234567891011121314151617181920123"

# cria grupo
groupadd sftp
groupadd ${USER}

# cria usuario chroot
useradd -g${USER} -Gsftp -d /home/${USER} -s /bin/chroot-shell -m ${USER}
echo ${USER}:${PASS} | chpasswd

tar xpf /chroot-files.tar -C /home/${USER}
echo -e "root:x:0:0:root:/root:/bin/bash\n${USER}:x:$(id -u ${USER}):$(id -g ${USER})::/:/bin/bash" > /home/${USER}/etc/passwd
chown ${USER}. -R /home/${USER}

Crie o ambiente chroot

Copie os arquivos necessários

mkdir /new-chroot
#!/bin/bash

# crie os diretórios
mkdir /new-chroot/bin
mkdir /new-chroot/dir
mkdir /new-chroot/usr
mkdir /new-chroot/usr/bin
mkdir /new-chroot/usr/libexec
mkdir /new-chroot/usr/libexec/openssh
mkdir /new-chroot/lib/
mkdir /new-chroot/etc
mkdir /new-chroot/dev
mkdir /new-chroot/dev/pts
mkdir /new-chroot/.ssh

# copie as dependências
cp --parents `ldd /bin/bash | cut -d " " -f 3` /new-chroot
cp --parents `ldd /usr/bin/scp | cut -d " " -f 3` /new-chroot
cp --parents `ldd /usr/libexec/openssh/sftp-server | cut -d " " -f 3` /new-chroot
cp --parents `ldd /bin/ls | cut -d " " -f 3` /new-chroot/
cp /lib/ld-linux.so.2 /new-chroot/lib
cp /usr/lib64/libnss3.so /new-chroot/lib64/
cp /usr/lib64/libtic.so.5 /new-chroot/lib64/
cp /lib64/ld-linux-x86-64.so.2 /new-chroot/lib64/
cp /usr/lib64/libssl3.so /new-chroot/lib64/
cp /bin/bash /new-chroot/bin/
cp /usr/bin/scp /new-chroot/usr/bin/scp
cp /usr/libexec/openssh/sftp-server /new-chroot/usr/libexec/openssh/
cp /bin/ls /new-chroot/bin/
cp /lib64/libnss* /new-chroot/lib64/
cp /usr/lib64/libnss* /new-chroot/usr/lib64/
cp --parents $(find . -name root -prune -o -print  -name dnshackstore -prune -o -print  -name backup -prune -o -print  -name proc -prune -o -print  -name dev -prune -o -print  -name sys -prune -o -print  -name dominios -prune -o -print  -name bkp-clientes -prune -o -print  -name opt -prune -o -print -type f -exec ldd '{}' \; | awk '{print $3}' | sort | uniq | grep -v '(') /new-chroot/
cp -vf /etc/{passwd,group} /new-chroot/etc/
cp -r /etc/ld.so* /new-chroot/etc/

# crie os nodes
mknod -m 666 /new-chroot/dev/null c 1 3
mknod -m 666 /new-chroot/dev/tty c 5 0
mknod -m 666 /new-chroot/dev/zero c 1 5
mknod -m 666 /new-chroot/dev/random c 1 8
#mount --bind /dev/pts /new-chroot/dev/pts

# corrija as permissões
chown $username.$username /new-chroot/. -R
chmod 0755 /new-chroot/bin
chmod 0666 /new-chroot/.bashrc
chown root.root /new-chroot
chmod 0755 /new-chroot


Utilize um binário diferente do /bin/su

Este binário nativo é um problema devido a estar linkado com as libs do PAM, o que inviabiliza o CHROOT. Precisamos de uma versão mais simplificada e sem compilação com suporte ao PAM. O ideal é utilizar o binário su do pacote shadow, da distribuição SLACKWARE:

mkdir /slackware-pkg/
wget http://slackware.cs.utah.edu/pub/slackware/slackware-12.0/slackware/a/shadow-4.0.3-i486-14.tgz

ou

wget https://wiki.hackstore.com.br/downloads/shadow-4.0.3-i486-14.tgz

depois:

tar xzpf shadow-4.0.3-i486-14.tgz -C /slackware-pkg/
cp /slackware-pkg/bin/su /new-chroot/bin


Compacte os arquivos, gerando uma imagem

cd /new-chroot/ ; tar cpf /chroot-files.tar * .ssh/

OBS: você tem que manter o arquivo chroot-files.tar na raiz, ou deve alterar o diretório do mesmo no script /usr/sbin/criar-user-com-chroot.sh


Adicione a seguinte linha ao /etc/sudoers

ALL ALL= NOPASSWD:/usr/sbin/chroot,/usr/bin/chroot

Configurações opcionais

Habilite autenticação SSH por senha (opcional)

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.before_chroot
cat /etc/ssh/sshd_config | sed -e "s/PasswordAuthentication no/PasswordAuthentication yes/" > /etc/ssh/temp_sshd_config
mv -f /etc/ssh/temp_sshd_config /etc/ssh/sshd_config
/etc/init.d/sshd restart


Desabilite o sftp subsystem default no SSH (opcional)

sed -e '/Subsystem sftp/ s/^#*/#/' -i /etc/ssh/sshd_config

/etc/init.d/sshd restart


Habilite o sftp subsystem default no SSH (opcional)

echo "Subsystem sftp internal-sftp" >> /etc/ssh/sshd_config
echo "Match Group sftp" >> /etc/ssh/sshd_config
echo "    ChrootDirectory %h" >> /etc/ssh/sshd_config
echo "    AllowTcpForwarding no" >> /etc/ssh/sshd_config

/etc/init.d/sshd restart

Procedimento

Voilá! Para criar novos usuários, basta executar o script /usr/sbin/criar-user-com-chroot.sh