terça-feira, 15 de março de 2011

Plugin Java no Firefox


Há um tempo atrás, percebi que o plugin do java não estava funcionando no firefox, mesmo tendo a JRE instalada na máquina. Aqui vai o passo-a-passo de como resolvi este problema no Ubuntu 10.10:

1 - Abra o arquivo de repositórios "/etc/apt/sources.list" (Neste exemplo usarei o VI como editor de textos padrão):
1 vi /etc/apt/sources.list

2 - Descomente, ou adicione caso não exista no arquivo, a seguinte linha:
1 deb http://archive.canonical.com/ubuntu maverick partner

3 - É necessário que não haja nenhuma jre instalada na máquina, por isso desinstale antes caso houver.

4 - Atualize a lista de repositórios e instale o plugin da Sun.
1 sudo apt-get update
2 sudo apt-get install sun-java6-plugin

5 - Use o próximo comando para assossiar o plugin ao Firefox:

Caso seu sistema seja 32 bits:
1 sudo update-alternatives --install /usr/lib/mozilla/plugins/mozilla-javaplugin.so mozilla-javaplugin.so /usr/lib/jvm/java-6-sun/jre/lib/i386/libnpjp2.so 1

Caso seu sistema seja 64 bits:
1 sudo update-alternatives --install /usr/lib/mozilla/plugins/mozilla-javaplugin.so mozilla-javaplugin.so /usr/lib/jvm/java-6-sun/jre/lib/amd64/libnpjp2.so 1


Reinicie o navegador e seu plugin já estará funcionando. o/




quinta-feira, 9 de setembro de 2010

Linux: Scripts na Inicialização e RunLevels

As vezes precisamos que alguns comandos ou programas sejam executados na inicialização, uma maneira fácil de fazer isto é usando scripts registrados nos RunLevels.

Vamos criar um simples exemplo prático para entendermos como funciona este negócio todo (estes exemplos são baseados na estrutura do Ubuntu-server).

Primeiro iremos criar um script bash para teste:

#!/bin/bash
#
# /etc/init.d/teste

case "$1" in
    start)
    #Código a ser executado quando passado o parâmetro start
    echo "Script iniciado"
   
        ;;

    stop)
    #Código a ser executado quando passado o parâmetro stop
    echo "Script Parado"
        ;;

    *)
    #Ação padrão do script, caso parâmetro não for informado ou não ter sido tratado em outra opção.
    echo "Comando inválido"
        ;;
esac

Um script de inicialização deve conter pelo menos as opções start e stop. Você pode adicionar o parâmetro que quiser, simplesmente inserindo um novo bloco, por exemplo, para criar o comando status insira:
 
  status)
    #Aqui vai a ação para status.
    echo "Status: "
   
   ;;

A opção * deve ser sempre a última no script.

Após criar o script teste, coloque-o no diretório /etc/init.d/ e lhe dê permissão de execução:

chmod a+x teste

Apenas colocá-lo neste diretório não faz com que ele inicie automaticamente, temos ainda que configurá-lo no rc.d:


Os RunLevels

RunLevels como o nome já diz, são os níveis de execução, onde definimos quais scripts devem ser iniciados ou parados ao iniciar certo modo de execução. Abaixo segue uma tabela dos níveis em diferentes distros:


Run LevelGenéricoFedoraSlackwareDebian
0DesligarDesligarDesligarDesligar
1Modo mono-usuárioModo mono-usuárioModo mono-usuárioModo mono-usuário
2Modo multi-usuário básico (sem rede)Definido pelo usuário (não usado)Definido pelo usuário (configurado igual ao nível 3)Modo multi-usuário
3 Modo multi-usuário completo (Texto)Modo multi-usuárioModo multi-usuário - nível padrão Slackware
4Não usadoNão usadoX11 com KDM/GDM/XDM (gerenciadores de sessão)Modo multi-usuário
5Modo multi-usuário completo (Gráfico)Modo multi-usuário completo (com tela de login X) - nível padrãoDefinido pelo usuário (configurado igual ao nível 3)Modo multi-usuário
6RebootRebootRebootReboot



Os diretórios responsáveis pelos RunLevels do ubuntu server, se encontram em /etc.
São os diretórios rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, rc6.d, que representam o nível do número respectivo. (Em algumas distros os diretórios dos RunLevels e init.d se encontram dentro da pasta rc.d em /etc)
Dentro destes diretórios encontram-se links simbólicos para os scripts a serem iniciados ou parados.

S19postgresql-8.4 -> ../init.d/postgresql-8.4

a sintaxe destes links são:
[Ação][ordem][nome]

As ações são  S (start) para iniciar o serviço e K(kill) para parar o serviço.
A ordem é em que posição ele irá iniciar, isto serve para evitar conflitos entre scripts que dependem de outros para funcionar.

Uma maneira fácil de adicionar ao runlevel é através de comando update-rc.d

A sintaxe é a seguinte
update-rc.d [nome] start [ordem] [runlevels] . stop [ordem] [runlevels] .

O script que você quer que inicie automaticamente já deve estar na pasta init.d e você deve fornecer ao comando apenas o nome dele, não todo o caminho.

update-rc.d teste start 80 2 3 4 5 . stop 79 0 6 .

O comando acima coloca o script teste para iniciar nos runlevels 2,3,4 e 5, na posição 80, e parar o serviço nos runlevels 0 e 6, na posição 79. Se você der um ls -l dentro da pasta rc3.d, por exemplo, verá o link referente ao script teste lá dentro com o seguinte nome: S80teste

Se quiser fazer um teste, reinicie o sistema, você verá que as mensagens configuradas no script já estarão aparecendo ao desligar e iniciar.

Para remover o script da inicialização use o comando: update-rc.d [nome] remove

update-rc.d teste remove

Com estes passos simples você já pode colocar scripts para inicializar automaticamente, em breve postarei algo sobre iptables e após como criar um script de firewall.

Até +   =)

Fontes:
linux.com - An introduction to services, runlevels, and rc.d scripts

sexta-feira, 3 de setembro de 2010

VIM / VI - Comandos úteis

Nas versões atuais de linux, o editor que vem instalado é o VIM (Vi IMprooved), o vi melhorado, não o vi propriamente dito. Mesmo assim o comando vi ainda é usado, sendo um link para o vim. Por este motivo irei me referir ao VIM, tanto como VI quanto como VIM.

O VIM/VI, é um editor de texto em linha de comando, que mesmo parecendo simples, é uma grande e poderosa ferramenta.
A primeira vista ele pode parecer um "monstro de sete cabeças", mas na verdade não é tão difícil usá-lo e, após se acostumar com os seus comandos básicos, ele pode se tornar um grande aliado.

Nota: Quando for me referir à uma tecla especial ou  valor informado por usuário em um comando, colocarei entre colchetes []. Exemplo: [ctrl] irá se referir à tecla ctrl (control). Isto serve para evitar possíveis confusões.

Tópicos:
      Modos de uso (comando e inserção).
      Apagando
      Desfazendo alterações
      Copiar, recortar e colar
      Movimentando-se
      Localizar
      Substituir
      Comandos diversos
      Trabalhar com vários arquivos
      Configurações úteis


Os modos de uso

Basicamente o VIM tem dois modos de operação. O modo de inserção e o modo de comando. No modo de comando, as teclas assumem papéis especiais, suas combinações servem para executar comandos e operações. O modo de inserção, como o nome já diz, serve para editar e inserir texto. Vamos ver a seguir como alternar entre estes comandos.

Abrir

Para abrir um arquivo com o VI basta digitar:

vi nome_do_arquivo

ou

vim nome_do_arquivo

Nota: caso o nome do arquivo não existe, o vi abrirá um arquivo em branco como [new file] e ao salvar ele criará o novo arquivo.

Existem alguns parâmetros que podem ser passados ao abrir o arquivo, mas estas informações não serão mostradas aqui, para mais detalhes veja a man page do vim.

Salvar, editar e sair

Para salvar um arquivo digite:
:w
Para salvar as alterações em um novo arquivo diferente do original, basta acrescentar o nome desejado:
:w novo_arquivo
Para inserir conteúdo de outro arquivo:
:r nome_do_outro_arquivo
Para abrir um outro arquivo para edição depois de abrir o vi:
:e arquivo
Para salvar e sair:
:wq
ou
:x
ou
ZZ (tome cuidado, pois ao contrário do :wq ou :x, este é muito mais fácil de ser digitado por engano)
Para sair sem salvar as alterações:
:q!

Modo de Inserção

Agora vem os comandos para entrar de diferentes formas no modo de inserção, para voltar ao modo de comando aperte a qualquer momento a tecla ESC (escape).

i - entra no modo de inserção começando a digitação à esquerda do cursor.
I - entra no modo de inserção começando a digitação no início da linha.
a - entra no modo de inserção começando a digitação à direita do cursor.
A - entra no modo de inserção começando a digitação no final da linha.
o - começa a digitação em uma nova linha após a atual.
O - começa a digitação em uma nova linha antes da atual.
r - substitui o carácter atual (sob o cursor) pelo novo digitado.
R - entra em modo de inserção substituindo os próximos caracteres  conforme digita-se (equivale à tecla insert nos editores gráficos).
[n]cw - Funciona igual ao R, com a diferença que substitui apenas [n] palavras, após continua inserindo sem substituir.
[n]cc - O mesmo que o cw, mas ao invés de definir o número de palavras, defini-se o número de linhas.

Apagando

x - apaga carácter sob o cursor.
X - apaga carácter à esquerda do cursor.
dw - apaga da posição atual até o final da palavra.
db - apaga da posição atual até o inicio da palavra.
dd - apaga linha inteira.
[n]dd - apaga [n] linhas a partir da atual.
dt[carácter] - apaga até [carácter].
D - apaga  da posição atual até o final da linha.
d$ - apaga da posição atual até o final da linha.
d0 - apaga da posição atual até o início da linha.
dG - apaga da posição atual até o final do arquivo.
dgg - apaga da posição atual até o início do arquivo.
d[n]b - apaga até [n] palavras anteriores.
df[palavra] - apaga até palavra especificada.

Desfazendo alterações

u - desfaz última alteração.
U - desfaz última alteração na linha atual.

Copiar, recortar e colar

y - copia carácter atual.
[n]yy - copia o número de linhas especificado, partindo da atual. Se não informado número copia apenas a atual.
p - cola a última coisa copiada ou apagada.
"[letra][n]yy - copia linha ou linhas para buffer correspondente. Exemplo: para copiar uma linha para o buffer d digite: "dyy
"[letra][n]dd - apaga [n] linhas a partir da atual, movendo as para o registrador [letra] (Recortar).
"[letra]p - cola conteúdo do buffer correspondente.

Nota: usar os buffers permite copiar conteúdo entre arquivos, copiar conteúdos diferentes simultaneamente e também evita que os dados se percam ao apagar algo.

Nota 2: em teclados internacionais (aqueles sem o ç e com teclas posicionadas diferente), configurados para pt-br ou qualquer idioma que use acentuação, será necessário digitar duas vezes " ou  "[espaço], porque senão ao invés de digitar o comando "ayy você estará digitando äyy.


Movimentando - se

h - move para a esquerda
H - move para a primeira linha mostrada na tela.
l - move para a direita.
L - move para a última linha mostrada na tela.
j - move para baixo.
k - move para cima.
w - move para a próxima palavra (considera pontuação uma palavra).
W - move para a próxima palavra (considera pontuação como parte da palavra).
b - move para a palavra anterior (considera pontuação uma palavra).
B - move para a palavra anterior (considera pontuação parte da palavra).
e - move para o fim da palavra (não inclui pontuação)
E - move para o fim da palavra (considera pontuação parte da palavra)
$ - move para o final da linha.
0 - move para o inicio da linha.
^ - move para o inicio da linha (se seu teclado estiver configurado para aceitar acentos, deve ser apertada duas vezes a tecla para aceitar o comando).
gg - move para o inicio do arquivo.
[n]G - move para linha de número especificado.
G - move para última linha do arquivo.
f[carácter ou texto] - move o cursor para a primeira ocorrência, na linha atual, do carácter ou texto informando.
[ctrl]e - move a tela para cima, sem modificar a posição atual do cursor.
[ctrl]y - move a tela para baixo, sem modificar a posição atual do cursor.


Obs: se for digita um número e um comando de movimentação, como h,j,k ou l o cursor repetirá o comando tantas vezes quanto informado, ou seja digitando 22j o cursor descerá 22 linhas. Isto serve também para outros comandos como inserção, delete, copia,etc.

Nota: as teclas direcionais, a tecla ENTER e a barra de espaço, muitas vezes também funcionam para movimentação, mas dependendo do teclado ou em alguns clientes ssh, eles apenas inserem carácteres especiais. Aconselho a se acostumar a usar as teclas de movimentação do VI, pois após acostumar a usá-las, a movimentação nos textos se torna muito mais rápida e fácil.


Localizar

f[palavra] - Localiza a primeira ocorrência posterior da palavra ou carácter na mesma linha.
F[palavra] - Localiza a primeira ocorrência anterior da palavra ou carácter na mesma linha.
; - repete busca por palavra na mesma linha (mesmo sentido).
, - repete busca por palavra na mesma linha (sentido inverso).
/[pesquisa] - Busca primeira ocorrência de [pesquisa] posterior a posição atual.
?[pesquisa] - Busca primeira ocorrência de [pesquisa] anterior a posição atual.
n - repete busca no mesmo sentido.
N - repete busca no sentido contrário.

Substituir

[n]s - substitui [n] caracteres por novo texto digitado.
[n]S - substitui [n] linhas por novo texto digitado.
:[intervalo]s/[x]/[y]/[opções] - substitui a ocorrência de [x] por [y].
     
   Intervalos:    [n linha inicial][n linha final] - intervalo definido.
                         ..[n linha final] - da linha atual até a linha de número definido.
                            ..$ - da linha atual até o fim do arquivo
                            % - em todo arquivo.
    Opções:        g - todas as ocorrências na linha.
                         c - pede confirmação para cada substituição.

    Exemplo:
        Substituir todas as ocorrências de vini no arquivo para vinicius, sem confirmação.

            :%s/vini/vinicius/g

        Substituir todas ocorrências da linha atual até a linha 42 de it para ti, pedindo confirmação.

            :..42s/it/ti/gc

& - repete último comando de substituição.

Comandos diversos

. - repete comando anterior.
J - junta duas linhas.
K - procura por palavra atual no manual.
V - seleção de linhas visual (use os comandos de movimentação expandir a seleção).
v - seleção de letras visual (use os comandos de movimentação para expandir a seleção).
~ - muda caso da letra atual ou seleção.
:sh - abre o shell. Após fechar o shell, retorna ao vim.
!![comando] - insere saída do comando no arquivo.

Trabalhar com vários arquivos ao mesmo tempo

Você pode abrir dois arquivos em visualização compartilhada ou normal.

Trabalhar com vários arquivos (normal):

Abrir

vi arquivo1 arquivo2

Comandos

:n - ir para o próximo arquivo da lista
:prev - voltar para arquivo anterior
:args - ver arquivos abertos

Modo tela dividida

Este modo é mais interessante, pois podemos ver todos os arquivos ao mesmo tempo

Abrir

vi -o arquivo1 arquivo2

Após o vi estar aberto, para abrir mais arquivos use:
:sp nome_do_arquivo
ou
:split nome_do_arquivo

Alternar entre arquivos

[ctrl]wj - Pula para o arquivo de cima.
[ctrl]wk - Pula para o arquivo de baixo.



Configuraçoes úteis

:set sw=[n] - Define o tamanho em caracteres da tabulação. Para usar a tabulação.
            [n]>> - Identa [n] linhas a partir da atual.
            [n]<< - Retira identação [n] linhas a partir da linha atual.

:set [opção] - para ativar algumas opções do vim.
        Opções:
                      ai - identação automática
                      ic - Ignorar caso numa busca (maiúscula/minuscula)
                      nu - Mostra numeração de linha.
                      sm - Ao fechar um parentese, chave ou colchete, é mostrado onde ele foi aberto. (Se não foi aberto soa um bip).

Para cancelar alguma opção digite:

    :set no[opção]

   Exemplo:
            :set nonu - desativa numeração de linhas.

Estas configurações se perdem ao reiniciar o vim. Para definir configurações padrões na inicialização, crie (ou modifique caso já exista) um arquivo com o nome ".exrc" na sua pasta home. Digite os comandos sem : .
Exemplo ~/.exrc :

   set sw=5
   set nu
   set sm

Este arquivo definirá a identação 5. Aparecer número de linhas e mostrar a combinação de parênteses.


Este é o final, ficou mais extenso do que eu imaginei, mas acho que já serve como uma boa base para usar o vim.
Para quem ainda não achou um uso para o vim, aqui vai algumas situações em que ele já me foi útil ou ainda é.

    * Configurações de arquivos de configuração em servidores.
    * Tratar arquivos csv muito grandes. Eles costumam travar a maioria dos editores. Já abri arquivos com mais de 1 milhão de linhas.
    * Substituições de ocorrências de palavras são relativamente rápidas, comparadas a editores gráficos.   
    * Digitar textos rápidos.
    * Criar posts =P
    * Nunca usei para programar (a não ser alguns ajustes rápidos em php), mas conheço gente que programa com o vim.

Uma alternativa para o vim, mais simples e talvez mais fácil de manipular é o mcedit, ele é muito similar àquele editor de texto que tinha no dos (telinha azul, letras brancas, comandos nas teclas de função F1,F2,F3,F4...). Eu particularmente não gosto de usá-lo, mas tenho um amigo que usa, e diz que é um ótimo quebra galho. Para quem quiser o mcedit pode ser encontrado nos repositórios da maioria das distribuições.
Para quem quiser saber mais a respeito do
mcedit (em Inglês) - http://linux.die.net/man/1/mcedit.

Isso é tudo pessoal! Espero ter ajudado.

:wq

quinta-feira, 19 de agosto de 2010

SSH (Secure Shell) - Básico

Segue algumas noções básicas e úteis do SSH (Secure Shell), uma forma segura e rápida de acessar servidores e outros equipamentos rodando um server ssh.

para conectar num servidor ssh digite:
ssh ip_ou_host_do_servidor

para conectar com um usuário específico:
ssh usuario@ip_ou_host_do_servidor


para conectar com uma porta diferente da padrão ssh (22):
ssh -p numero_porta usuario@ip_ou_host_do_servidor

para copiar um arquivo através do ssh use o comando:
scp ip_ou_host_do_servidor:/diretorio/arquivo /diretorio_destino/

caso o ssh esteja configurado para uma porta diferente da padrão (22) também será necessário indicá-la:
scp -P numero_porta ip_ou_host_do_servidor

Alguns exemplos de uso:


ssh 192.168.1.10

ssh -p 9999 root
@192.168.1.10

scp -P 9999 root@192.168.1.10 ~/Download/


scp -P 9999 ~/Dowload/arquivo.csv root@192.168.1.10:/home/usuario/


scp -P 9999 ~/Download/arquivo.csv root@192.168.1.20:~/Download/arquivo_renomeado.csv


caso não seja especificado o login do usuário para acesso, será usado o login com o qual foi executado o comando.

Ao acessar um servidor, é registrada uma chave RSA no arquivo ~/.ssh/known_hosts. Nas próximas conexões, o cliente ssh irá conferir a chave do RSA do servidor com a chave ja cadastrada no arquivo. Isto serve para evitar interceptações de terceiros. Se for mudado o servidor, e mantido o mesmo ip, será necessário remover a linha do arquivo para que a nova chave seja aceita, senão, lhe aparecerá uma mensagem de erro alertando que a chave não confere com a original.


Para modificar as configurações do servidor ssh no linux, modifique o arquivo /etc/ssh/sshd_config. Neste arquivo você encontra diversas configurações interessantes. Duas muito boas são port, onde você define a porta em que o servidor irá receber conexões, e PermitRootLogin onde você pode definir se será ou não aceito o login como root no ssh. É aconselhável deixar como no, pois como o root é um usuário padrão em todas as distribuições, ele se torna um dos principais alvos dos ataques "Brute Force".

Para que as modificações tenham efeito é necessário reiniciar o serviço:

/etc/init.d/ssh stop
/etc/init.d/ssh start

Para windows um bom programa cliente ssh é o Putty (http://www.putty.org/), compatível com diversas versões do windows e também encontrado na versão portátil.


Por hoje é só, vão pela sombra e usem camisinha!
=)

terça-feira, 17 de agosto de 2010

Protegendo pastas do Apache com senha de acesso

Muitas vezes quando estamos utilizando um servidor apache, seja no trabalho ou por diversão, criamos diretórios que não gostariamos que todos vissem, apenas pessoas autorizadas. Para resolver este problema existe uma maneira fácil, simples e rápida.

Vamos usar o comando htpasswd

Como configuração inicial utilize o comando

htpasswd -c /diretorio/arquivo_senha usuario

Explicando o comando:

o Parâmetro -c cria um novo arquivo, se o arquivo já existir ele sobreescreve, perdendo as informações anteriores.

/diretorio/arquivo_senha é o caminho onde esta ou estará o arquivo com as senhas. Algumas pessoas usam por padrão o diretório que irá ser protegido. Eu prefiro um diretório diferente, assim podemos padronizar as senhas, usando o mesmo arquivo de usuários para mais de uma pasta e deixando-o num local fora das pastas do apache.

usuario - aqui você coloca o login do usuário para acessar a pasta (este login não tem relação com os logins do linux, não é necessário criá-lo no servidor e sua única função  é o acesso à pasta do apache definida).

Logo após o comando ele pedirá para digitar a senha para o usuário, e criará o arquivo.

Para cadastrar novos usuários sem excluir os anteriores, mantendo o arquivo, use a mesma sintaxe sem o parâmetro -c

htpasswd /diretorio/arquivo_senha usuario

Também pode ser cadastrado desta forma:

htpasswd -b /diretorio/arquivo_senha usuario senha

Para deletar use o parâmetro -D

htpasswd -D /diretorio/arquivo_senha usuario


Após criar o arquivo devemos modificar o arquivo de configurações do apache que se encontra por padrão no caminho /etc/apache2/apache2.conf.
Adicione as seguintes linhas:

<directory "/var/www/minha_pasta/">
AllowOverride None
Options Indexes MultiViews
Order allow,deny
Allow from all

AuthType Basic
AuthName "Pasta Restrita"
AuthUserFile
 "/etc/meu_arquivo_de_senhas"
Require valid-user

</directory>



Na primeira linha, em <directory "/var/www/minha_pasta">, você deve modificar para o diretório que você quer definir a restrição.
Authname - é onde você coloca o título que irá aparecer na janela de autenticação.
AuthUserFile - você indica o caminho do arquivo de senhas.
Require - Caso você deseje que todos os usuários que estejam cadastrados no arquivo de senhas tenham acesso, deixe valid-user. Você pode modificar valid-user para um usuário específico, cadastrado no arquivo.

É necessário criar um bloco para cada diretório diferente que você queira proteger. As subpastas são automaticamente protegidas.

Após feita as modificações, salve o arquivo e reinicie o apache:

/etc/init.d/apache2 stop
/etc/init.d/apache2 start


O controle de acesso já deverá estar funcionando na pasta cadastrada.

"That's all folks" =)

domingo, 8 de agosto de 2010

- Hello World -


Não sou um leitor assíduo de blogs, mas muitas vezes ao pesquisar procurando soluções para alguns problemas, encontrei posts interessantes que me ajudaram.
Não me sobra muito tempo para ficar frequentando fóruns, e além do mais, muitas vezes esqueço de algumas soluções e tenho que procurá-las novamente. Por causa disto decidi criar este blog, e postar dicas, soluções, tutoriais e ideias que possam ser úteis a quem procura uma luz no fim do túnel, assim como eu procurei várias vezes e ainda procuro. 
Tentarei na maioria das vezes ser o mais prático possível, pois o objetivo é a solução do problema não ensinamentos avançados (se um apt-get resolve o problema, pra que compilar?), mas também comentarei bem as dicas, por que eu não gosto de fazer coisas que eu não esteja entendendo o que está acontecendo, e aposto que vocês também não.
Se alguém achar uma solução melhor que  alguma que eu postar, pode mandar para meu e-mail, ficarei feliz em publicá-las se forem melhores.

Valeu pessoal!!!

Vinicius Gerevini