Introdução
Neste laboratório, exploraremos o comando Linux smbclient e suas aplicações práticas. O utilitário smbclient é uma ferramenta poderosa que permite aos sistemas Linux interagir com compartilhamentos de arquivos Windows (compartilhamentos SMB/CIFS). SMB (Server Message Block) é um protocolo de rede que o Windows usa para compartilhamento de arquivos, e smbclient permite que usuários Linux acessem esses compartilhamentos.
Começaremos instalando o smbclient em nosso sistema Ubuntu 22.04, aprenderemos a sintaxe básica do comando e, em seguida, demonstraremos como conectar a compartilhamentos Windows, navegar por diretórios e transferir arquivos.
Ao final deste laboratório, você será capaz de:
- Instalar e configurar o utilitário
smbclient - Conectar a compartilhamentos Windows a partir do Linux
- Navegar e listar arquivos em compartilhamentos Windows
- Transferir arquivos entre sistemas Linux e Windows
Instalando smbclient no Ubuntu 22.04
O pacote smbclient é uma ferramenta de linha de comando que permite aos sistemas Linux interagir com compartilhamentos de arquivos SMB/CIFS, comumente usados em ambientes Windows. Nesta etapa, instalaremos este pacote em nosso sistema Ubuntu.
Primeiro, vamos atualizar o índice de pacotes para garantir que obtemos a versão mais recente:
sudo apt update
Você deve ver uma saída semelhante a esta:
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [114 kB]
Get:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
Fetched 324 kB in 1s (324 kB/s)
Reading package lists... Done
Agora, vamos instalar o pacote smbclient:
sudo apt install -y smbclient
A saída será algo parecido com isto:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libsmbclient
Suggested packages:
samba-common
The following NEW packages will be installed:
libsmbclient smbclient
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 479 kB of archives.
After this operation, 1,711 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 libsmbclient amd64 2:4.15.5+dfsg-1ubuntu2 [222 kB]
Get:2 http://archive.ubuntu.com/ubuntu jammy/main amd64 smbclient amd64 2:4.15.5+dfsg-1ubuntu2 [257 kB]
Fetched 479 kB in 0s (1,030 kB/s)
Selecting previously unselected package libsmbclient.
(Reading database ... 26536 files and directories currently installed.)
Preparing to unpack .../libsmbclient_2%3a4.15.5+dfsg-1ubuntu2_amd64.deb ...
Unpacking libsmbclient (2:4.15.5+dfsg-1ubuntu2) ...
Selecting previously unselected package smbclient.
Preparing to unpack .../smbclient_2%3a4.15.5+dfsg-1ubuntu2_amd64.deb ...
Unpacking smbclient (2:4.15.5+dfsg-1ubuntu2) ...
Setting up libsmbclient (2:4.15.5+dfsg-1ubuntu2) ...
Setting up smbclient (2:4.15.5+dfsg-1ubuntu2) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3) ...
Para verificar se o smbclient foi instalado corretamente, execute:
smbclient --version
Você deve ver uma saída mostrando a versão do smbclient que foi instalada:
Version 4.15.5-Ubuntu
Agora que instalamos o smbclient, podemos começar a usá-lo para interagir com compartilhamentos SMB/CIFS.
Entendendo os Fundamentos do smbclient
Agora que instalamos o smbclient, vamos entender seu uso básico e sintaxe antes de conectar a compartilhamentos SMB reais.
Sintaxe do Comando
A sintaxe básica para o comando smbclient é:
smbclient //server/share -U username%password [options]
Onde:
//server/shareé o caminho UNC (Convenção Universal de Nomenclatura) para o compartilhamento SMB-U username%passwordespecifica o nome de usuário e a senha para autenticação[options]são parâmetros adicionais que você pode fornecer
Criando um Diretório Local para Prática
Vamos criar um diretório onde podemos armazenar arquivos que podemos querer transferir de ou para compartilhamentos SMB:
mkdir -p ~/project/smb-files
Vamos criar um arquivo de exemplo neste diretório que podemos usar mais tarde:
echo "This is a test file for SMB transfer" > ~/project/smb-files/test.txt
Explorando a Ajuda do smbclient
Para ver todas as opções disponíveis para smbclient, use o comando de ajuda:
smbclient --help
Isso exibirá um texto de ajuda extenso com todas as opções disponíveis. Aqui está um trecho do que você pode ver:
Usage: smbclient [OPTION...] service <password>
-M, --message=HOST Send message
-I, --ip-address=IP Use this IP to connect to
-E, --stderr Write messages to stderr instead of stdout
-L, --list=HOST Get a list of shares available on a host
-T, --tar=<c|x>IXFvgbNan Command line tar
-D, --directory=DIR Start from directory
...
Comandos Comuns do smbclient
Quando você estiver conectado a um compartilhamento SMB com smbclient, você pode usar vários comandos para navegar e operar em arquivos. Aqui estão alguns comandos comuns:
lsoudir: Listar arquivos e diretórioscd directory: Mudar para um diretório diferenteget file [localfile]: Baixar um arquivo do compartilhamentoput file [remotefile]: Carregar um arquivo para o compartilhamentomget files...: Baixar múltiplos arquivosmput files...: Carregar múltiplos arquivosmkdir directory: Criar um diretóriormdir directory: Remover um diretóriorm file: Excluir um arquivohelpou?: Exibir ajudaquitouexit: Sair do smbclient
Agora que entendemos os fundamentos do smbclient, na próxima etapa, veremos como conectar a um compartilhamento SMB real.
Configurando um Ambiente SMB de Teste
Em um cenário do mundo real, você se conectaria a um servidor Windows ou Samba real. No entanto, para este laboratório, simularemos um ambiente SMB usando um servidor Samba local. Essa abordagem nos permite praticar os comandos smbclient sem exigir acesso a um servidor externo.
Instalando o Servidor Samba
Primeiro, vamos instalar o pacote do servidor Samba:
sudo apt install -y samba
Você deve ver uma saída indicando o processo de instalação:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
attr python3-dnspython python3-gpg python3-ldb python3-markdown python3-pygments python3-samba samba-common samba-common-bin samba-dsdb-modules samba-libs samba-vfs-modules tdb-tools
Suggested packages:
bind9 bind9utils ctdb ldb-tools ntp | chrony python-markdown-doc python-pygments-doc
The following NEW packages will be installed:
attr python3-dnspython python3-gpg python3-ldb python3-markdown python3-pygments python3-samba samba samba-common samba-common-bin samba-dsdb-modules samba-libs samba-vfs-modules tdb-tools
0 upgraded, 14 newly installed, 0 to remove and 0 not upgraded.
Need to get 10.1 MB of archives.
After this operation, 51.3 MB of additional disk space will be used.
...
Criando um Compartilhamento Samba
Agora, vamos criar uma configuração simples de compartilhamento Samba. Primeiro, vamos fazer um backup do arquivo de configuração original:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
Crie um diretório para compartilhar:
mkdir -p ~/project/samba-share
Vamos criar um arquivo de teste neste diretório compartilhado:
echo "This is a test file in our Samba share" > ~/project/samba-share/shared-test.txt
Agora, vamos criar uma configuração Samba simplificada:
sudo bash -c 'cat > /etc/samba/smb.conf << EOF
[global]
workgroup = WORKGROUP
server string = Samba Server
log file = /var/log/samba/log.%m
max log size = 50
security = user
map to guest = bad user
[testshare]
path = /home/labex/project/samba-share
browseable = yes
read only = no
guest ok = yes
force user = labex
EOF'
Adicione o usuário atual aos usuários Samba e defina uma senha para teste:
sudo smbpasswd -a labex
Quando solicitado, insira uma senha simples como password (você precisará digitá-la duas vezes):
New SMB password:
Retype new SMB password:
Added user labex.
Reinicie o serviço Samba para aplicar as alterações:
sudo service smbd restart
Agora temos um compartilhamento Samba local chamado testshare configurado em nosso sistema. Podemos usar o smbclient para nos conectar a ele como se fosse um compartilhamento Windows remoto.
Conectando a Compartilhamentos SMB com smbclient
Agora que configuramos nosso ambiente SMB de teste, vamos nos conectar ao compartilhamento usando smbclient.
Listando Compartilhamentos Disponíveis
Primeiro, vamos listar todos os compartilhamentos disponíveis em nossa máquina local:
smbclient -L localhost -U labex
Quando solicitado, insira a senha que você definiu para o usuário Samba (por exemplo, password):
Enter WORKGROUP\labex's password:
Você deve ver uma saída semelhante a esta:
Sharename Type Comment
--------- ---- -------
testshare Disk
IPC$ IPC IPC Service (Samba Server)
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
UBUNTU Samba Server
Workgroup Master
--------- -------
WORKGROUP UBUNTU
Isso mostra que nosso compartilhamento testshare recém-criado está disponível.
Conectando ao Compartilhamento
Agora, vamos nos conectar ao compartilhamento testshare:
smbclient //localhost/testshare -U labex
Insira a senha quando solicitado:
Enter WORKGROUP\labex's password:
Após uma conexão bem-sucedida, você verá o prompt do smbclient:
Try "help" to get a list of possible commands.
smb: \>
Navegando e Listando Arquivos
Agora que estamos conectados ao compartilhamento, vamos explorar alguns comandos básicos:
Para listar arquivos no diretório atual:
smb: \> ls
Você deve ver o arquivo de teste que criamos anteriormente:
. D 0 Tue Nov 30 12:00:00 2022
.. D 0 Tue Nov 30 12:00:00 2022
shared-test.txt N 37 Tue Nov 30 12:00:00 2022
8467839 blocks of size 4096. 3524491 blocks available
Criando um Diretório Remoto
Vamos criar um novo diretório no compartilhamento SMB:
smb: \> mkdir test-directory
Liste o conteúdo novamente para verificar se o diretório foi criado:
smb: \> ls
Você deve ver o novo diretório:
. D 0 Tue Nov 30 12:01:00 2022
.. D 0 Tue Nov 30 12:00:00 2022
shared-test.txt N 37 Tue Nov 30 12:00:00 2022
test-directory D 0 Tue Nov 30 12:01:00 2022
8467839 blocks of size 4096. 3524491 blocks available
Mudando de Diretório
Vamos mudar para o diretório que acabamos de criar:
smb: \> cd test-directory
Verifique se estamos no novo diretório:
smb: \test-directory\> ls
A saída deve mostrar um diretório vazio:
. D 0 Tue Nov 30 12:01:00 2022
.. D 0 Tue Nov 30 12:01:00 2022
8467839 blocks of size 4096. 3524491 blocks available
Para voltar ao diretório pai:
smb: \test-directory\> cd ..
Obtendo Ajuda Dentro do smbclient
Para ver os comandos disponíveis dentro do smbclient:
smb: \> help
Você verá uma lista de todos os comandos disponíveis:
? allinfo altname archive backup
blocksize cancel case_sensitive cd chmod
chown close del dir du
echo exit get getfacl geteas
hardlink help history iosize lcd
link lock lowercase ls l
mask md mget mkdir more
mput newer notify open posix
posix_encrypt posix_open posix_mkdir posix_rmdir posix_unlink
print prompt put pwd q
queue quit readlink rd recurse
reget rename reput rm rmdir
showacls setea setmode stat symlink
tar tarmode timeout translate unlock
volume vuid wdel logon listconnect
showconnect tcon tdis tid utimes
logoff .. !
Quando terminar de explorar, você pode sair da sessão do smbclient:
smb: \> quit
Na próxima etapa, aprenderemos como transferir arquivos entre o sistema Linux e os compartilhamentos SMB.
Transferindo Arquivos com smbclient
Nesta etapa final, aprenderemos como transferir arquivos entre nosso sistema Linux e o compartilhamento SMB.
Reconectando ao Compartilhamento
Vamos nos conectar novamente ao nosso compartilhamento SMB:
smbclient //localhost/testshare -U labex
Insira a senha quando solicitado:
Enter WORKGROUP\labex's password:
Você deve ver o prompt do smbclient:
Try "help" to get a list of possible commands.
smb: \>
Carregando Arquivos para o Compartilhamento
Vamos carregar o arquivo de teste que criamos anteriormente para o compartilhamento SMB. Primeiro, precisamos verificar nosso diretório local atual:
smb: \> !pwd
Isso executa o comando pwd em seu sistema local e deve exibir:
/home/labex/project
Precisamos mudar para o diretório onde nosso arquivo de teste está localizado:
smb: \> lcd ~/project/smb-files
Verifique se estamos no diretório correto:
smb: \> !ls
Você deve ver:
test.txt
Agora, vamos carregar o arquivo para o compartilhamento SMB:
smb: \> put test.txt
Você deve ver uma mensagem indicando que o arquivo foi transferido:
putting file test.txt as \test.txt (38.5 kb/s) (average 38.5 kb/s)
Verifique se o arquivo foi carregado:
smb: \> ls
Você deve ver:
. D 0 Tue Nov 30 12:02:00 2022
.. D 0 Tue Nov 30 12:00:00 2022
shared-test.txt N 37 Tue Nov 30 12:00:00 2022
test-directory D 0 Tue Nov 30 12:01:00 2022
test.txt N 33 Tue Nov 30 12:02:00 2022
8467839 blocks of size 4096. 3524491 blocks available
Baixando Arquivos do Compartilhamento
Agora, vamos baixar um arquivo do compartilhamento SMB para nosso sistema local. Primeiro, vamos criar um novo diretório para armazenar os arquivos baixados:
smb: \> !mkdir -p ~/project/smb-downloads
Mude para esse diretório:
smb: \> lcd ~/project/smb-downloads
Agora, baixe o arquivo:
smb: \> get shared-test.txt
Você deve ver uma mensagem indicando que o arquivo foi transferido:
getting file \shared-test.txt of size 37 as shared-test.txt (37.0 KiloBytes/sec) (average 37.0 KiloBytes/sec)
Verifique se o arquivo foi baixado:
smb: \> !ls
Você deve ver:
shared-test.txt
Usando mget e mput para Vários Arquivos
Os comandos mget e mput permitem que você transfira vários arquivos de uma vez. Vamos tentar criar mais alguns arquivos em nosso sistema local:
smb: \> !cd ~/project/smb-files && touch file1.txt file2.txt file3.txt
Agora, vamos carregar todos os arquivos .txt de uma vez:
smb: \> lcd ~/project/smb-files
smb: \> mput *.txt
Para cada arquivo, você será solicitado a confirmar. Digite Y para confirmar cada transferência:
mput test.txt? Y
putting file test.txt as \test.txt (38.5 kb/s) (average 38.5 kb/s)
mput file1.txt? Y
putting file file1.txt as \file1.txt (0.0 kb/s) (average 19.2 kb/s)
mput file2.txt? Y
putting file file2.txt as \file2.txt (0.0 kb/s) (average 12.8 kb/s)
mput file3.txt? Y
putting file file3.txt as \file3.txt (0.0 kb/s) (average 9.6 kb/s)
Se você quiser transferir todos os arquivos sem confirmação, pode desativar a solicitação:
smb: \> prompt
smb: \> mput *.txt
Da mesma forma, para baixar vários arquivos:
smb: \> lcd ~/project/smb-downloads
smb: \> mget *.txt
Quando terminar, saia da sessão do smbclient:
smb: \> quit
Comandos Não Interativos
Você também pode usar smbclient para executar comandos sem entrar no shell interativo. Por exemplo, para listar o conteúdo de um compartilhamento:
smbclient //localhost/testshare -U labex -c 'ls'
Insira a senha quando solicitado e você verá a listagem do diretório:
Enter WORKGROUP\labex's password:
. D 0 Tue Nov 30 12:03:00 2022
.. D 0 Tue Nov 30 12:00:00 2022
file1.txt N 0 Tue Nov 30 12:03:00 2022
file2.txt N 0 Tue Nov 30 12:03:00 2022
file3.txt N 0 Tue Nov 30 12:03:00 2022
shared-test.txt N 37 Tue Nov 30 12:00:00 2022
test-directory D 0 Tue Nov 30 12:01:00 2022
test.txt N 33 Tue Nov 30 12:03:00 2022
8467839 blocks of size 4096. 3524491 blocks available
Para baixar um arquivo em um único comando:
smbclient //localhost/testshare -U labex -c 'get test.txt /home/labex/project/test-download.txt'
Este comando baixa o arquivo test.txt do compartilhamento e o salva como test-download.txt em seu diretório de projeto.
Agora você tem uma boa compreensão de como usar smbclient para se conectar a compartilhamentos SMB, navegar em diretórios e transferir arquivos. Essas habilidades são essenciais ao trabalhar em ambientes mistos Windows/Linux.
Resumo
Neste laboratório, exploramos o comando smbclient no Linux, que fornece uma ferramenta essencial para conectar sistemas Linux a compartilhamentos de arquivos Windows (SMB/CIFS). Cobrimos vários aspectos-chave do trabalho com smbclient:
Instalação: Instalamos o pacote
smbclientno Ubuntu 22.04, que incluiu suas dependências.Comandos Básicos: Aprendemos sobre a sintaxe básica e os comandos disponíveis no
smbclient, incluindo como se conectar a compartilhamentos e navegar neles.Configurando um Ambiente de Teste: Criamos um ambiente SMB de teste usando um servidor Samba local para praticar nossos comandos sem exigir acesso a um servidor Windows externo.
Conectando a Compartilhamentos: Conectamos ao nosso compartilhamento SMB de teste e exploramos comandos de navegação como
ls,cdemkdir.Transferindo Arquivos: Aprendemos como carregar arquivos para um compartilhamento SMB usando
pute baixar arquivos usandoget. Também exploramos transferências de vários arquivos commputemget.
As habilidades que você adquiriu neste laboratório são diretamente aplicáveis a cenários do mundo real onde você precisa interagir com sistemas ou servidores Windows a partir de ambientes Linux. Seja transferindo arquivos entre sistemas, automatizando backups ou integrando sistemas Linux em redes Windows, smbclient fornece uma poderosa interface de linha de comando para essas tarefas.
Para operações de arquivos mais complexas ou frequentes, você pode querer explorar a montagem de compartilhamentos SMB diretamente em seu sistema de arquivos Linux usando o comando mount com o tipo de sistema de arquivos cifs, que se baseia nos conceitos que aprendemos aqui.



