• Nenhum resultado encontrado

Serviços de transferência de arquivos e de acesso remoto

N/A
N/A
Protected

Academic year: 2021

Share "Serviços de transferência de arquivos e de acesso remoto"

Copied!
24
0
0

Texto

(1)

Serviços de transferência de arquivos

e de acesso remoto

Serviços FTP, TELNET, SSH e

Segurança TCP-WRAPPERS

Outubro/2017 Prof. Jairo jairo@uni9.pro.br professor@jairo.pro.br http://www.jairo.pro.br/

(2)

Este material tem por única intenção reunir um conteúdo acadêmico necessário para auxiliar no ensino da disciplina "Prática e Administração de Sistemas Operacionais de Redes Livres", ministrado nos cursos de Tecnologias em Redes de Computadores e Segurança da Informação.

O conteúdo aqui exposto pode ser livremente redistribuído e usado como apoio de aula, desde que mantenha a sua integridade original.

O arquivo "ftp-telnet-ssh.pdf" pode ser livremente acessado em "http://www.jairo.pro.br/prat_adm_sist_oper/".

Qualquer crítica ou sugestão, favor entrar em contato com o Prof. Jairo no endereço eletrônico "jairo@uni9.pro.br" ou "professor@jairo.pro.br".

Sumário

1 - SERVIÇO FTP...3

1.1 - Instalação do serviço FTP standalone...3

1.2 - Configuração do serviço FTP vsftpd...4

1.3 - Cliente de serviço FTP...5

2 - SEGURANÇA TCP-WRAPPERS...7

3 - SERVIÇO TELNET...8

3.1 - Instalação do serviço TELNET xinetd...8

3.2 - Configuração do serviço TELNET xinetd...9

3.3 - Cliente de serviço TELNET...13

4 - SERVIÇO SSH...14

4.1 - Instalação do serviço OpenSSH...15

4.2 - Clientes do serviço SSH...17

4.2.1 - Cliente ssh...18

4.2.2 - Cliente scp...19

4.2.3 - Cliente sftp...20

4.3 - Relação de confiança SSH...21

(3)

1 - SERVIÇO FTP

FTP, File Transfer Protocol, é um protocolo bem antigo que teve origem no início dos anos 1970. Surpreendentemente, nos dias de hoje continua sendo muito usado.

Um dos principais serviços FTP usados hoje é o vsftpd, que tem esse nome das iniciais very secure file transfer protocol daemon, e por isso será usado.

NOTA: no mundo do software livre, existem muitas implementações de um mesmo

conceito, implementações estas que competem entre si. Cabe ao administrador do sistema escolher qual é a melhor implementação para o momento.

1.1 - Instalação do serviço FTP standalone

Como primeiro passo, verificar se o serviço vsftpd está instalado. Num Ubuntu (ou Debian), comandar:

NOTA 1: não havendo saída no comando acima, significa que não está instalado. NOTA 2: num CentOS ou Red Hat, o comando seria "rpm -aq | grep -i vsftpd". Para instalar o vsftpd num Ubuntu ou Debian, comandar:

NOTA: num CentOS ou Red Hat, o comando para instalar seria "yum install vsftpd". Num sistema SystemV, depois de instalado o serviço, deverá haver o arquivo de

inicialização (administração) do serviço, /etc/init.d/vsftpd:

NOTA: num sistema SystemD, por exemplo CentOS 7, o arquivo equivalente é o

root# apt-get install vsftpd

root# dpkg -l | grep -i vsftpd

root# ls /etc/init.d | grep vsftpd

(4)

/usr/lib/systemd/system/vsftpd.service.

Verificar as configurações do arquivo com o comando more:

Para funcionar o serviço, também é necessário que esteja instalado o executável /usr/sbin/vsftpd [daemon do serviço FTP]. Isso pode ser verificado com o comando ls:

1.2 - Configuração do serviço FTP vsftpd

Num Ubuntu ou Debian, o arquivo de configuração é /etc/vsftpd.conf. Para saber o que está configurado, verificar as linhas sem comentário com o comando grep:

NOTA: num CentOS ou Red Hat o arquivo está em /etc/vsftpd/vsftpd.conf.

O arquivo vsftpd.conf precisa ser configurado e incluído (ou descomentado) o seguinte conteúdo: === /etc/vsftpd/vsftpd.conf === local_enable=YES write_enable=YES chroot_local_user=NO tcp_wrappers=YES ======================== As configurações acima são:

• local_enable=YES: para permitir o acesso para todos os usuários locais; • write_enable=YES: para permitir a escrita (upload) no servidor FTP;

• chroot_local_user=NO: para não manter os usuários restritos (jail) a suas homes;

root# ls /usr/sbin/vsftpd

/usr/sbin/vsftpd

root# file /usr/sbin/vsftpd

/usr/sbin/vsftpd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32

root# more /etc/init.d/vsftpd

(5)

• tcp_wrappers=YES: para ter controle sobre quem está acessando o serviço. Depois de feita a configuração acima, o serviço precisa ser (re)iniciado. Num Ubuntu ou Debian o serviço já inicia por default com a instalação pelo apt-get, então neste caso reiniciar o serviço.

Num sistema SystemV, comandar:

NOTA: comandar "systemctl restart vsftpd" para reiniciar o serviço num sistema SystemD.

1.3 - Cliente de serviço FTP

Sabendo que foi disponibilizado serviço FTP na máquina com endereço IP, por exemplo, 192.168.1.10, usar a aplicação cliente ftp para fazer o acesso a este serviço:

NOTA: obtendo o acesso, ganha o prompt do shell cliente ftp.

Nesse prompt, comandar "?" para visualizar a lista de comandos disponíveis no acesso ftp:

shell$ ftp 192.168.1.10

Connected to 192.168.1.10. 220 (vsFTPd 2.3.5)

Name (Lab10:aluno): aluno 331 Password required for aluno Password:

230 User aluno logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp>

(6)

Para enviar um arquivo, usar "put", para enviar vários arquivos de uma única vez, usar "mput". Para baixar um arquivo, usar "get", para baixar vários arquivos de uma única vez usar "mget". O comando "ascii" configura a transferência para arquivo de texto [e não binário].

Por exemplo, o usuário aluno logado no servidor FTP em 192.168.1.10 irá baixar o arquivo /etc/passwd para o diretório /tmp da sua máquina local (Linux):

Se fosse o caso de enviar um arquivo do cliente para o servidor, o comando seria "put" e não "get". Com "mget" ou "mput" podem ser usados curingas "*", e assim transferir vários arquivos de uma única vez. Mas antes de usar "mget" ou "mput", é usual comandar "prompt off" para não precisar confirmar o download ou upload de arquivo por arquivo.

ftp> ?

Commands may be abbreviated. Commands are:

! debug mdir sendport site

$ dir mget put size

account disconnect mkdir pwd status append exit mls quit struct ascii form mode quote system bell get modtime recv sunique binary glob mput reget tenex bye hash newer rstatus tick

case help nmap rhelp trace

cd idle nlist rename type

cdup image ntrans reset user chmod lcd open restart umask close ls prompt rmdir verbose cr macdef passive runique ? delete mdelete proxy send

ftp> pwd

257 "/home/aluno" is the current directory

ftp> cd /etc

250 CWD command successful

ftp> lcd /tmp

Local directory now /tmp

ftp > ascii

200 Type set to A

ftp> get passwd

local: passwd remote: passwd

ftp> bye

221 Goodbye.

(7)

2 - SEGURANÇA TCP-WRAPPERS

TCP-Wrappers é um controle no acesso pela rede, usado como filtro para impedir clientes de determinados endereços ou redes de acessarem serviços. O controle TCP-Wrappers é feito na mesma máquina aonde está o serviço.

Ter controle no acesso a determinado serviço é muito importante para a segurança,

especialmente quando estamos disponibilizando serviços típicos da internet, onde os acessos podem ocorrer de qualquer lugar do mundo.

O controle do acesso é feito pelo executável /usr/sbin/tcpd, que normalmente é instalado por default. Mas caso ainda não esteja instalado, basta instalar o pacote tcpd num Ubuntu ou Debian, e pacote tcp_wrappers num CentOS ou Red Hat.

As configurações do TCP-Wrapper são locais ao host, nos arquivos "/etc/hosts.allow" e "/etc/hosts.deny", mas dependem da biblioteca libwrap. Ou seja, apenas os serviços compilados contra essa biblioteca é que podem ser configurados para ter esse controle no acesso. Por questões históricas, o servidor xinetd suporta TCP-Wrappers, bem como uma parte das implementações de serviços SSH. O serviço FTP vsftpd também suporta TCP-Wrappers.

Tipicamente, as configurações TCP-Wrapper envolvem bloquear o acesso para todos no arquivo /etc/hosts.deny, e posteriormente liberar o acesso no arquivo /etc/hosts.allow para alguns endereços IPs ou redes.

Desse modo, as configurações abaixo liberam o acesso aos serviços TELNET e FTP. No caso do TELNET, apenas para clientes com IPs da rede 192.168.1.0/24 e também para o IP 10.1.2.3. No caso do serviço FTP, essas configurações liberam o acesso para qualquer IP:

=== /etc/hosts.deny === ALL: ALL ================== === /etc/hosts.allow =================== in.telnetd: 10.1.2.3, 192.168.1.0/255.255.255.0 vsftpd: ALL ===================================

Convém notar que a configuração em /etc/hosts.deny está impedindo o acesso a todo serviço [ALL] para todo IP ou rede [ALL], daí a notação ALL:ALL. Desse modo, no

(8)

3 - SERVIÇO TELNET

O serviço telnet oferece acesso em linha de comando [shell] a um cliente remoto. O

protocolo TELNET também é muito antigo, e foi desenvolvido em 1969. No entanto, ainda é usado atualmente.

Na época de criação do TELNET e FTP, a segurança no acesso em rede era um aspecto secundário, e por isso tanto TELNET quanto FTP não implementam criptografia na transmissão de dados. Por isso, atualmente estes serviços deveriam ser substituídos por SSH.

3.1 - Instalação do serviço TELNET xinetd

O serviço telnet, neste caso, será instalado debaixo do xinetd, portanto não será standalone. Num Ubuntu ou Debian, para descobrir se o serviço xinetd está instalado, uma dica simples é procurar pelo pacote xinetd, com o comando dpkg:

NOTA 1: não havendo saída do comando acima, significa que não está instalado. NOTA 2: num CentOS ou Red Hat, o comando seria "rpm -aq | grep -i xinetd". Para instalar o xinetd num Ubuntu ou Debian, comandar:

NOTA: num CentOS ou Red Hat, o comando para instalar seria "yum install xinetd". Após instalado, verificar se existem os seguintes arquivos:

/etc/xinetd.conf: é o arquivo de configuração, que aponta para o diretório /etc/xinetd.d;

root# apt-get install xinetd

(9)

/etc/xinetd.d: é o diretório onde estão os arquivos de configuração dos serviços xinetd;/usr/sbin/xinetd: é o executável que ao rodar dá origem ao processo daemon.

É importante lembrar que o serviço xinetd apenas disponibiliza serviços a partir do daemon xinetd, então é necessário também verificar se o serviço telnet está instalado para rodar sobre o xinetd.

Deste modo, é necessário verificar se está instalado o serviço telnet. Num Ubuntu ou Debian, comandar:

NOTA 1: não havendo saída do comando acima, significa que não está instalado.

NOTA 2: num CentOS ou Red Hat, o comando seria "rpm -aq | grep telnet-server". Para instalar o telnetd num Ubuntu ou Debian, comandar:

NOTA: num CentOS ou Red Hat, o comando seria "yum install telnet-server".

Após instalado, verificar se existe o arquivo /usr/sbin/in.telnetd, que é o daemon do serviço telnet:

NOTA: o fato de instalar o serviço TELNET sobre o xinetd não significa que este serviço não possa ser disponibilizado de outro modo, por exemplo inetd ou standalone. Porém, na maior parte dos casos de instalação em Linux, TELNET será um serviço disponibilizado sobre o daemon xinetd.

3.2 - Configuração do serviço TELNET xinetd

root# apt-get install telnetd

root# dpkg -l | grep telnetd

root# file /usr/sbin/in.telnetd

/usr/sbin/in.telnetd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, BuildID[sha1]=0xe3e1bf5cc444f9ed6c6d86ca678d704029fa6cee, stripped

(10)

Nos sistemas Ubuntu, Debian, CentOS e Red Hat, a instalação do serviço telnet não instala o arquivo de configuração desse serviço em /etc/xinetd.d/telnet. Desse modo, precisa ser criado ou copiado de algum lugar. O jeito mais fácil é baixar de www.jairo.pro.br com o comando wget:

Caso haja um proxy no meio do caminho, que é o caso de acesso à internet a partir dos laboratórios acadêmicos da Uninove, antes de comandar wget precisa passar a instrução de usuário e senha para a variável http_proxy, e isso é feito com o comando export:

Onde:

RA: é o RA do aluno;

SENHA: é a senha de acesso do aluno;

186.251.39.92: é o IP do serviço proxy, que atende na porta 3128 (é um Squid). No arquivo de configuração /etc/xinetd.d/telnet baixado de www.jairo.pro.br deverá ter o seguinte conteúdo:

===== /etc/xinetd.d/telnet =========================== # default: on

# description: The telnet server serves telnet sessions; it uses \ # unencrypted username/password pairs for authentication. service telnet { disable = no flags = REUSE socket_type = stream wait = no nice = 10 user = root server = /usr/sbin/in.telnetd log_on_failure += USERID } ===============================================

NOTA: se a configuração disable estiver "disable = yes", o serviço telnet não vai iniciar na inicialização do xinetd.

Outra maneira de obter o arquivo de configuração /etc/xinetd.d/telnet é através do

root# cd /etc/xinetd.d

root# wget www.jairo.pro.br/telnet

(11)

comando man xinetd.conf:

Neste manual, existe a descrição da configuração do serviço xinetd, que inclui exemplos. Basta então procurar pelo serviço telnet e recortar 9 linhas abaixo do padrão encontrado:

Feita esta verificação, basta redirecionar a saída para o arquivo telnet:

Depois de obtido o arquivo de configuração, fazer os acertos nas configurações conforme explicado anteriormente.

E com isso está instalado e configurado o serviço TELNET para rodar sobre o servidor xinetd. Mas antes de iniciar o servidor xinetd, verificar quais portas TCP estão abertas. Para isso, é necessário a aplicação nmap para fazer um scan de portas. Se esta aplicação não estiver instalada, será necessário instalar.

Num Ubuntu ou Debian, o comando para instalar nmap é:

NOTA: num CentOS ou Red Hat, o comando acima seria "yum install nmap". Agora, é só fazer o scan de portas:

root# apt-get install nmap

root# nmap localhost

Starting Nmap 5.21 ( http://nmap.org ) at 2017-07-22 16:06 BRT Nmap scan report for localhost (127.0.0.1)

Not shown: 999 closed ports

PORT STATE SERVICE 631/tcp open ipp

Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds

root# man xinetd.conf

root# man xinetd.conf | grep -A 9 "service telnet"

(12)

NOTA: o nmap mostrou que apenas a porta 631 [servidor de impressão] está aberta. Depois de verificado quais portas estão abertas, (re)iniciar o serviço xinetd. É interessante notar que o serviço TELNET foi configurado para funcionar sob o xinetd, portanto sem a sua própria inicialização.

Para verificar se o serviço xinetd está rodando, procurar pelo processo daemon:

No exemplo acima, o processo do serviço xinetd está rodando. Para padronizar a inicialização, este deve ser parado agora.

Num sistema SystemV, usar o script de inicialização no /etc/init.d:

NOTA: num sistema SystemD, o comando acima seria "systemctl stop xinetd". Agora pode ser notado que o processo daemon xinetd não está mais rodando:

Por fim, iniciar o servidor xinetd. Num sistema SystemV, o comando é:

NOTA: num sistema SystemD, o comando acima seria "systemctl start xinetd".

Porém, o comando acima só mostrou que o serviço xinetd iniciou, mas como saber se foi habilitado telnet? Num Ubuntu ou Debian, para saber o número de serviços habilitados pelo xinetd na inicialização, consultar os logs do sistema:

root# ps -ef | grep xinetd

root# /etc/init.d/xinetd start

Iniciando o xinetd: [ OK ]

root# ps -ef | grep xinetd

root 3234 1 0 15:05 ? 00:00:00 /usr/sbin/xinetd

root# /etc/init.d/xinetd stop

(13)

NOTA 1: a saída acima indica 1 serviço disponível debaixo do xinetd, que no caso é o serviço telnet.

NOTA 2: Num CentOS ou Red Hat, usar o comando "grep xinetd /var/log/messages". Depois disso, o scan de portas vai mostrar que a porta 23 também está aberta:

E o comando ps vai mostrar que o daemon xinetd está rodando:

3.3 - Cliente de serviço TELNET

Sabendo que foi disponibilizado serviço TELNET na máquina remota com endereço IP, por exemplo, 192.168.1.10, usar a aplicação cliente telnet para fazer o acesso a esse serviço:

root# nmap localhost

Starting Nmap 5.21 ( http://nmap.org ) at 2017-07-22 16:10 BRT Nmap scan report for localhost (127.0.0.1)

Not shown: 998 closed ports

PORT STATE SERVICE 23/tcp open telnet 631/tcp open ipp

Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds

root# ps -ef | grep xinetd

root 3314 1 0 15:41 ? 00:00:00 /usr/sbin/xinetd

root# grep xinetd /var/log/syslog

...

xinetd: Started working: 1 available service ...

(14)

Uma vez conectado no acesso telnet, pode disparar comandos no servidor remoto.

O acesso telnet é usado para administrar sistemas remotos, tais como servidores, roteadores, switches e firewalls.

4 - SERVIÇO SSH

SSH vem de Secure SHell, ou shell seguro, e foi criado para resolver os problemas de segurança dos antigos protocolos TELNET e FTP que, embora funcionais, não implementam criptografia de dados.

Desse modo, quando se faz um acesso a um serviço FTP ou TELNET, tanto usuário e senha quanto dados enviados ou recebidos são transportados pela rede expostos como texto. E qualquer um que intercepte essa informação obtém diretamente a senha de acesso ao serviço, além dos dados que estão trafegando pela rede.

Existe pelo menos quatro vantagens em usar SSH ao invés de TELNET e FTP:

• i) o SSH usa uma única porta, que é a 22, tanto para acesso shell remoto quanto transferir arquivos;

• ii) o SSH implementa criptografia de dados;

iii) o SSH tem pelo menos três aplicações clientes: ssh, sftp e scp;

• iv) com SSH é possível criar relação de confiança com par de chave pública e privada.

shell$ telnet 192.168.1.10

Trying 192.168.1.10... Connected to 192.168.1.10. Escape character is '^]'. Ubuntu 12.04.5 LTS Lab10 login: aluno Password:

Last login: Sun Sep 13 11:36:57 from 192.168.1.13 [aluno@192.168.1.10]$ hostname

Lab-10

(15)

O serviço SSH usa criptografia assimétrica, com par de chave pública e privada. Nesse acesso [por exemplo], os dados são criptografados no servidor usando a chave pública do cliente [previamente recebida pelo servidor], e então decriptografados no cliente com a chave privada do cliente.

O uso de protocolos seguros não impede que os pacotes de dados sejam interceptados, porém só quem consegue extrair a informação é o detentor da chave privada.

O estabelecimento de uma conexão segura inicia com o envio da chave pública, tanto por parte do cliente quanto do servidor. As chaves privadas são mantidas protegidas.

4.1 - Instalação do serviço OpenSSH

A implementação mais comum de serviço SSH é o OpenSSH.

Num sistema SystemV, para descobrir se o serviço sshd está instalado, uma dica simples é procurar pelo seu script de inicialização em /etc/init.d. Numa distribuição Debian ou Ubuntu, o comando é:

NOTA 1: num Red Hat ou CentOS, o arquivo é "/etc/init.d/sshd".

NOTA 2: num sistema SystemD, o arquivo equivalente é sshd.service e está em /usr/lib/systemd/system.

Se não houvesse saída no comando acima, seria indicativo de que o serviço SSH não está instalado. Neste caso, num Debian ou Ubuntu, poderia ser instalado com o comando apt-get:

NOTA: num Red Hat ou CentOS, o comando seria "yum install openssh-server".

root# ls /etc/init.d | grep ssh

/etc/init.d/ssh

root# apt-get install openssh-server

(16)

Neste caso, o serviço SSH foi instalado como standalone [que é o padrão] e não inetd. Após instalado num SystemV, verificar se existem os seguintes arquivos:

NOTA 1: os arquivos acima são relativos a um Ubuntu 12.

NOTA 2: Num Red Hat ou CentOS SystemV, o script é /etc/init.d/sshd. Na saída dos comando acima, temos:

/etc/init.d/ssh: é o script de inicialização do serviço ssh (CentOS: /etc/init.d/sshd). Num SystemD o equivalente é o arquivo de unit, que num Ubuntu é

/lib/systemd/system/ssh.service e num CentOS é /usr/lib/systemd/system/sshd.service; • /usr/sbin/sshd: é o executável do serviço, ao rodar dá origem ao processo daemon;/etc/ssh/sshd_config: é o arquivo de configuração do serviço ssh.

Para verificar se existe um processo de nome sshd, comandar:

Havendo saída no comando acima, isso indica que o processo está rodando. Para parar o serviço num sistema SystemV, comandar:

NOTA 1: num CentOS ou Red Hat, o script é sshd e não ssh.

NOTA 2: num sistema SystemD, o comando equivalente é "systemctl stop sshd".

root# file /etc/init.d/ssh

/etc/init.d/sshd: Bourne shell script text executable

root# file /usr/sbin/sshd

/usr/sbin/sshd: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

root# file /etc/ssh/sshd_config

/etc/ssh/sshd_config: ASCII English text

root# ps -ef | grep sshd

root 3234 1 0 15:05 ? 00:00:00 /usr/sbin/sshd

root# /etc/init.d/ssh stop

(17)

Nesta situação, o scan de portas com nmap não deve mostrar a porta 22 aberta. Agora, então, iniciar o serviço ssh. Num sistema SystemV, o comando é:

NOTA 1: este comando foi executado num Ubuntu. Num CentOS, o nome do script é sshd; NOTA 2: num sistema SystemD, o comando equivalente é "systemctl start sshd".

Depois disso, o scan de portas vai mostrar que a porta 22 está aberta:

E o comando ps vai mostrar que o daemon sshd está rodando:

4.2 - Clientes do serviço SSH

Antes de acessar o serviço com as aplicações clientes, verificar se o TCP-Wrappers está bloqueando o acesso em /etc/hosts.deny. Se sim, incluir uma linha em /etc/hosts.allow para permitir o acesso ao serviço ssh:

root# /etc/init.d/ssh start

Iniciando o ssh: [ OK ]

root# nmap localhost

Starting Nmap 5.21 ( http://nmap.org ) at 2017-07-22 16:22 BRT Nmap scan report for localhost (127.0.0.1)

Not shown: 998 closed ports

PORT STATE SERVICE 22/tcp open ssh 631/tcp open ipp

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

root# ps -ef | grep sshd

(18)

=== /etc/hosts.allow ========== sshd: 192.168.1.0/255.255.255.0 =========================

NOTA: a configuração acima libera o acesso a todos os clientes na rede 192.168.1.0/24. 4.2.1 - Cliente ssh

A aplicação cliente ssh é semelhante ao cliente telnet, mas com a segurança da criptografia.

Sabendo que foi disponibilizado serviço SSH na máquina remota com endereço IP 192.168.1.10, usar a aplicação cliente ssh para fazer o acesso a este serviço:

NOTA: no primeiro acesso ao serviço SSH é oferecido o fingerprint da chave pública do servidor, e para continuar o acesso o usuário precisa concordar escrevendo "yes". Com isso, a chave pública do servidor é escrita no arquivo /home/aluno/.ssh/known_hosts, de modo que a partir do segundo acesso não será mais feita esta pergunta. O fingerprint é uma pequena sequência de bytes, usada para identificar uma chave pública.

Uma vez conectado no acesso ssh, pode disparar comandos no servidor remoto.

O acesso ssh também é usado para administrar hosts remotos e equipamentos de rede como roteadores, switches e firewalls.

Para desconectar do serviço ssh, comandar exit:

Uma alternativa à notação "ssh aluno@192.168.1.10" é usar a opção -l, de login name:

shell$ ssh aluno@192.168.1.10

The authenticity of host 'localhost (192.168.1.10)' can't be established. RSA key fingerprint is 66:39:9d:7a:8f:4c:af:1b:40:c4:a7:35:42:15:3b:d6. Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'localhost' (RSA) to the list of known hosts. aluno@192.168.1.10's password:

Last login: Sat Jul 22 11:37:30 2017 from 192.168.1.13 [aluno@192.168.1.10]$

shell$ ssh aluno@192.168.1.10

[aluno@192.168.1.10]$ exit

(19)

Uma outra maneira de usar a aplicação cliente ssh, é para disparar diretamente comandos remotos, sem a necessidade de fazer o acesso remoto shell. Por exemplo:

NOTA: a máquina local com IP 192.168.1.11 tem hostname lab-11, e o servidor remoto é lab-10.

4.2.2 - Cliente scp

A aplicação cliente scp [secure copy] serve para transferir arquivos usando o protocolo SSH.

Por exemplo, para transferir o arquivo /etc/passwd do host remoto 192.168.1.10 para o diretório /tmp local [download], comandar:

Para enviar o arquivo local /etc/group para o diretório /var/tmp do servidor remoto [upload], comandar:

NOTA: a sintaxe do scp é semelhante à do comando cp.

shell$ ssh -l aluno 192.168.1.10

shell$ scp aluno@192.168.1.10:/etc/passwd /tmp

aluno@192.168.1.10's password:

passwd 100% 2023 2.0KB/s 00:00

shell$

shell$ scp /etc/group aluno@192.168.1.10:/var/tmp

aluno@192.168.1.10's password:

group 100% 875 0.9KB/s 00:00

shell$

shell$ ssh aluno@192.168.1.10 'hostname'

aluno@192.168.0.10's password: lab-10

shell$ hostname

(20)

Outra vantagem do cliente scp é possibilitar transferir diretórios com todo o conteúdo, usando a opção "-r" (recursivo):

NOTA 1: neste exemplo, todo o diretório local /bin (e seu conteúdo) foi transferido para o /tmp da máquina em 192.168.1.10.

NOTA 2: o ftp não transfere diretórios. 4.2.3 - Cliente sftp

A aplicação cliente sftp tem esse nome de secure ftp, pois transfere arquivos usando criptografia de dados.

A funcionalidade do sftp é similar a do cliente ftp, incluindo a interatividade, o que significa dizer que todos os comandos ftp funcionam do mesmo jeito no sftp.

Por exemplo, para acessar o host no IP 192.168.1.10, comandar:

shell$ sftp aluno@192.168.1.10

aluno@192.168.1.10's password: sftp> ?

Available commands:

cd path Change remote directory to 'path' lcd path Change local directory to 'path' chgrp grp path Change group of file 'path' to 'grp'

chmod mode path Change permissions of file 'path' to 'mode' chown own path Change owner of file 'path' to 'own'

df [path] Display statistics for current directory or filesystem containing 'path' help Display this help text

get remote-path [local-path] Download file

lls [ls-options [path]] Display local directory listing ln oldpath newpath Symlink remote file

lmkdir path Create local directory lpwd Print local working directory ls [path] Display remote directory listing lumask umask Set local umask to 'umask' mkdir path Create remote directory

progress Toggle display of progress meter ...

sftp>

(21)

Mas o sftp não fica só na imitação do ftp, ele também tem a sua própria sintaxe, que é bastante eficiente para transferir arquivos.

No exemplo abaixo, temos alguns destes comandos próprios do cliente sftp:

NOTA 1: o comando get é para baixar arquivos, e put para enviar. Não é necessário usar mget ou mput.

NOTA 2: algumas versões do cliente sftp suportam o modo recursivo "-r" para transferir diretórios, enquanto outras não.

4.3 - Relação de confiança SSH

Com ssh, é possível (e recomendado) criar relação de confiança entre o cliente e o servidor, desse modo dispensando o uso de senhas. Isto é seguro, recomendado e muito importante no caso de transferência agendada de arquivos, pelo uso de scripts. Neste caso, não existe a necessidade de escrever a senha em algum lugar.

A relação de confiança é obtida a partir da criação de um par de chaves, com o comando ssh-keygen: shell$ sftp aluno@192.168.1.10 aluno@192.168.1.10's password: sftp> get /bin/c* /tmp sftp> put /tmp/c* /var/tmp sftp> get -r /bin /tmp sftp> exit

shell$ ssh-keygen -b 1024 -t rsa

Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again:

Your identification has been saved in /home/aluno/.ssh/id_rsa. Your public key has been saved in /home/aluno/.ssh/id_rsa.pub. The key fingerprint is:

d8:b8:de:5b:2c:2d:1d:ed:c8:ea:a1:10:a0:63:c4:63 aluno@lab-11 The key's randomart image is:

+--[RSA 1024]---+

| |

|. |

| E. | ...

(22)

NOTA 1: no comando acima, a opção "-b" especifica o número de bits na chave e "-t" o tipo da chave, no caso algoritmo rsa. Não foi usado passphrase para esta chave, portanto ela não foi criptografada, mas isso não é inseguro pois esta chave será transportada pela rede usando scp, que é seguro;

NOTA 2: como não foi especificado o local onde seria criado o par de chaves, estas foram criadas no subdiretório .ssh na home do usuário, na máquina lab-11 (192.168.1.11).

Para ver o par de chaves, comandar:

NOTA: as chaves do par são indissociáveis, se perder uma precisa recriar as duas de novo. O passo seguinte é enviar a chave pública id_rsa.pub para o servidor ssh remoto, no caso 192.168.1.10. Lá, esta chave deverá ser renomeada para authorized_keys, no caminho absoluto /home/aluno/.ssh/authorized_keys.

Para este envio ser seguro, deve ser usado o serviço ssh:

NOTA: caso já existisse um arquivo /home/aluno/.ssh/authorized_keys em 192.168.1.10, para não perder a(s) chave(s) que houvesse(m) lá, o conteúdo do arquivo id_rsa.pub deveria ser acrescentado no final de authorized_keys.

No servidor ssh, as permissões de authorized_keys devem ser, no mínimo, 600. Para garantir isso, comandar:

Depois disso, já deverá funcionar o acesso sem a necessidade de usar senha:

shell$ ls -l /home/aluno/.ssh/id_rsa*

-rw--- 1 aluno aluno 891 Fev 11 17:20 /home/aluno/.ssh/id_rsa -rw-r--r-- 1 aluno aluno 227 Fev 11 17:20 /home/aluno/.ssh/id_rsa.pub

shell$ cd /home/aluno/.ssh

shell$ scp id_rsa.pub aluno@192.168.1.10:/home/aluno/.ssh/authorized_keys

shell$ ssh aluno@192.168.1.10 'chmod 600 /home/aluno/.ssh/authorized_keys'

(23)

Um exemplo bem simples de script para agendar copia de arquivos de 192.168.1.11 (o cliente) para 192.168.1.10 (o servidor SSH remoto), é:

=== copy.sh ================== #!/bin/bash

file=$1

scp $file aluno@192.168.1.10:/tmp ===========================

Dar permissão de execução para o script copy.sh:

Depois, disparar este script para copiar para o /tmp do servidor o arquivo passado como primeiro argumento:

4.4 - Impedir o root de logar diretamente no serviço

Uma configuração importante no serviço SSH é impedir o acesso direto do usuário root, pois isso caracteriza um acesso genérico com privilégios. O modo correto [e recomendado] é o

administrador logar com o seu usuário e depois comandar su ou sudo para ganhar privilégios de root, e com isso registrar em logs do sistema quem é a pessoa que está executando estes comandos. Para impedir o acesso direto do usuário root no serviço SSH basta que haja a seguinte linha de configuração no arquivo /etc/ssh/sshd_config:

shell$ ssh aluno@192.168.1.10

[aluno@192.168.1.10]$ [aluno@192.168.1.10]$ exit

shell$

shell$ /home/aluno/copy.sh /etc/passwd

passwd 100% 2746 2.7KB/s 00:00 shell$

(24)

=== /etc/ssh/sshd_config ========= PermitRootLogin no

============================

Referências

Documentos relacionados

SENSOR DE

O emprego de um estimador robusto em variável que apresente valores discrepantes produz resultados adequados à avaliação e medição da variabilidade espacial de atributos de uma

Estaca de concreto moldada in loco, executada mediante a introdução no terreno, por rotação, de um trado helicoidal contínuo. A injeção de concreto é feita pela haste

Frente ao exposto, este trabalho teve por objetivo avaliar discentes da disciplina de Matemática Discreta nos conteúdos de lógica formal, teoria dos conjuntos e

Com o objetivo de compreender como se efetivou a participação das educadoras - Maria Zuíla e Silva Moraes; Minerva Diaz de Sá Barreto - na criação dos diversos

E ele funciona como um elo entre o time e os torcedores, com calçada da fama, uma série de brincadeiras para crianças e até área para pegar autógrafos dos jogadores.. O local

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

A prova do ENADE/2011, aplicada aos estudantes da Área de Tecnologia em Redes de Computadores, com duração total de 4 horas, apresentou questões discursivas e de múltipla