Segunda, 5 de Janeiro de 2009



Configurando SFTP modo CHROOTED com o scponly

Por: Flavio Torres - flaviotorres[@]linuxmasters.info
Publicado em: 07/08/2008

Muitas vezes temos que disponibilizar acesso aos nossos servidores para, apenas, os usuários copiarem seus arquivos em um ambiente web. Pensando sempre na segurança do ambiente corporativo, não é nada mal configurar um ambiente seguro e privilegiado.

Com base nisto, temos a opção de configurar um SSH Chrooted que vai te dar um pouco mais de trabalho, pois você deverá alterar o ambiente para todos os usuários, não que haja excessão, na maioria dos casos queremos ainda ter acesso SSH, claro somos root :), e liberar apenas cópia de arquivos para os nossos clientes.

Demonstrarei aqui, como configurar o scponly em um ambiente enjaulado "chrooted" (onde o usuário terá permissão para acessar apenas aquele diretório, e nada mais).

Distribuição: RedHat ES 4

Faça o download do scponly em:

Site do Projeto: http://freshmeat.net/projects/scponly/
Arquivo para compilar e instalar: http://freshmeat.net/redir/scponly/13187/url_tgz/scponly-4.6.tgz

Mão na massa!

# wget http://freshmeat.net/redir/scponly/13187/url_tgz/scponly-4.6.tgz
# tar -xvzf scponly-4.6.tgz
# cd scponly-4.6
# ls
aclocal.m4 CHANGELOG config.log configure.in groups INSTALL README scponlyc setup_chroot.sh
AUTHOR config.guess config.status CONTRIB groups.c install-sh scponly scponly.c setup_chroot.sh.in
build_extras config.h config.sub COPYING helper.c Makefile scponly.8 scponly.h TODO
BUILDING-JAILS.TXT config.h.in configure debuglevel helper.o Makefile.in scponly.8.alternate_manpage scponly.o

Aqui configuramos o scponly com suporte a chroot!

# ./configure --enable-chrooted-binary
# make && make install

 

Achei interessante adicionar a saída do make && make install para vermos onde será instalado:


gcc -g -O2 -I. -I. -DHAVE_CONFIG_H -DDEBUGFILE='"/usr/local/etc/scponly/debuglevel"' -o scponly.o -c scponly.c
gcc -g -O2 -I. -I. -DHAVE_CONFIG_H -DDEBUGFILE='"/usr/local/etc/scponly/debuglevel"' -o helper.o -c helper.c
gcc -g -O2 -I. -I. -DHAVE_CONFIG_H -DDEBUGFILE='"/usr/local/etc/scponly/debuglevel"' -o scponly scponly.o helper.o
gcc -g -O2 -I. -I. -DHAVE_CONFIG_H -DDEBUGFILE='"/usr/local/etc/scponly/debuglevel"' -o groups groups.c
echo "0" > debuglevel
/usr/bin/install -c -d /usr/local/bin
/usr/bin/install -c -d /usr/local/man/man8
/usr/bin/install -c -d /usr/local/etc/scponly
/usr/bin/install -c -o 0 -g 0 scponly /usr/local/bin/scponly
/usr/bin/install -c -o 0 -g 0 -m 0644 scponly.8 /usr/local/man/man8/scponly.8
/usr/bin/install -c -o 0 -g 0 -m 0644 debuglevel /usr/local/etc/scponly/debuglevel
if test "xscponlyc" != "x"; then \
/usr/bin/install -c -d /usr/local/sbin; \
rm -f /usr/local/sbin/scponlyc; \
cp scponly scponlyc; \
/usr/bin/install -c -o 0 -g 0 -m 4755 scponlyc /usr/local/sbin/scponlyc; \
fi

Beleza, o arquivo binário responsável por tudo está instalado no diretório /usr/local/sbin/scponlyc.

Quando da conexão, o SFTP/SSH irá invocar o subsystem, na maioria das distribuições já é default a configuração no arquivo sshd_config, apenas certifique-se de que seu arquivo está configurado, veja se a linha abaixo encontra-se no arquivo /etc/ssh/sshd_config

Subsystem sftp /usr/libexec/openssh/sftp-server

Agora devemos configurar o ambiente chroot para o nosso usuário, note que dentro do diretório que contém os arquivos, o mesmo que você está (scponly-4.6), encontra-se um script chamado: setup_chroot.sh , é ele o responsável por criar e copiar todos os arquivos/diretórios que irá compor o ambiente enjaulado.

DICA: Não tenha medo, leia o arquivo, principalmente as variáveis:

defaultusername="scponly"
defaulthomedirprefix="/home"
defaultwriteabledir="incoming"

É interessante você modificá-las, caso necessário para, por exemplo:

defaultusername="scponly"
defaulthomedirprefix="/var/www/sites"
defaultwriteabledir="public_html"

Quando o script for invocado, ele irá criar o ambiente chroot para o usuário dentro do diretório: /var/www/sites/usuario e o diretório public_html com permissões para apenas o usuario . Viu só, já temos um ambiente web protegido ;)

Feito isto, você já pode testar.

# sftp usuario@192.168.0.84
sftp> pwd
Remote working directory: /
sftp> ls
bin etc lib public_html usr
sftp> cd /
sftp> pwd
Remote working directory: /

Note que eu tentei mudar para o diretório / (raíz do sistema) e não me foi permitido.

OBS: Dê uma espiada no /etc/passwd, e note o bash e o $HOME utilizado pelo usuário usuario.

usuario:x:507:508::/var/www/sites/usuario:/usr/local/sbin/scponlyc

É isto!

 


Copyright© 2006 flaviotorres.com.br . Todos os direitos reservados.