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

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:

possible SYN flooding ?

Se aparece essa mensagem no dmesg do seu servidor, é possível que ele esteja sofrendo um ataque de SYN Flood. Nesse tipo de ataque, as máquinas atacantes abrem conexões, do tipo SYN e deixam elas abertas, então abrem novas conexões …. O ciclo se repete até que a tabela TCP do server esgotar sua memória,  então visitantes legitmos  vão experimentar lentidão no site.

Uma regra de firewall que ajuda no problema é essa aqui:

iptables -N syn_flood
iptables -A INPUT -p tcp --syn -j syn_flood
iptables -A syn_flood -m limit --limit 1/s --limit-burst 3 -j RETURN
iptables -A syn_flood -j DROP

Você pode limitar o número de conexões por segundo em –limit 1/s

Evitando o uso do termo “Computação em Nuvem”

O mercado cresceu, as Clouds se espalharam e o termo ficou tão genérico que quando usado sozinho não tem muito significado. Hoje existem termos que se adequam melhor ao que a Cloud Computing oferecem, são eles: SaaS, PaaS e IaaS.

Vamos simplificar:

  • SaaS: Software as a Service:  Salesforce.com, Google Apps, Photoshop.com etc.
  • PaaS: Platform as a Service: Google App Engine e similares.
  • IaaS: Infrastructure as a Service: Amazon EC2, Eucalyptus, etc.

Ou pra facilitar:

  • SaaS: É um web site!
  • PaaS: É um framework!
  • IaaS:  É uma VM!

via: everythingsysadmin

Multiplas portas SMTP no postfix, pode isso ?

Hoje pela manhã o Mail do OSX parou de enviar emails, minha primeira suspeita foi de problemas na minha VPS, mas não era, dei um nmap e descobri isso:

22/tcp   open     ssh
25/tcp   filtered smtp
53/tcp   open     domain
80/tcp   open     http
143/tcp  open     imap
443/tcp  open     https
587/tcp  open     submission
993/tcp  open     imaps
2000/tcp open     cisco-sccp
3306/tcp open     mysql
5222/tcp open     xmpp-client
5269/tcp open     xmpp-server
5280/tcp open     xmpp-bosh
7777/tcp open     cbt

Porta 25 filtrada, ou seja, um firewall está bloqueando pacotes, o Vivo Speedy não deixa mais pacotes trafegarem pela porta 25, oficialmente é para bloquear SPAM.

Meu primeiro impulso foi correr no postfix e alterar a porta, de 25 para 587, com isso consegui enviar emails dos meus clientes de email, mas não recebiam… Obviamente, já que os servidores de email conversam via porta 25, então eu não poderia simplesmente trocar a porta, já que o resto do mundo tenta conversar pela porta 25. Como resolver ?

Eu resolvi adicionando uma segunda porta de SMTP, com a 25 e a 587, dessa forma os servidores de email conseguem me entregar as mensagens e meu cliente consegue acessar o SMTP.

Basta colocar uma nova entrada em /etc/postfix/master.cf parecida com:

25    inet  n       -       -       -       -       smtpd
587   inet  n       -       -       -       -       smtpd

Não sei exatamente se essa é a melhor solução para o problema, mas as soluções melhores usam mais de um servidore de email, achei overkill.