umgeher's changelog

doc

find

Find e’ um otimo aliado, mas vejo que muita gente ao meu lado nao usa ele com todo o potencial dele.

… keep it simple stupid, work smart not hard.

– some Unix guy…

find

historia

O find apareceu na versao 1 do AT&T UNIX e foi removido na versao 3 do proprio. Um novo programa do mesmo nome foi escrito para o “Programmer’s Workbench (PWB)” e foi lancado na versao 5 do AT&T UNIX. E novamente foi rescrito para o 4.3BSD-Reno.

versoes

Eu uso OpenBSD, e meus exemplos sao todos usando a versado do find que vem com ele. Caso voce use algum GNU/Linux e’ bem provavel que alguns exemplos vao ter alguma mudanca nos argumentos, as vezes para pior, as vezes para melhor. Por exemplo, no GNU Find Utilities, voce pode usar o argumento size passando por exemplo G para gigabyte. Recomendo sempre olhar o manual da sua versao.

name

Vamos comecar com o basico, vamos buscar todos os arquivos “.jpg” no diretorio atual e seus filhos.

~> find . -name "*.jpg" 
./krig/changelog/static/i/2016/NC6ZuZu.jpg
./krig/changelog/static/i/fun/ps2-vs-usb.jpg
./krig/changelog/static/i/cv/cv_00k.jpg
./krig/changelog/static/i/cv/cv_qt.jpg
./krig/changelog/static/i/cv/cv_uol.jpg
./krig/changelog/static/i/cv/cv_vb.jpg
./krig/changelog/static/i/cv/cv_vt.jpg
./krig/changelog/public/i/2016/NC6ZuZu.jpg
./krig/changelog/public/i/fun/ps2-vs-usb.jpg

type

Por default, o find vai sempre filtrar o name por arquivos, mas e' sempre ideal manter claro que queremos filtrar por arquivos, para isso adicionamos o type no comando.

~> find . -name "*.jpg" -type f
./krig/changelog/static/i/2016/NC6ZuZu.jpg
./krig/changelog/static/i/fun/ps2-vs-usb.jpg
./krig/changelog/static/i/cv/cv_00k.jpg
./krig/changelog/static/i/cv/cv_qt.jpg
./krig/changelog/static/i/cv/cv_uol.jpg

O type as seguintes opcoes…

  • b -> block
  • c -> character
  • d -> diretorio
  • f -> arquivos
  • l -> link simbolicos
  • p -> FIFO
  • s -> socket

Usando qualquer uma dessas opcoes, o find ira’ retornar apenas o type escolhido.

size

Agora vamos dizer que queremos todos os arquivos com um certo tamanho… O find pode nos ajudar nisso tambem.

~/om> find . -type f -size +1024c -size -2048c
./C/Captain Beyond - Captain Beyond (1972; 1997) [FLAC]/info.txt
./C/Captain Beyond - Captain Beyond (1972; 1997) [FLAC]/Captain Beyond - Captain Beyond.cue

Nesse exemplo1 estou buscando por todos os arquivos que tenham entre 1024bytes e 2048bytes.

*time

Ok, ja’ conseguimos pegar arquivos pelo nome, tamanho e tipo… Que tal pela data de acesso (atime), modificacao (mtime) e mudanca (ctime) dele?

  • atime -> ultima vez que o arquivo foi aberto/lido
  • ctime -> ultima mudanca de metadados do arquivo, como por exemplo o path e permissao
  • mtime -> ultima modificacao no conteudo do aqruivo

Funciona do mesmo modo que o size… Exemplo:

find . -type f -atime +10 -atime -15

Ou arquivos que nao foram abertos a mais de um ano…

find . -type f -atime +365

user / group

Arquivos que pertencem a um user? O find consegue trazer para nos tambem…

find . -user umgeher

O mesmo funciona para group.

man

O find tem N opcoes para uso. Leia o manual dele. Vai facilitar a sua vida na hora de manipular uma grande quantidade de arquivos.


  1. Captain Beyond e’ uma banda sensacional. O disco com o proprio nome da banda para mim e’ o melhor de todos. E’ literalmente um post-deep-purple bem raiz. Viagem do inicio ao fim. Otima trilha para uma noite de soft coding. ↩︎

newsboat

Todos sabem que eu odeio o que a web se tornou. Pelo menos se voce ja' foi beber comigo e alguem tocou no assunto web, voce ja’ deve ter ouvido eu reclamando sobre essa droga. Paginas maiores que o original Doom1, propaganda para todos os lados, conteudo lixo, mais imagens menos texto. Fora os browsers que parecem competir qual deles usa mais recurso da maquina. Porem uma coisa a “web” deixou de legado para nos que e’ sensacional. O RSS e o Atom, ambos protocolos usamos para distribuir conteudo/conhecimento pela a internet.

“The CEO’s role in raising a company’s corporate IQ is to establish an atmosphere that promotes knowledge sharing and collaboration.”

– Bill Gates

Tanto o RSS como o Atom sao documentos XML que podem ser usados em varios softwares. Eu uso um chamado newsboat.

Newsboat e’ simples, roda no console, lembra muito o mutt… Nao tem como nao gostar dele.

Config

Minha configuracao e’ minima… (~/.newsboat/config)

article-sort-order date-asc
browser "firefox --new-tab %u"
max-items 0
podcast-auto-enqueue yes
reload-threads 100
save-path ~/news
ssl-verifyhost no
ssl-verifypeer no

# binds
bind-key a mark-all-above-as-read
macro i set browser "curl %u > ~/tmp/rss.png ; sxiv ~/tmp/rss.png" ; open-in-browser ; set browser "firefox --new-tab %u"
macro m set browser "mpv %u"; open-in-browser ; set browser "firefox --new-tab %u"

# colors

color info black cyan
color listfocus black cyan
color listfocus_unread black cyan

URLs

E minha lista de URLs de feeds e’ bem curta…

"query:Unread Articles:unread = \"yes\""
https://drewdevault.com/blog/index.xml
https://lucasemmoreira.xyz/rss.xml
https://dataswamp.org/~solene/rss.xml
https://christine.website/blog.rss
https://videos.lukesmith.xyz/feeds/videos.xml?sort=-publishedAt&filter=local "video"
https://lukesmith.xyz/rss.xml "blog"
https://www.reddit.com/r/retrobattlestations/.rss "reddit" 
https://www.reddit.com/r/vintageunix/.rss "reddit"
https://www.reddit.com/r/unixporn/.rss "reddit"
https://www.reddit.com/r/selfhosted/.rss "reddit"
https://www.reddit.com/r/emacs/.rss "reddit"
https://www.reddit.com/r/programming/.rss "reddit"
https://www.reddit.com/r/vintagecomputing/.rss "reddit"
https://www.reddit.com/r/erlang/.rss "reddit"
https://www.reddit.com/r/golang/.rss "reddit"

Unica coisa a mais que tenho no urls e’ a primeira linha…

"query:Unread Articles:unread = \"yes\""

Isso cria um feed apenas com os feeds que nao li ainda.

Documentacao

Leia a documentacao e teste algo diferente, se achar algo legal, mande para mim.

E se quiser colocar meu RSS na sua configuracao…

https://umgeher.org/index.xml

  1. O jogo original era distribuido em 4 floppy drives (os classicos disquetes dos anos 90), cada um contendo no maximo 1.44MB. Hoje eu fiz um teste na pagina do UOL, talvez o portal de noticia que leve mais a serio a questao “web”, com os meus blocks de propaganda e scripts de tracking, a pagina tem 7.20MB. Ou seja, mais de 25% de um jogo que tinha musica, graficos 3D (ok 2.5D) e dias de diversao, contra uma pagina com monte de chamadas para outras paginas. ↩︎

Machine: lite & Instalacao OpenBSD

Ganhei um novo laptop para trabalhar. Um Lenovo Thinkpad T14.

Nao e’ segredo que sou maniaco de Thinkpads. E’ literalmente o unico laptop que recomendo.

Hardware

Esse T14 esta’ com uma configuracao sensacional, pelo menos para mim.

AMD Ryzen Pro 5
16GB DDR4
NVMe Samsung MZALQ256
14.0" FHD (1920x1080)

De longe e’ a maquina com maior recurso que tenho em casa. Sim, nao sou aquelas pessoas que ficam comprando maquinas bizarras, tenho ate' um preconceito com quem tem essas maquinas. Normalmente e’ a pessoa que fica mais tempo no youtube sem fazer nada.

Ele e’ super leve, talvez o mesmo peso do meu antigo e morto X1 Carbon. Alias, acredito que sejam iguais. Em termos de tamanho e peso. O que me deixou muito feliz, ja’ tenho varios “utils” para esse bodyframe.

Keyboard / Trackpoint

Unica coisa que fico triste e’ do teclado nao ser padrao US. (Fica a dica ai, quem quiser me doar um teclado americano para esse laptop, nao se faca de dificil.)

E sim, nao e’ mais o padrao antigo dos Thinkpads quando a IBM fabricava, acredito que nunca mais vamos ter keyboards de laptops que nem aqueles antigos. Uma pena.

Mas o icone continua la’. O trackpoint vermelho. Nao e’ a antiga “borracha de lapis”, mas esta’ la’. Eu achei mais preciso do que do meu antigo X1 Carbon, mas nada ultra melhor. Talvez seja porque ainda e’ pouco usado.

Logo abaixo do trackpoint temos os 3 botoes de “mouse” (esquerda, scroll e direita) fisicos! Nada daquela porcaria de botao virtual.

O touchpad eu nao vou comentar, ja’ que nao uso e desligo ele na BIOS. Mas o tamanho e’ adequado.

RJ45

Temos entrada de RJ45! Um ponto positivo em cima do antigo X1 Carbon. Isso me fazia falta o tempo todo. Mesmo que seja um laptop, sempre que possivel eu prefiro ficar no cabo.

Software

Vamos instalar o OpenBSD nele e deixar quase pronto para o meu uso do dia dia.

Download

Nessa pagina voce pode vai encontrar todas as opcoes de imagens disponiveis.

  • installXX.img - imagem completa para gravar em um memstick, inclui todos os file sets. Ou seja, voce pode instalar o sistema completo sem a necessidade de rede/internet.
  • minirootXX.img - imagem de instalacao apenas, nao inclui os file sets. Voce vai precisar de rede/internet para terminar a instalacao.
  • installXX.iso - imagem completa para gravar em CD/DVD.

Lembrando que o XX e’ um placeholder para o numero da versao. No dia que escrevo esse post a versao atual e’ 7.0.

Escolha a imagem que deseja utilizar, no meu caso e’ o “miniroot70.img”.

curl -sL "https://cdn.openbsd.org/pub/OpenBSD/7.0/amd64/miniroot70.img" > i

Depois de feito o download, precisamos gravar ele em uma midia para continuar com a instalacao. Eu tenho um memstick da Sony de 64GB de longa data que sempre utilizo para instalacao do OpenBSD. Mas voce pode utilizar qualquer um que tenha espaco suficiente para gravar a imagem. O legal e’ voce sempre ter esse memstick disponivel. Nunca se sabe quando um amigo vai pedir para voce instalar o OpenBSD na maquina dele.

Coloque o seu memstick na porta USB e veja no dmesg qual endereco ele ganhou. Caso fique em duvida, use o seguinte comando:

dmesg | grep "^[sw]d"

Ele vai apresentar a lista dos enderecos de storage. Exemplo:

~> dmesg  | grep "^[sw]d" 
sd0 at scsibus1 targ 0 lun 0: <ATA, WDC WD5000AAKX-0, 15.0> naa.50014ee25e2ecf04
sd0: 476940MB, 512 bytes/sector, 976773168 sectors
sd1 at scsibus4 targ 1 lun 0: <Sony, Storage Media, 0100> removable serial.054c06b1610302980156
sd1: 61552MB, 512 bytes/sector, 126058496 sectors
~>

No meu caso, tenho o meu HDD no endereco sd0 e o memstick da Sony, como comentei, esta’ no sd1. Agora vamos gravar a imagem no memstick.

ATENCAO: tenha certeza do local onde voce vai gravar a imagem. Esse procedimento nao tem volta. Caso coloque o endereco do seu HDD, voce vai perder tudo o que tem nele.

dd if=i of=/dev/sd1c bs=1M

Esse processo pode demorar caso seu disco e/ou memstick seja meio lento.

Depois de terminar, estamos com tudo pronto para continuar a instalacao. Nao e’ mesmo Olga?

Instalacao

O processo de instalacao do OpenBSD e’ muito simples e rapido. E mesmo “complicando” as coisas, ainda continua muito simples.

Depois de dar boot pelo memstick. Voce vai ver a seguinte informacao.

Welcome to the OpenBSD/amd64 7.0 installation program.
(I)nstall, (U)pgrade, (A)utoinstall or (S)hell?

Agora voce pode escolher em Instalar, fazer Upgrade, Autoinstalacao ou S.

Caso voce deseja escrever no disco com cryptografia (o que eu recomendo em caso de laptop), sigua normalmente aqui o texto, caso nao, pule para o header Copia.

Crypto!

Vamos formatar o disco e deixar ele configurado para gravar tudo com cryptografia.

Digite S e de ENTER.

Agora voce tem acesso ao shell da instalacao do OpenBSD. Normalmente seu disco de instalacao vai ser o primeiro, principalmente de um laptop. Mas de toda forma se quiser verificar, voce pode digitar dmesg | grep "^[sw]d" para exibir os discos disponiveis.

No meu caso o disco que vou usar para instalar o sistema e’ o sd0.

Primeiro passo e’ voce ativar o device sd0, para isso entre em /dev e execute o MAKEDEV.

cd /dev
sh MAKEDEV sd0

Agora que o sistema criou os enderecos para o sd0 vamos escrever a particao GPT. Digite:

fdisk -iy -g -b 960 sd0

Podemos criar a nossa particao. Execute o programa disklabel da seguinte forma:

disklabel -E sd0

Dentro do disklabel voce pode ter acesso ao help digitando ?. Neste momento devemos criar nossa particao. Digite:

a a 

Ele vai perguntar o offset, size e FS type. Ambos offset e size voce pode informar o que ele sugerir. No caso do FS type informe RAID.

Agora voce deve escrever as particoes, digite w e q para sair do disklabel.

Com a particao criada, vamos ativar a cryptografia utilizando o bioctl.

bioctl -c C -l sd0a softraid0

O bioctl vai perguntar por uma senha, digite a que quiser. Lembre dela para sempre… Caso contrario, voce vai perder tudo que esta’ no seu disco.

O retorno do bioctl e’ a particao que de fato vamos usar para instalar o sistema. Lembre dela. No meu caso e’ a sd2.

Agora execute o comando exit para sair do shell e voltar para o primeiro passo da instalacao.

Setup

Podemos iniciar o setup da instalacao. Digite I para iniciar a instalacao.

Primeira pergunta e’ sobre o seu layout de teclado. Eu so’ uso o default que e’ o padrao americano.

Depois voce pode escolher o hostname da sua maquina, no meu caso vou colocar lite.

Esse hardware me apresentou duas interfaces de rede, a re0 e re1. A interface wifi nao foi apresentada. Agora sei que o firmware das interfaces de rede sao RealTek. Depois eu vejo o que faco com wifi, nao uso muito ele mesmo e quando uso de fato gosto de usar um dongle1. Escolhi a interface re1 por experiencia passada. A re0 nao vai responder2.

Deixo autoconf para ele auto configurar a interface de rede. Ele mostra que conseguiu configurar e digito done para passar para proxima pergunta.

Agora a senha do root e’ fornecida e confirmada.

Proximo passo e’ informar se voce deseja que o sshd inicie no boot do sistema. Como essa maquina e’ um laptop, eu coloco no.

Agora pergunta se desejamos que inicie o xenodm (ambiente grafico) no boot. Como e’ um laptop, eu digo que yes.

O momento de criar o seu usuario chegou, coloque o nome do seu user como quiser. No meu caso e’ umgeher. As proximas perguntas vao ser nome completo do user (caso queira), senha e confirmacao da senha.

Depois de criar o seu usuario, ele vai perguntar sobre o timezone onde voce se encontra, eu uso UTC ate’ em relogio de pulso… Logo coloco UTC.

Agora vem a parte de voce escolher o destino da instalacao. No meu caso o disco e’ o sd2, que foi criado a partir do sd0 com crypto. Caso voce nao tenha feito o processo de cryptografia do disco, o endereco deve ser sd0.

Logo depois de escolher o disco para instalacao, ele vai apresentar a tabela de particao deste diso. No meu caso, tenho duas, uma do EFI Sys e outra com o OpenBSD. Eu seleciono GPT com o char g. Agora ele vai apresentar como ele vai dividir esse espaco alocado, recomendo usar o auto layout mesmo, com o char a.

Depois que ele teminar de escrever os dados na tabela, digite done para seguir o processo.

OK, agora e’ a hora de apontar onde estao os file sets, no meu caso, como usei o miniroot, vou usar o mirror que esta’ no Brasil. Informo http.

Nao uso proxy. O mirror que vou usar e’ o openbsd.c3sl.ufpr.br*, e o diretorio que esta’ os arquivos e’ pub/OpenBSD/7.0/amd64.

Escolha os sets que queira instalar, na duvida, deixe tudo mesmo. O sistema ja’ e’ muito minimalista, nao vai fazer diferenca instalar tudo.

Depois do processo de copia, verificacao e instalacao do sets. Apenas de um enter.

Parabens, voce acabou de instalar o OpenBSD.

Apenas de um enter e o sistema vai dar um reboot, lembre de tirar o memstick da sua maquina.

Bem vindo ao OpenBSD.

Proximos passos…

Agora e’ a hora de deixar com minha cara essa maquina. Vou escrever como faco e ir postando aqui no changelog. Quando eu fizer o post vou atualizar esse com o link da continuacao.


  1. No meu campo de trabalho, nunca e’ bom voce divulgar o seu MAC Address, por motivos obvios. Sempre uso um dongle USB para trabalhar. Assim voce cria um proxy de MAC Address. ↩︎

  2. Depois eu verifico isso, talvez responda e estou comendo bola por um problema antigo que tive. ↩︎

pass

Password-store ou simplesmente pass e’ uma otima ferramenta para organizar e preservar seus passwords, inclusive OTP.

Companies spend millions of dollars on firewalls, encryption and secure access devices, and it’s money wasted; none of these measures address the weakest link in the security chain.

– Kevin Mitnick

O pass cria um arquivo pgp1 com o password ou o que deseja preservar usando uma arquitetura de diretorios. Otimo para utilizar o git para versionar e/ou fazer backups de forma praticas e conectar programas que precisam de sua senha, como por exemplo o msmtp2 e o mbsync3.

Instalacao

Recomendo voce sempre usar os pacotes do seu sistema operacional e/ou distro.

OpenBSD

pkg_add password-store

Debian

apt-get install pass

Uso

Antes de tudo, crie seu par de chaves PGP1.

init

Para iniciar sua arquitetura “pass” digite:

pass init

Ele vai criar toda a estrutura necessaria para comecar a guardar suas informacoes.

insert

Para inserir um password, use o comando insert.

pass insert email/meuEmail

Ele vai perguntar o password que voce deseja colocar no arquivo email/meuEmail.

generate

Para gerar um password, o que recomendo, use o comando generate.

pass generate site/minha-conta
The generated password for tmp is:
@kT2-5c~&#Ia}YL%U&"x6`A!5

Ele vai gerar e mostrar um password, como por exemplo @kT2-5c~&#Ia}YL%U&“x6`A!5.

Voce pode determinar que nao deseja chars especiais com o argumento -n, exemplo:

pass generate -n site/minha-conta
The generated password for tmp is:
92K530RI4xocCjZfcnb9CQNo9

E tambem voce pode dizer quantos chars voce deseja o password.

pass generate site/minha-conta 10
The generated password for tmp is:
Mj{"4GI0Y8

view

Para voce ver um password, apenas digite o nome dele.

pass site/minha-conta
Mj{"4GI0Y8

Voce ainda pode apenas digitar pass e ter uma visao da arquitetura do seu pass.

pass
Password Store
└── site
    └── minha-conta

find

Normalmente voce vai ter varios passwords na sua arquitetura. Quando isso acontecer, voce pode buscar o nome deles com o comando find.

pass find tm 
Search Terms: tm
└── tmp

mv

Para voce renomear um password, digite o comando mv seguido do nome atual e do novo nome.

pass mv tmp tmp2

rm

Para remover um password, apenas digite o comando rm seguido com o nome dele.

pass rm tmp2

Backup

Agora que voce tem todos os seus passwords guardados com PGP. Voce deve fazer backup deles.

Atencao: Lembre que voce deve guardar seu par de chaves PGP tambem!

git

O pass vem com um by-pass para o git. Voce pode iniciar o git com o comando.

pass git init

Depois que a estrutura do git e’ criada, o pass comeca a fazer commit de todas as modificacoes que voce fizer no pass. Logo, criar, renomear, editar e deletar passwords vao ser commitados no git local.

tar.gz

Caso voce nao tenha usado git ainda, voce pode simplesmente guardar o diretorio do seu pass.

tar -zcvf ~/pass.tar.gz ~/.password-store

Agora voce tem uma copia do seu pass. Guarde do modo que achar melhor.

nmap

nmap (“Network Mapper”) e’ uma ferramenta para explorar e auditar networks.

“Good neighbors always spy on you to make sure you are doing well.”

– Pawan Mishra

TLTR

Como o nmap tem milhoes de combinacoes de configuracoes, vou apresentar as que mais uso e no final um resumo das configuracoes que conheco/uso. Recomendo que invista tempo e energia para ler o manual completo do nmap.

Target

Assuma <target> como um IP Address, Subnet ou hostname. Exemplos:

  • IP Address: 8.8.8.8
  • Subnet: 192.168.0.0/24
  • Hostname: umgeher.org

Dia a dia…

Para identificar um host, normalmente eu uso as seguinte configuracoes.

nmap -sV -sS -O <target>

Com isso ele devolve quais portas estao abertas ou filtradas, quantas estao fechadas. Nome e versao de cada servico que esta’ atras da porta descoberta. Alem da identificacao do sistema operacional.

Configuracoes

Alguns, para nao falar varias, configuracoes podem ser usadas em conjunto. E basicamente quase todas as configuracoes devem ser rodados com um superuser.

Aqui separei em tres categorias:

  • Discovery e Identificacao - sao as configuracoes para voce identificar e fazer discovery dos seus targets.
  • Performance - configuracoes de como o nmap vai se comportar com delay e agressividade dos scans.
  • Output - configuracoes de output

Discovery e Identificacao

Configuracoes para discovery e identificacoes de targets.

  • -6 - utiliza IPv6
  • -A - modo agressivo… o mesmo que usar -O, -sC, -sV e –traceroute
  • –dns-servers - informa enderecos dos DNS servers a serem utilizados
  • -e - informa a interface de rede a ser usada
  • -iL - “input from list”, use um arquivo como uma lista de targets
  • -O - ativa a identificacao do sistema operacional
  • -Pn - trata todos os targets como online
  • -PS - envia um packet com SYN flag para a porta definida, em caso de nao informar a porta, o padrao e’ a 80
  • -PU - envia um packet UDP para a porta definida, em caso de nao informar a porta, o padrao e’ a 40125
  • -sn - scan sem port ping
  • -sC - executa o scan usando o script default
  • -sV - executa a identificacao dos servicos em cada porta encontrada
  • –traceroute - ativa o modo traceroute

Performance

Configuracoes para controlar o tempo e velocidade dos scans.

  • -T0 - modo paranoico, envia o packet a cada 5 minutos. praticamente nao da’ para usar
  • -T1 - aguarda 15s para enviar cada packet
  • -T2 - aguarda 0.4s para enviar cada packet
  • -T3 - modo default do nmap
  • -T4 - forca o tempo de timeout para 1250ms
  • -T5 - forca o tempo de timeout para 300ms

Output

Configuracoes de output.

  • -oG - grep mode!
  • -oN - normal, o default do nmap
  • -oS - s|<rIp7 k1dd13
  • -oX - xml

Basicamente, se voce estiver apenas vendo no terminal, nao use opcao de output. Caso queria guardar o resultado, utilize -oG. Todas essas 4 opcoes precisam do nome do arquivo para fazer o storage. Exemplo:

nmap -A -oG result-nmap-grep <target>

Scripts

O nmap tem o rescurso de voce executar scripts. Vou escrever sobre eles no futuro. Mas um exemplo basico. Descobrir quais methods o HTTP Server aceita.

nmap -p80,443 --script http-methods --script-args httpmethods.test-all=true <target>

Curiosidades

Zine

O nmap foi publicado pela primeira vez na antiga e otima zine phrack, em 1997-09-01. O codigo fonte foi publicado na propria zine. Veja o artigo aqui. Nostalgia pura!

POP

Varios filmes, series e animes usam o nmap em cenas de “hacking”. O site oficial tem uma lista deles, caso queira ver.