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 exceçã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 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ão 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 criará o ambiente chroot para o usuário dentro do diretório /var/www/sites/usuário e o diretório public_html com permissões para apenas o usuário. 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 / (raiz 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 usuário.
usuário:x:507:508::/var/www/sites/usuário:/usr/local/sbin/scponlyc
É isto!