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!
|