PostgreSQL para usuários Mysql

Eu sei Mysql, então PostgreSQL não vai ser problema certo ? Errado.

Segue uma lista de soluções que enfrentei , que sirva de guia para quem já enfrentou os mesmos desafios.

Criando o primeiro Banco de Dados

Versão MySQL:

$ mysql -u root -p
 mysql> CREATE DATABASE dbTest;
 mysql> USE dbTest;

No Linux,  você deve logar com o usuário postgres  (após instalar o postgresql ).

$ su - postgres
 postgres@x220:~$ psql # Inicia o console
 postgres=# \h # Lista os comandos SQL disponíveis.
 postgres=# \h [comando] # Mostra o uso do [comando]

Cadê o CREATE DATABASE ?  Não tem, o comando é dado fora do console, deslogue do console com Ctrl-D ou \q e digite:

postgres@x220:~$ createdb dbTest

Legal, vamos entrar no console e usar o USE dbTest… Oops, não tem USE.

postgres=# \? # Lista os comandos internos
postgres=# \c dbTest

Agora você está conectado ao banco de dados “dbTest” como usuário “postgres”.

dbTest=#
OS X

No OS X o usuário postgres não é criado, então você deve rodar o psql no terminal.

CrIANDO UM NOVO USUÁRIO

No Mysql os comandos são parecidos com esses aqui:

mysql> CREATE USER milestone IDENTIFIED BY 'milestone';
mysql> GRANT ALL ON dbTest.* TO milestone;

No postgres a sintaxe é diferente, o comando \h CREATE USER explica.

dbTest=# CREATE USER milestone WITH PASSWORD "milestone";
ERROR: syntax error at or near ""milestone""

dbTest=# CREATE USER milestone WITH PASSWORD 'milestone';
postgres=# GRANT ALL ON DATABASE dbTest TO milestone;
ERROR: database "dbtest" does not exist

Oops, deu erro !!! O problem é que dbtaste realmente não existe, o nome do banco de dados foi convertido para lowercase no comando ( e foi executado dessa forma). A solução é usar aspas duplas como no exemplo abaixo:

postgres=# GRANT ALL ON DATABASE "dbTest" TO milestone;
GRANT

Legal! Agora vamos logar com esse usuário.

postgres=# \c - milestone
FATAL: Peer authentication failed for user "milestone"

hum…. Você deve configurar o  PostgreSQL  para permitir  que o usuario milestone tenha permissão de logar via password.  No arquivo /etc/postgresql/9.<x>/main/pg_hba.conf . Mude as linhas:

local all all peer

para

local all all md5

ou a linha abaixo para permitir apenas para o usuário milestone:

local all milestone md5

Obviamente essa linha deve ser colocada antes da regra válida para todos usuário ou não vai funcionar. Mais ou menos assim:

local all milestone md5
 local all all md5

PostgreSQL deve ser reiniciado:

# service postgresql restart

ou

# /etc/init.d/postgresql restart
PERMISSões Nas TABeLAS

Infelizmente todas as tentativas de ler ou escrever nas tabelas do banco vão falhar.

A especificação define uma hierarquia fixa de catalog.schema.table . No PG “catalog” é o banco de dados.

dbTest=# \dn
List of schemas
Name | Owner
--------+----------
 public | postgres
(1 row)

Então nosso usuário milestone precisa de permissão para acessar dbTest.public.* , tanto para todas as tabelas como as sequencias. A sequencia é usada (e alterada nos inserts) para alguns tipos de dados.

dbTest=# GRANT ALL ON ALL TABLES IN SCHEMA public TO milestone;
dbTest=# GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO milestone;
AUTO_INCREMENT

Obviamente não existe. Mas existe um tipo de dados para isso.

dbTest=# CREATE TABLE foo (id serial PRIMARY KEY, bar text);

O equivalente MySQL é:

mysql> CREATE TABLE foo (id int PRIMARY KEY AUTO_INCREMENT, bar text);
SHOW TABLES, DATABASES etc.
 postgres=# \l # SHOW DATABASES
 postgres=# \dt # SHOW TABLES
 postgres=# \d myTable # DESCRIBE myTable
Arquivos de configuração e testes

Uma instância PostgreSQL possui (e mantém) sua própria área de dados. Esse diretório (também conhecido como datadir) contém arquivos de configuração e a coleção de bancos de dados. Isso permite ter multiplas instâncias do PostgreSQL aceitando conexões em multiplas portas, mas isso também significa ao iniciar o postgres você sempre deverá informar o path dessa área de dados.

postgres@x220:~$ mkdir db13 # Cria nova area de dados
postgres@x220:~$ initdb -D db13 # Inicializa area de dados
postgres@x220:~$ postgres -D db13 & # Roda o PostgreSQL em background
postgres@x220:~$ pg_ctl status -D db13 # Checa se esta rodando
postgres@x220:~$ createdb dbTest # Cria novo banco
postgres@x220:~$ psql # Conecta ao PostgreSQL rodando na porta default (5432)
postgres@x220:~$ pg_ctl stop -D db13 # Para a instancia rodando em db13
postgres@x220:~$ postgres -D db12 -p 6543 & # Roda outro servidor, mas em uma area diferente e em outra porta (6543)
postgres@x220:~$ createdb dbTest -p 6543 # Cria novo DB (mantido pela segunda instancia na porta 6543)
postgres@x220:~$ psql -p 6543 # Conecta em db12

Para encontrar em qual diretório sua instancia do postgres está rodando, você pode usar algo como ps aux | grep postgres .

Socket file errors

Erros como:  /var/run/postgresql/.s.PGSQL.5432.lock not found podem acontecer em sistemas  Debian onde o PostgreSQL não está configurado para subir na inicialização ( rcconf –off postgresql por exemplo)
Existem duas soluções para esse problema, ou você cria /var/run/postgresql :

# mkdir /var/run/postgresql 
# chmod a+w /var/run/postgresql # adiciona permissão de escrita para o diretório

Ou você muda o arquivo postgresql.conf para escrever o socket em outro diretório, como o /tmp

unix_socket_directory = '/tmp' # (reinicie o postgres)

Por outro lado, você pode indicar ao postgreSQL o novo diretório de socket direto da linha de comando:

postgres@x220:~$ psql -h /tmp # Our socket directory is now /tmp

fonte: http://granjow.net/postgresql.html

netcat

Netcat é uma das ferramentas mais legais que existe no mundo *nix, se bem usado pode salvar sua vida quando não se tem outras ferramentas de rede disponíveis. É uma versão mais sofisticada do telnet. Com ele você pode transferir arquivos, testar portas ( como o nmap ), criar um web server etc.

Truques básicos:
Conectando na porta 80 do localhost (tente com outras URLs e servidores):

$ nc localhost 80

Servidor socket na porta 5000:

nc -l 5000

Se combinados os dois exemplos anteriores vão se comportar como um Chat 🙂
Um webserver muito útil para testar portas ou até mesmo subir uma página de manutenção em um servidor.

$ while true; do; sudo nc -l 80 < index.html; done

O Loop while permite renderizar a página para mais de uma conexão, é possível servir formatos binários também.

Mais um exemplo legal, um backdoor shell 🙂 Precisa acessar um computador remoto ? Sem problemas:

Abrindo a porta 2222 com o bash rodando:

$ ncat -v -l 2222 -e /bin/bash

Para acessar sua backdor basta:

$ ncat localhost 2222

Lembrando que pode ser usado em servidores remotos, basta trocar o localhost pelo IP ou dominio.

É possível usar o netcat como portscanner, por exemplo para escanear da porta 1 até a 100:

 

$ nc -v -z localhost 1-100

Transferência de arquivos também não é um problema para netcat:

Para disponibilizar um arquivo na porta 5000:

$ nc -l 5000 < /etc/passwd

Para copiar o arquivo:

 $ nc localhost 5000 > passwd

Clonar um HD/SSD de um servidor direto no de outro também é possível:

No servidor original:

$ dd if=/dev/vda | nc -l 5000

No servidor que vai receber a cópia:

$ nc -n localhost 5000 | dd of=/dev/vda

Sempre lembrando que os comandos valem para servidores e máquinas remotas, é só trocar o localhost dos exemplos pelo domínio.

Backup remoto também não é um limitador para o netcat:

No servidor

$ nc -l 5000 | tar -xv

No cliente:

$ tar -cv /path/ | nc localhost 5000

fonte http://aarvik.dk/netcat-basics-and-a-few-smart-examples/

seguranca htaccess

Siga as seguintes regras de segurança em seu .htaccess para proteger seu site contra tentativas de invasões básicas.

Lembre-se que além de utilizar estas regras de segurança você deve manter sempre sua aplicação atualizada para evitar que Exploits sejam utilizados.

É preciso que seja criado um arquivo chamado 403.html dentro da raiz de seu site e será acessível via seusite.com.br/403.html. Os usuários que entrarem nas regras apresentadas verão esta página.

Security rules – iporto.com.br (suporte@iporto.com)

IndexIgnore *
Options +FollowSymLinks All -Indexes
ServerSignature Off
# Return 403 Forbidden error.

ErrorDocument 403 /403.html

RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK|PROPFIND|OPTIONS) [NC,OR]
RewriteCond %{THE_REQUEST} (\\r|\\n|%0A|%0D) [NC,OR]
RewriteCond %{HTTP_REFERER} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{HTTP_COOKIE} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{REQUEST_URI} ^/(,|;|:|<|>|â€>|â€<|/|\\\.\.\\).{0,9999} [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (libwww-perl|curl|wget|python|nikto|scan) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
#Block mySQL injects
RewriteCond %{QUERY_STRING} (;|<|>|’|â€|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|cast|set|declare|drop|update|md5|benchmark) [NC,OR]
RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR]
RewriteCond %{QUERY_STRING} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC]

# Return 403 Forbidden error.
RewriteRule .* /403.html [F]

RewriteCond %{QUERY_STRING} proc/self/environ [OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*\([^)]*\) [OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})

## Return 403 Forbidden error.
RewriteRule .* /403.html [F]

RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR]
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Windows\-Live\-Social\-Object\-Extractor\-Engine [OR]

RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]
RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR]
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR]
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR]
RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR]
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR]
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR]
RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR]
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR]
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus [OR]
RewriteCond %{HTTP_USER_AGENT} ^PaperLiBot

## Return 403 Forbidden error.
RewriteRule .* /403.html [F]
# Security rules - iporto.com.br (suporte@iporto.com)

fonte http://blog.iporto.com.br/blog/regras-de-seguranca-para-htaccess-apache-linux.php

Cryptorave 2016

Entre os dias 6 e 7 de maio de 2016, no Centro Cultural São Paulo durante 24 horas, a CryptoRave trará mais de 40 atividades sobre segurança, criptografia, hacking, anonimato, privacidade e liberdade na rede.

E eu estarei lá falando sobre criptografia de disco no linux usando as ferramentas presentes nas principais distros linux já na instalação. vou mostrar também como usar as ferramentas do ecryptfs-utils e gpg para criptografar arquivos e imagens de disco.

Vou dividir a oficina com o Alexandre Deckleva, hacker OpenBSD, eu falarei da parte do linux e ele das ferramentas disponíveis no BSD, segue a descrição da oficina:

Criptografia de disco com OpenBSD e Linux

14:40h – 15:40h
Dentre as várias abordagens sobre criptografia de disco em sistema operacionais, o OpenBSD desde a versão 5.4 até a atual 5.9, dispõe de um recurso em sua instalação de criptografar com chave simétrica mais alta entropia, toda o armazenamento de dados da área de sistema, o espaço do usuário e seu swap. Essa apresentação resume tecnicamente esse recurso e indica um procedimento de aplicação prática.
Uma abordagem prática do uso das ferramentas para criptografar partições, flash-disks e HDs externos, usando cryptoloop, LVM com LUKS. Truques para deletar os dados de forma segura de computadores e de Volumes de storage em serviços de cloud. Também vou abordar o uso de ferramentas para criptografar arquivos.

Alexandre Deckleva e Liquuid
Alexandre é psicologo (PUCSP) e SysAdmin em sistemas legados. Usuário, consultor e ativista do OPenBSD desde 2005
Liquuid é um entusiasta de sistemas operacionais Unix, especialmente o linux, sistema que estuda e trabalha a mais de uma década. Já criou algumas distribuiçõesfocadas em máquinas de baixo desempenho, tem experiência em projetar e administrar arquiteturas em ambientes cloud escalaveis para portais e sistemas com centenas de milhares de acessos diários. Marceneiro amador, fez o curso apenas para montar seu próprio Arcade. Motociclista hardcore, encara passeios de 1000 km sozinho, desde que seja feito em um único dia, como se fosse a coisa mais normal do mundo.

Confira a programação completa aqui

Se inscreva on-line, é de graça

Espero vocês lá !

 

PS: Segue a apresentação:

Considerações sobre a limitação da internet

Sobre internet ser limitada tenho algumas considerações… Minha internet é de 35 megabit/s … Uso ilimitado pra mim é o direito de baixar com velocidade máxima durante o mês inteiro. Isso da por volta de 11 TB por mês, isso é muito mais do que eu uso de fato, então eu não estou “lesando” a operadora, ela me prometeu 11TB por mês no momento que me vendeu um plano de 35 megabits/s.
Como as operadoras sabem que 99% dos usuários do mesmo plano que o meu não usam nem 10% desses 11TB teóricos, da pra ela vender esse excedente para outros usuários, otimizando a infra, reduzindo o desperdicio. A quantidade de usuários que a operadora pode colocar na sua rede, deveria ser orientada com base em sua capacidade de operação, elas conseguem fazer isso, eles tem os dados. Mas na prática eles geralmente forçam a barra, colocando 4 vezes mais usuários do que a rede suporta, o serviço fica ruim.
A interferência do governo é quase sempre um desastre, dizem que a Dilma vai obrigar as operadoras a oferecer internet fixa ilimitada, mas ao fazer isso ela obriga a operadora a garantir os 11TB teóricos para quem tem planos de 35 mb/s. Mas pra garantir isso as operadoras vão ter que investir na infra de rede, e tudo isso para que ela fique ociosa. O que vai invariavelmente inflacionar os preços e manter a oferta e produtos de terceira linha, como planos de 1 e 2 mb.
É por isso que os especialistas do setor pensam que o limite é necessário, o limite mantém o mercado saudável, o problema que temos aqui é o tamanho desse limite. As operadoras brasileiras viram uma grande possibilidade de lucrar vendendo pacotes adicionais , então estão oferecendo planos limitados com limite pelo menos 10 vezes menor do que o ideal. É nesse momento de conflito de interesses que o governo deveria se meter, evitar os abusos. A forma que o governo vai interferir, vai validar o modelo abusivo ou não… se for como foi anunciado, obrigando as empresas a oferecer todo o tráfego possível dentro dos planos de velocidade, possivelmente vai ser feito um remendo la na frente desfazendo essa suposta bem feitoria… Esse é o problema de meter o bedelho só pra ser popular.

Hacks CSS

Se tem uma coisa que aprendi com CSS, é que pra funcionar do jeito que você precisa, tem que hackear… Esse povo de frontend tem que dar nó em pingo d’água pra conseguir coisas simples em um site. E dado a quantidade de linguagens que geram CSS que tem por ai, SASS, LESS , da pra ver que CSS não foi uma idéia tão bem executada. Não estou falando que faltam efeitos visuais, nada disso, mas do pepino que virou “decorar” páginas com CSS, provavelmente o CSS é o maior arquivo agregado das sua página, minificar é praticamente te obrigatório. Fico imaginando se o CSS vai chegar a sua versão 4 antes de aparecer alguma alternativa.
Alguns sites me ajudaram a entender melhor CSS e até mesmo como torcer o CSS pra fazer o que precisava, segue a lista:
Tudo sobre Floats:
http://css-tricks.com/all-about-floats/
Usando o hack Clear-fix
http://css-tricks.com/snippets/css/clear-fix/
Suporte inline-block cross browser
http://foohack.com/2007/11/cross-browser-support-for-inline-block-styling/
Validação CSS3 ( boa sorte com isso !)
http://jigsaw.w3.org/css-validator/
Desenvolvedor frontend, você é um heroi cara ! desenvolvimento frontend é uma zona, parabéns por fazer nossos sites funcionarem.