Todos os posts de Filipe Cifali

Sobre Filipe Cifali

now()

Python 3.3 + FTP

Bom dia galera, para quem gosta de brincar com novas versões de tudo deve ter notado o novo método de acesso da lib FTP do Python, foi introduzido o método mlsd() que faz o uso do comando MSLD do FTP (que na verdade, é bem mais antigo do que parece, http://tools.ietf.org/html/rfc3659.html)

Este método gerou a inutilização do NSLD, pois ele não seguia padrões, nenhuma convenção de entrega dos diretórios no FTP, o MSLD é justamente a proposta de um comando FTP que retorne uma lista do diretório de forma padronizada.

Então, segue um exemplo de como usar ela de maneira simples para realizar suas tarefas com o novo método:

>>> ftp_host = '' #seu host de conexão ao FTP
>>> ftp_user = '' #seu usuario de FTP
>>> ftp_pss = '' #a senha do usuário

>>> ftp = FTP(host=ftp_host,user=ftp_user,passwd=ftp_pass) # você pode ignorar usuário e senha caso o FTP permita conexões anônimas.

>>> ftp.mlsd
<bound method FTP.mlsd of <ftplib.FTP object at 0x101146410>>
>>> ftp.mlsd()
<generator object mlsd at 0x1007ae550>

>>> dir(ftp.mlsd())

['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__lt__', '__name__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'gi_code', 'gi_frame', 'gi_running', 'send', 'throw']

>>> for i in l:
...    print(i)
...
('..', {'perm': 'flcdmpe', 'modify': '20110225132610', 'unique': '811U5E8CA8', 'unix.group': '2512', 'unix.mode': '0755', 'type': 'pdir', 'unix.owner': '2511'})
('erros', {'perm': 'flcdmpe', 'modify': '20101202193850', 'unique': '811UA588C7', 'unix.group': '2512', 'unix.mode': '0755', 'type': 'dir', 'unix.owner': '2511'})
('lojaexemplo2', {'perm': 'flcdmpe', 'modify': '20101025140404', 'unique': '811U64AE2C', 'unix.group': '2512', 'unix.mode': '0755', 'type': 'dir', 'unix.owner': '2511'})
('robots.txt', {'perm': 'adfrw', 'size': '53', 'modify': '20101202193850', 'unique': '811UA588D2', 'unix.group': '2512', 'unix.mode': '0644', 'type': 'file', 'unix.owner': '2511'})
('cgi-bin', {'perm': 'flcdmpe', 'modify': '20101202193850', 'unique': '811UA588BA', 'unix.group': '2512', 'unix.mode': '0755', 'type': 'dir', 'unix.owner': '2511'})
('lojaexemplo-lib', {'perm': 'flcdmpe', 'modify': '20101025140630', 'unique': '811UA59D5A', 'unix.group': '2512', 'unix.mode': '0755', 'type': 'dir', 'unix.owner': '2511'})

Parece um pouco confuso acima com tantos dados?

É mais simples do que parece, navegar entre essa tupla e dict:

>>> for i in l:
...    print(i[0])
...
lojaexemplo2
robots.txt
lojaexemplo-lib

Os atributos:

>>> for i in l:
... print(i[1])
...
{'perm': 'flcdmpe', 'modify': '20110225132610', 'unique': '811U5E8CA8', 'unix.group': '2512', 'unix.mode': '0755', 'type': 'pdir', 'unix.owner': '2511'}
{'perm': 'flcdmpe', 'modify': '20101025140404', 'unique': '811U64AE2C', 'unix.group': '2512', 'unix.mode': '0755', 'type': 'dir', 'unix.owner': '2511'}
{'perm': 'adfrw', 'size': '547', 'modify': '20101202193852', 'unique': '811UA588ED', 'unix.group': '2512', 'unix.mode': '0644', 'type': 'file', 'unix.owner': '2511'}
{'perm': 'flcdmpe', 'modify': '20101207203828', 'unique': '811UA59D79', 'unix.group': '2512', 'unix.mode': '0755', 'type': 'dir', 'unix.owner': '2511'}

Até ai beleza, mas ainda parece meio confuso ver exatamente o que você quer… então, vamos pegar e ver apenas os tipos:

>>> for i in l:
... print(i[1]['type'])
...
pdir
dir
file
dir

Mais simples né? Ai você pode fazer brincadeiras como verificar os tipos bem facilmente:

>>> l = ftp.mlsd()

>>> for i in l:
...    if i[1]['type'] == 'dir': print(i[0], "is a directory!")
...

lojaexemplo2 is a directory!
lojaexemplo-lib is a directory!

E é isso, ai, fica a sua imaginação como ela pode ser mais útil para cada caso, caso tenha dúvidas, deixe um comentário ou entre em contato comigo na pytche/matehackers!

Fonte: http://docs.python.org/3/library/ftplib.html?highlight=ftp#ftplib.FTP.mlsd

Hardening Linux

Boa tarde, gostaria de lembrar a todos os usuários unix por ai no mundo selvagem da rede de computadores!

Primeira dica: Quando você está conectado a internet é importante ficar atento aos serviços que seu computador roda para tarefas cotidianas, por exemplo, desenvolvedores normalmente usam algum banco de dados para testarem suas aplicações e ao não configurar os serviços corretamente, eles ouvem em todas as interfaces. É muito importante manter os serviços rodando em suas devidas portas e interfaces específicas, assim, nunca se esqueça de modificar as portas específicas que vocês querem.

Para conferir o que está rodando sobre quais portas, você pode rodar um netstat, o netstat é um utilitário que mostra estatísticas da rede de seu computador, ele possui uma série de opções e possíveis argumentos, os que mais utilizo são -n (não resolver nomes) -a (tudo) -p (exibir o PID do processo ouvindo na porta) -o (mostra o tempo / estado) gerando o comando netstat -napo

Isso me permite descobrir tudo que está rodando no computador, assim, sempre tenha cuidado ao ver 0.0.0.0:PORTA, pois isso indica que o serviço está rodando em todas as interfaces, acessível pela internet.

Segunda dica: Firewall bem configurado, existem regras que muita gente desconhece como –tcp-reset do iptables, qualquer firewall que vocês usem, NUNCA esqueçam que é necessário sempre tapar tudo que vocês não querem e depois liberar o que vocês querem permitir o acesso.

Terceira dica: Acesso SSH, o SSH por si só respeita uma série de regras que podem ser configuradas em /etc/security/access.conf, configure-o conforme seu cenário ideal(não esqueça nunca de adicionar LOCALhost, caso contrário, você perde a box localmente, a não ser que seja essa a intenção) para impedir que os usuários efetuem login na máquina, mesmo com usuários, senhas e firewall desativado.

 

That’s it for today!