RSS

segunda-feira, 9 de agosto de 2010

Asterisk - Instalação e Configuração.

O Asterisk é um software que disponibiliza uma central PBX digital, ou seja, uma central telefônica totalmente digital sobre IP. Além de recursos como URA, suporte a Call Center, salas de conferência, chamadas em espera e caixas postais e locais ou por e-mail, um servidor com o Asterisk é uma central telefônica digital completa. Integrando a telefonia convencional com a telefonia IP o Asterisk é o PBX de menor custo no mercado. O Asterisk pronto e funcional também pode ser conectado a rede VoIP com provedoresque terminam sistemas de telefonia no mundo inteiro.

 Instalação e Configuração do Asterisk PBX

- Baixe os pacotes asterisk, libpri e zaptel para o diretório /usr/src. Caso os pacotes esteja compactado (.tar.gz), descompacte-os com o comando

Comece pela Libpri:

# tar -zxvf libpri-1.2.2.tar.gz
# cd libpri-1.2.2
# make
# make install

Zaptel

# tar -zxvf zaptel-1.2.5.tar.gz
# cd zaptel-1.2.5
# make
# make install

Add-ons

# tar -zxvf asterisk-addons-1.2.2.tar.gz
# cd asterisk-addons-1.2.2
# make && make install

Sounds

# tar -zxvf asterisk-sounds-1.2.1.tar.gz
# cd asterisk-sounds-1.2.1
# make install

E finalmente, o ASTERISK.

# tar -zxvf asterisk-1.2.7.1.tar.gz
# cd asterisk-1.2.7.1
# make clean
# make
# make install
# make progdocs
# make samples

Configurações - extensions.conf

O arquivo extensions.conf é o responsável por criar as extensões ou ramais, nele criamos também caminhos genéricos como XXX para cada X um dígito, onde podemos usar a imaginação para solucionar as questões que precisamos.

[grupo1]
include => demo
exten => 100,1,Dial(SIP/numero1,25)
; SIP-É o tipo da conta / numero - O nome do usuário / 25-O tempo que vai chamar em segundos.
exten => 100,2,Hangup
exten => 200,1,Dial(SIP/ numero2,25)
exten => 200,2,Hangup
exten => 300,1,Dial(IAX2/ numero3,25)
exten => 300,2,Hangup

Configurações – sip.conf

O arquivo sip.conf armazena informações sobre contas de usuários de protocolo SIP as informações são simples como nome de usuário, bina, senha e qual grupo participam.

No exemplo abaixo estamos criando os usuários que receberam um número no extensions.conf.

[general] ; configurações básicas do protocolo
context=default ; Context padrão para recebimento de chamadas
bindport=5060 ; Porta UDP (A padrão é 5060)
bindaddr=0.0.0.0 ; Endereço IP para escutar (0.0.0.0 Escuta todos)
srvlookup=yes

[numero1]
type=friend ; tipo friend=faz e recebe chamadas, user=faz chamadas, peer=recebe chamadas.
callerid = \"numero1\" <100>
username=numero1 ;Nome do usuário para login
secret=123 ;Senha
host= dynamic ; se não tem ip fixo
nat=yes ; se está debaixo de nat
canreinvite=no ; no para não encaminhar chamadas
context=grupo1

[numero2]
type=friend
callerid = \"numero2\" <200>
username=numero2
secret=123
host= dynamic
nat=yes
canreinvite=no
context=grupo1

Configurações – iax.conf

O arquivo iax.conf armazena informações sobre contas de usuários de protocolo IAX2 as informações são simples como o arquivo de usuários SIP

No exemplo abaixo estamos criando os usuários que receberam um número no extensions.conf.

[general] ; configurações básicas do protocolo
bandwidth=low
jitterbuffer=no
forcejitterbuffer=no
tos=lowdelay

[numero3]
type=friend
context=grupo1
username=numero3
secret=123
qualify=yes ; verifica se o host está respondendo (está a menos de 20ms)


Para adicionar o serviço do Asterisk digite

# cd asterisk-1.2.7.1
# make config
# chkconfig –add asterisk

Para acessar o console, com o Asterisk rodando execute:

# asterisk -r

Utilize os comandos abaixo para recarregar as configurações novas:

asterisk*CLI> sip reload
asterisk*CLI> iax2 reload
asterisk*CLI> extensions reload
asterisk*CLI> quit

- Pronto. Agora é só configurar os arquivos de configuração do asterisk e montar o seu servidor VOIP. Para isso, acesse os sites:
www.asterisk.org
www.digium.com .

O Asterisk já está rodando com os ramais configurados, agora o próximo passo é configurar os SoftPhones.

quinta-feira, 5 de agosto de 2010

OpenVPN - Redes Privadas Virtuais com Certificado.

Versão atual do artigo: openvpn-2.1.1.tar.gz

Versão atual do artigo: lzo-2.03.tar.gz

- Descompactar e Instalar:
tar zxvf openvpn-2.1.1.tar.gz
cd openvpn-2.1.1
./configure
make
make install

tar zxvf lzo-2.03.tar.gz
cd lzo-2.03
./configure
make
make install

- Configurando o openssl. Dentro dele procure por [ CA_defaults ]

vi /etc/ssl/openssl.conf

[ CA_default ]
dir                         = /etc/openvpn
certs                      = $dir/certs
crl_dir                   = $dir/crl
database               = $dir/index.txt
new_certs_dir       = $dir/newcerts
certificate             = $dir/certs/ca.crt
serial                    = $dir/serial
crlnumber            = $dir/crlnumber
crl                         = $dir/crl.pem
private_key          = $dir/certs/ca.key
RANDFILE          = $dir/private/.rand

Saia do arquivo e salve com o comando :wq.

Agora dentro do diretório /etc/openvpn, crie o diretório "certs" e ccd com o comando:
mkdir certs
mkdir ccd
mkdir newcerts

E digite:
touch index.txt
echo 01 > serial

Criar o certificado e a chave. No diretório /etc/openvpn/certs, digite:
openssl req -nodes -new -x509 -keyout ca.key -out ca.crt -days 3650
(Complete com os dados do servidor/empresa)
openssl dhparam -out dh.pem 1024

 - Gerar o certificado do servidor:
openssl req -nodes -new -keyout servidor.key -out servidor.csr
(Complete com os dados do servidor/empresa)

 - Assinar o certificado:
openssl ca -out servidor.crt -in servidor.csr
(Complete com os dados do servidor/empresa)


 - Criar o arquivo de configuração da VPN.

vi /etc/openvpn/servidor.conf

# Geral
port 1194
proto udp
dev tun0
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/servidor.crt
key /etc/openvpn/certs/servidor.key
dh /etc/openvpn/certs/dh1024.pem
keepalive 10 30
comp-lzo
max-clients 100
user nobody
group nobody
#persist-key
#persist-tun
verb 3
mute 10

# DHCP
server 10.10.0.0 255.255.255.0
#push "dhcp-option DNS 10.10.0.1"
#push "route-gateway 10.10.0.5"
push "dhcp-option DNS 10.1.1.54"

#route-up "route add 10.0.0.0 mask 255.0.0.0 10.10.0.5"
#route 10.0.0.0 255.0.0.0 10.10.0.5

push "route 10.1.1.0 255.255.255.0"
#Rede/Empresa2
route 10.2.1.0 255.255.255.0
#Rede/Empresa3
route 10.3.2.0 255.255.255.0
#Rede/Empresa4
route 10.4.1.0 255.255.255.0

# Cliente
client-to-client
client-config-dir /etc/openvpn/ccd/
ccd-exclusive
ifconfig-pool-persist /etc/openvpn/ipp.txt

# Log
status /var/log/openvpn-status.log
log /var/log/openvpn.log
log-append /var/log/openvpn-append.log

- Executar a VPN
 /usr/local/sbin/openvpn --config /etc/openvpn/servidor.conf --daemon
  

 Configuração do Cliente, WINDOWS:

openvpn.ovpn

client
dev tun
proto udp
remote IP 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert certificado.crt
key certificado.key
comp-lzo
verb 3
mute 20

quarta-feira, 4 de agosto de 2010

MYSQL - Diferença entre MyISAM e InnoDB

InnoDB e MyISAM -  Qual tipo de tabela utilizar?

InnoDB funciona mais rápido que MyISAM quando há modificações constantes nos dados, uma vez que este tipo de armazenagem usa a proteção por registros (row locking) e não a proteção por tabelas (table locking) como o faz o MyISAM. Contudo, em várias situações, InnoDB é mais lento que MyISAM, devido ao fato de que InnoDB funciona com transações. A armazenagem padrão do MySQL é MyISAM

Outro ponto interessante são as restrições de chaves estrangeiras (foreign key constraints) e transações. Estes recursos estão disponíveis apenas no InnoDB.

MyISAM é apropriado para tabelas cujos dados não mudam com frequencia. Um exemplo disso é uma tabela de cidades e estados. Como geralmente este tipo de tabela é usado apenas como consultas, não há a necessidade do uso de InnoDB.

MyIsam tem a vantagem de ser arquivos simples se comparado com o innodb, mesmo na opção para criar dentro do contexto, o arquivo fica instavel em volumes grandes, o mito sobre configurar o mysql em innodb está errado, VOCÊ SEMPRE DEVE CONFIGURAR O MYSQL, perfomace de cache é sempre importante.

Considerar também o uso de MYSQL 3, que é super mais leve, mas em contra-partida não tem suporte a subselect, nunca deixe de usar subselect, inner join, e counters. Repitir dados também não é um erro, exemplo melhor: BIGTABLE do google, quando você tem counters, vc tem counters mesmo, não queira varrer a tabela de pedidos toda hora para ver quantos produtos sairam e entraram, você pode fazer isso em uma rotina de backup, ou cada 10 min para ter certeza que está ok, mas não para todo pedido de produto corrente. (isso vale para qualquer modo)

O Banco de dados também tem um limite se você deseja fazer um site estilo americanas, ou mesmo o novo google, que dá quantos XX de item tipo foi encontrado, o melhor a se fazer é usar um sistema de indexação pronto para isso, exemplos clássicos são Lucene (Usado no Hibernate e na maioria dos EJB), Solr, HBase (esse ultimo é mais usado com Hadoop, no esquema MAP/REDUCE), como assim, não usar o banco?  é claro que você vai ter um banco de dados, mas a cada X minutos descarrega para o indice corrente, eles são feitos para criar facet search

Fora ainda CouchDB e outros bancos não relacionais, tudo possivel, se usar junto de um outro banco master. Também não esqueçamos do MYSQL-PROXY, sendo possivel mapear query dinamicamente para o nó X, ex: tenho um indice de InnoDB especializado para Geo-Search, um outro para Full-Text, um outro para Cruzamentos de categorias com outra regra de négocio importante, ex: volume, podendo ainda ser o mesmo servidor só que em diferentes portas, assim você escala as pesquisas, sem necessariamente precisar de mais hardware.

Gosto de pensar que o mysql é uma ferramente poderosa, que chega ao seu limite, quando desejamos fazer mais que isso, ex: ter job`s, usar algum middleware direto ao banco, ou até mesmo ter algum suporte mais interessante para usar sobre fibra ótica e storage, pq, bem funciona, ele vai funcionar, só que vai ser sempre na base da pesquisa, já outros sistemas são feitos para isso, e quando precisamos disso, quando falamos em BILHÕES de registro, não é uma micro-empresa, mas uma média para cima que costuma precisar, e a maioria dos sites também não, na verdade dificilmente você vai precisar fazer metade dessas técnicas, e NEM DEVE, pois isso é útil quando se tem volume, antes disso, fique no básico, o legal é saber que existe.

MyISAM

- Foi implementado a partir do código da tabela ISAM., introduzindo diversas melhorias como:
- Os arquivos de tabela são transportáveis entre diferentes sistemas operacionais;
- Campos BLOB  e TEXT  podem ser indexados;
- Os Arquivos índices e de dados podem ser armazenados em dispositivos diferentes (aumento de performance);
- Algoritmos de distribuição de dados e gerenciamento de índices melhorados;

InnoDB

- Rodam sob um engine, desenvolvido pelo Innobase( www.innodb.com), que acrescenta ao MySQL o suporte a TRANSAÇÕES e a CONSTRAINTS de chave estrangeira.
- Para obter o máximo de performance com tabelas InnoDB é necessário configurar o arquivo my.conf(ou my.ini no Windows) de acordo com as características de hardware do servidor onde o MySQL está rodando. Os Detalhes dessa configuração podem ser obtidos no manual do InnoDB.

Instalação do MYSQL utilizando MyISAM e InnoDB

1)- Baixar o fonte (Mysql 5.1.4 - Versão atual do artigo) em:
http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.49.tar.gz/from/http://gd.tuwien.ac.at/db/mysql/

2)- Extraindo:
tar zxvf mysql-5.1.49.tar.gz
cd  mysql-5.1.49

3)-Compilando e Instalando:
./configure --with-plugins=innobase,myisam
make
make install

4)- Permissão
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'senha';

terça-feira, 11 de maio de 2010

Como gerenciar permissões no Linux

Introdução

Permissões de acesso

O GNU/Linux, como todo sistema operacional robusto e estável, tem na permissão de acesso a arquivos e diretórios a principal proteção do sistema de arquivos. Essas permissões impedem o acesso indevido de programas e usuários a lugares não autorizados.

Vamos mostrar como identificamos o tipo de arquivo, quem é o seu dono, a que grupo ele pertence, os tipos de permissão de arquivos/diretórios, permissões especiais, os comandos de manipulação de permissões e por fim falaremos dos comandos que usamos para mudar a propriedade e grupo de arquivos/diretórios.

Tipo de arquivo

São definidos 7 tipos de arquivos no Linux. Mesmo havendo a inclusão de algo novo no sistema de arquivos, ele ainda deve ser incluso de forma a se enquadrar em um desses tipos.

Antes de iniciarmos, vamos criar um diretório base para nossos testes/exemplos. Daremos o nome de "Documentos" a este diretório e dentro dele iremos criar um outro diretório de nome "Documentos", além de um arquivo chamado "bugiganga.txt".

# mkdir /documentos
# chmod 777 /documentos
# cd /documentos/
# mkdir Documentos
 

# ls -l
drwxr-xr-x 2 root root 4096 2010-05-04 14:32 Documentos

# touch bugiganga.txt
 

# ls -l
-rw-r--r-- 1 root root    0 2010-05-04 14:33 bugiganga.txt
drwxr-xr-x 2 root root 4096 2010-05-04 14:32 Documentos

Agora vamos identificar o tipo de arquivo estamos trabalhando. De acordo com saída do comando "ls -l" temos:

# ls -l
-rw-r--r-- 1 root root    0 2010-05-04 14:33 bugiganga.txt
drwxr-xr-x 2 root root 4096 2010-05-04 14:32 Documentos

Da esquerda para direita temos uma sequência de 10 bits (caracteres). Nesse primeiro momento iremos nos ater apenas ao bit mais significativo, que é o primeiro bit da esquerda para direita. Ele equivale ao "tipo" de arquivo que estamos trabalhando.

Na saída de nosso exemplo, iremos destacar apenas os 10 bits, de 1 de tipo e 9 de permissão, e daremos uma atenção especial ao bit de "tipo", com isso teremos condição de compreender melhor e saber como identificar cada um dos 7 tipos de arquivos Linux. 
 Segue abaixo tabela indicativa de tipos de arquivos: 
Agora iremos comentar sobre cada um dos 7 "tipos" de arquivos Linux.
  • Arquivo regular - São arquivos texto, arquivos de dados, executáveis, bibliotecas etc.
  • Diretórios - São arquivos que possuem referências com nomes para outros arquivos.
  • Arquivos de dispositivos de caracteres e de dispositivos de blocos - São os arquivos utilizados por programas, que permitem a comunicação com o hardware e periféricos do sistema.
  • Sockets Local - Comunicação entre processos. Exemplo: sistema de impressão e o syslog.
  • Pipes - Assim como os sockets, os pipes também permitem a comunicação entre dois processos executados no mesmo host.
  • Links simbólicos - Também conhecidos como soft link é basicamente um arquivo que aponta para outro arquivo, podemos enxergar de forma mais clara se pensarmos nele como sendo um atalho.

 

Conjunto de permissões

Dono, grupo e outros

A definição de acesso aos arquivos e diretórios é feita seguindo 3 conjuntos de permissão que equivalem ao "dono" , ao "grupo dono" dos arquivos e diretórios e "outros".

Dono:

É o usuário que criou o arquivo ou diretório. Somente ele ou o "root" podem modificar as permissões de acesso ao arquivo ou diretório criado por ele. Temos como identificação do dono do arquivos o user id (UID).

A identificação do usuário fica armazenado no arquivo /etc/passwd.

Grupo:

É o grupo dono do arquivo ou diretório. É através desse conjunto de permissões que vários usuários podem ter acesso a arquivos e/ou diretórios onde eles não são os criadores. Um usuário pode pertencer a vários grupos, com isso o administrador do sistema tem como planejar uma boa política de segurança. Temos como identificação de grupo o group id (GID).

Quando um usuário é criado e não especificamos que este usuário deve pertencer a um grupo já existente no sistema, é criado por padrão um grupo com o mesmo nome do usuário.

O armazenamento das informações referentes aos grupos do sistemas e os usuários que fazem parte desses grupos, estão armazenados no arquivo /etc/group.

Outros:

São aqueles usuários que não são os criadores e nem pertencem ao grupo dono do arquivo ou diretório.

Tipos de permissão de acesso

Temos 3 tipos básicos de permissão que são aplicáveis para o usuário proprietário do arquivo/diretório (dono), os grupos proprietários do arquivo/diretório (grupo) e outros são as permissões de leitura, escrita e execução. São destinados 3 bits (caracteres) para cada um dos agentes (dono, grupo e outros) sendo um bit de leitura, um bit de escrita e um bit de execução.
 É importante deixar bem claro que a criação e a remoção de um arquivo/diretório depende da permissão de escrita estar setada no diretório "PAI", pois é nele que o mapeamento de nome para o espaço de dados é armazenado.

Podemos ainda usar a representação numérica octal (base 8), onde cada dígito equivale aos 3 bits de cada grupo de bits. 
 Abaixo mostraremos como funciona a representação octal:

O bit mais significativo representa as permissões de acesso do "dono" do arquivo ou diretório: 
O segundo bit mais significativo representa as permissões de acesso do "grupo" dono do arquivo ou diretório  


Já o último ou o bit menos significativo representa as permissões de acesso dos "outros". 

Permissões de acesso

Tipos de permissão de acesso

Temos 3 tipos básicos de permissão que são aplicáveis para o dono, o grupo e outros. São elas, permissão de leitura, escrita e execução. Cada uma dessas permissões é representada por 3 bits cada. Temos a representação de um bit para leitura, um bit para escrita e um bit para execução.

Tabela de comparativa de permissões em arquivos e diretórios. 


É importante deixar bem claro que a criação e a remoção de um arquivo/diretório depende exclusivamente da permissão de escrita que foi setada no diretório "PAI", pois o mapeamento de nome para o espaço de dados é armazenado nele.

Permissões de acesso especiais ou bits especiais

Além das permissões básicas ainda existem três permissões especiais que modificam o comportamento de arquivos e diretórios. São elas: setuid, setgid e sticky bit.

Detalharemos cada um deles a seguir.

Setuid

Esse bit especial é representado pela letra "s" no conjunto de bits destinados ao proprietário do arquivo (- --s --- ---). Tem como função fazer o ajuste das permissões de usuário durante a execução de um programa para o proprietário do arquivo. Isso significa que no momento em que o programa é executado, ele será executado como se o proprietário do arquivo o estivesse executando e não a o usuário que o executou.

A posição em que a letra "s" é a mesma posição do bit básico de execução (x). Você deve estar se perguntando, como saberei se o bit de execução esta ativado? É bem simples, quando tivermos a letra "s" minúscula, significa que teremos ativado além do setuid o bit de execução, mas se "S" for maiúsculo significa que apenas teremos setuid ativado.

Devemos ter muito cuidado ao ligarmos o Setuid em arquivos (scripts) onde o proprietário é o root, porque isso pode trazer problemas sérios de segurança, já que durante da execução o script ele executado como se o "superuser" o fizesse.

Quando nos referimos a diretórios o setuid não tem nenhuma funcionalidade.

Em formato octal, é representado por: 4000

Setgid

Esse bit especial tem a mesma funcionalidade do setuid no que se refere a arquivos, sua representação também é um "s" (- --- --s ---), quando trabalha em conjunto com o bit de execução. Da mesma forma que o setuid, ele é representação por um "S" maiúsculo quando o bit de execução não esta ativado.

Ao ativarmos o setgid em diretórios, ele tem uma funcionalidade bem interessante. Todos os arquivos ou diretórios criados dentro dele, passam a ignorar o grupo padrão do usuário e pertencer ao mesmo grupo do diretório "pai".

Em formato octal, é representado por: 2000

Sticky bit

Sua funcionalidade para arquivos era salvar uma imagem do programa na swap, fazendo com que ele fosse carregado com mais velocidade. Hoje em dia ela tornou-se obsoleta e os sistemas atuais a ignoram.

Quando ativado em um diretório, faz com que só o proprietário do arquivo ou diretório consiga os remover ou editar.

Sua representação e feita através do caractere "t" ( - --- --- --t , bit de execução esta ativado) e "T" ( - --- --- --T , bit de execução não ativado).

Um bom exemplo da utilização desse bit é o /tmp, esse diretório é utilizado por programas/usuários para criar arquivos e diretórios temporários.

Em formato octal, é representado por: 1000

Tabela demonstrativa bits especiais: 

Umask

São as permissões iniciais que um arquivo/diretório. Isto significa que a "umask" é responsável pelas permissões no momento da criação do arquivo ou diretório. Ao digitarmos "umask" sem acrescentarmos nenhum parâmetro, teremos como resultado do valor atual dela.

O comportamento na criação de arquivos texto e binários é diferente. Conforme demonstrado na tabela a seguir


O valor padrão da umask é 022 na maioria das distribuições que estão atualmente no mercado. Ao se modificar a umask de um usuário temos que ter muito cuidado, pois podemos causar problemas de acesso de arquivos/diretórios.  

Manipulando as permissões

Modificando permissões

Antes de falarmos dos comandos que nos possibilitam mudar as permissões de acesso de usuários, grupos e outros. Falaremos das duas formas de modificá-las através das notações octal e simbólica. Elas são usadas para modificar cada um dos níveis de permissões.

Níveis de permissão:


 Notação octal:

Modificamos diretamente os 3 níveis de permissão. Para modificarmos as permissões através dessa forma, devemos especificar explicitamente o conjunto de permissões. Isto significa que iremos modificar de uma vez só os três níveis de permissão (dono, grupo e outros).

Não temos como modificar apenas 1 nível de permissão, quando usamos esta notação. Se a intenção é apenas modificar um nível de permissão, é mais simples optarmos pela notação simbólica ou especificarmos os outros 2 níveis usando o octal que representa o mesmo conjunto de permissões atuais.

Sua representação é um conjunto de oito números, onde cada um deles significa um conjunto de permissões diferente.

Tabela notação octal: 
 Tabela notação simbólica: 
Em adição as opções simbólicas descritas acima, temos 3 formas de trabalho: 
Para iniciarmos nossos exemplos vamos criar a seguinte árvore de diretórios, contendo alguns arquivos e diretórios: 
 Como já tínhamos o diretório "/documentos" e o arquivo "bugiganga.txt".

# cd /documentos
# touch organograma.odc
# cd Documentos/
# touch credores.xls
# touch contas_pagar.odc


Agora de dentro do diretório /documentos vamos dar o comando "ls -l".

# ls -l
-rw-r--r-- 1 root root    0 2010-05-04 14:33 bugiganga.txt 
drwxr-xr-x 2 root root 4096 2010-05-04 17:31 Documentos 
-rw-r--r-- 1 root root    0 2010-05-04 17:30 organograma.odc
Como podemos ver, o dono dos arquivos é o superusuário "root" e o grupo dono deles é o grupo "root". As permissões são de escrita(w) e leitura(r) para o dono (root), leitura(r) para o grupo (root) e leitura(r) para os outros, isso para os arquivos. No caso do diretório temos o bit de execução (x) ligado, além de todos os outros bits estarem com as permissões iguais as dos arquivos.

Agora estamos preparados para estudarmos os comandos que nos permitem manipular as permissões. Os comandos "chmod", "chgrp" e "chown" serão descritos a seguir.

Comando chmod

Usado para modificar as permissões de acesso de um arquivo ou diretório. Quando criamos um arquivo, seu dono (proprietário) é o usuário que o criou, seu o grupo é o grupo padrão do seu proprietário. Como vimos anteriormente existe uma exceção a essa regra. Caso o diretório onde esse arquivo/diretório esteja sendo criado possua o bit especial "setgid" ativado. Nesse caso o grupo passa a ser o mesmo grupo do diretório "pai".

Sintaxe:

chmod [opções] [permissões] [arquivo/diretório]

Opções:
 Segue abaixo exemplos do comando chmod:

Ex.1: Vamos dar direito de escrita para o grupo dono do arquivo bugiganga.txt.

# ls -l
-rw-r--r-- 1 root root    0 2010-05-04 14:33 bugiganga.txt 
drwxr-xr-x 2 root root 4096 2010-05-04 17:31 Documentos 
-rw-r--r-- 1 root root    0 2010-05-04 17:30 organograma.odc
# chmod g+w bugiganga.txt
# ls -l

-rw-rw-r-- 1 root root    0 2010-05-04 14:33 bugiganga.txt 
drwxr-xr-x 2 root root 4096 2010-05-04 17:31 Documentos 
-rw-r--r-- 1 root root    0 2010-05-04 17:30 organograma.odc
Ex.2: Iremos agora remover direito de escrita para o grupo dono do arquivo bugiganga.txt.

# chmod g-w bugiganga.txt
# ls -l

-rw-r--r-- 1 root root    0 2010-05-04 14:33 bugiganga.txt 
drwxr-xr-x 2 root root 4096 2010-05-04 17:31 Documentos 
-rw-r--r-- 1 root root    0 2010-05-04 17:30 organograma.odc
Ex.3: Vamos incluir o direito de escrita para os "outros" no diretório "Documentos" de forma recursiva, isso significa que arquivos/diretórios abaixo do diretório Documentos irão receber direito de escrita para os "outros".

# chmod -R o+w Documentos
# ls -l

-rw-r--r-- 1 root root    0 2010-05-04 14:33 bugiganga.txt 
drwxr-xrwx 2 root root 4096 2010-05-04 17:31 Documentos 
-rw-r--r-- 1 root root    0 2010-05-04 17:30 organograma.odc
# ls -l Documentos/
-rw-r--rw- 1 root root 0 2010-05-04 17:31 contas_pagar.odc 
-rw-r--rw- 1 root root 0 2010-05-04 17:31 credores.xls
Ex.4: Usaremos um exemplo de notação octal. Faremos com que o arquivo organograma só tenha direto de leitura e escrita para o dono do arquivo, nesse caso o "root".

# chmod 600 organograma.odc
# ls -l

-rw-r--r-- 1 root root    0 2010-05-04 14:33 bugiganga.txt 
drwxr-xrwx 2 root root 4096 2010-05-04 17:31 Documentos 
-rw------- 1 root root    0 2010-05-04 17:30 organograma.odc
Como acabamos de ver, podemos modificar as permissões de arquivos/diretórios de diversas formas.  

Você deve estar se perguntando, qual será a melhor forma de mudarmos as permissões de arquivos e diretório? Senhores, isso é uma questão de adaptação, se você conseguir trabalhar melhor com a notação simbólica, esta será a melhor forma, mas se você se identificar melhor com a notação octal, ela será melhor.

Comando chgrp

Comando nativo do Unix é usado para modificar o grupo dono do arquivo/diretório. Hoje em dia não é muito mais utilizado, pois o comando chown além de mudar a propriedade do arquivo/diretório, também muda o grupo. Como iremos mostrar como um pouco mais adiante.

Sintaxe:

chgrp [opções] [grupo] [arquivo/diretório]

Opções: 
 Daremos alguns exemplos do uso do comando "chgrp". Continuaremos a usar a estrutura de arquivos/diretórios que foram criados anteriormente. Apenas iremos acrescentar dois grupos um chamado administracao e outro chamado contabilidade.

# groupadd administracao
# groupadd contabilidade


Agora vamos para dentro do diretório "/documentos" e vamos listar o conteúdo.

# ls -l
-rw-r--r-- 1 root root    0 2010-05-04 14:33 bugiganga.txt 
drwxr-xrwx 2 root root 4096 2010-05-04 17:31 Documentos 
-rw------- 1 root root    0 2010-05-04 17:30 organograma.odc
Ex.1: Vamos trocar o grupo (root) dono do arquivo bugiganga.txt para contabilidade. Estamos utilizando a opção "-v" para mostrar o arquivo que esta sendo modificado.

# chgrp -v contabilidade bugiganga.txt
changed group of `bugiganga.txt' to contabilidade

Ex2.: Agora iremos trocar o grupo (contabilidade) do arquivo bugiganga.txt para o grupo (administracao).

# chgrp administracao bugiganga.txt
# ls -l

drwxr-xrwx 2 root root          4096 2010-05-03 13:13 administracao 
-rw-r--rw- 1 root administracao    0 2010-05-03 11:07 bugiganga.txt 
-rw------- 1 root root             0 2010-05-03 13:11 organograma.odc
Ex3.: E por fim modificaremos o grupo administração para ser dono do diretório administracao.

# chgrp administracao administracao/
# ls -l

drwxr-xrwx 2 root administracao 4096 2010-05-03 13:13 administracao 
-rw-r--rw- 1 root administracao    0 2010-05-03 11:07 bugiganga.txt 
-rw------- 1 root root             0 2010-05-03 13:11 organograma.odc

Comando chown

Usado para modificar a propriedade de um arquivo/diretório.O interessante é que como mencionado anteriormente, ele tem a opção de modificar também o grupo proprietário da arquivo/diretório, conforme mostraremos mais adiante.

Sintaxe:

chown [opções] [dono:grupo] [arquivo/diretório]

Opções:
 Usando ainda a mesma árvore de diretórios criada para exemplos iremos demonstrar alguns exemplos do comando "chown". Antes de mais nada criaremos dois usuários (castro e pamela).

# useradd castro
# useradd pamela


Inicialmente vamos listar o conteúdo, para podermos ver como esta atualmente o diretório.

# ls -l
drwxr-xrwx 2 root administracao 4096 2010-05-03 13:13 administracao 
-rw-r--rw- 1 root administracao    0 2010-05-03 11:07 bugiganga.txt 
-rw------- 1 root root             0 2010-05-03 13:11 organograma.odc 
Ex1: Vamos passar a propriedade do arquivo organograma.odc para o usuário castro.

# chown castro organograma.odc
# ls -l

drwxr-xrwx 2 root   administracao 4096 2010-05-03 13:13 administracao 
-rw-r--rw- 1 root   administracao    0 2010-05-03 11:07 bugiganga.txt 
-rw------- 1 castro root             0 2010-05-03 13:11 organograma.odc
Ex2: Agora vamos além de mudar a propriedade do arquivo organograma.odc do usuário castro para o usuário pamela, passaremos o grupo contabilidade para o grupo dono do arquivo.

# chown pamela:contabilidade organograma.odc
# ls -l

drwxr-xrwx 2 root   administracao 4096 2010-05-03 13:13 administracao 
-rw-r--rw- 1 root   administracao    0 2010-05-03 11:07 bugiganga.txt 
-rw------- 1 pamela contabilidade    0 2010-05-03 13:11 organograma.odc

Conclusão

Espero que tenha conseguido passar como Gerenciar as permissões de arquivos/diretórios e como manipular suas propriedades. Temos que ter me mente que as fontes de informações do Linux devem sempre complementar os estudos de um bom administrador de sistemas.

Nos exemplos desse artigo, usamos apenas algumas opções que os comandos proporcionam. É importante usarmos as páginas de manuais dos comandos (páginas man).

Fonte: VivaoLinux

terça-feira, 27 de abril de 2010

VIM

VIM - Vi Improved

O Vim (Vi Improved) é uma versão mais poderosa e maior em termos de espaço em disco e requisitos de memória do editor de texto vi. Essa versão é mantida como software livre, com algumas cláusulas de Careware inclusas[1], e acompanha a maioria das distribuições Linux. Está disponível também para variantes *NIX, Windows, Amiga, OS/2 e Macintosh. O Vim foi criado por Bram Moolenaar.

Características

  • Seguindo o vi, o Vim é um editor modal no sentido de que as teclas do teclado têm diferentes funções em cada modo de operação. Por exemplo, boa parte dos comandos é digitada no modo Normal, e as operações de inserção de texto são feitas no modo de Inserção.
  • Suporte a expressões regulares em buscas, com várias extensões à sintaxe padrão de expressões regulares
  • Mapeamento de qualquer tecla do teclado
  • Destaque de sintaxe (com suporte a mais de 500 linguagens)
  • Comandos automáticos (a serem executados em certos eventos)
  • Corretor ortográfico ( versão 7.0+ )
  • Funciona tanto no console/terminal quanto em ambiente gráfico (gVim)
  • Absolutamente programável, via interfaces com interpretadores (Perl, Python, Ruby) ou via seu próprio interpretador
  • Vários temas de cores (colorschemes)
  • Totalmente configurável
  • Software livre, licensa GPL

Modo de Inserção e de comandos


Para identificar o modo (estado) do vim, basta visualizar o rodapé da tela. Para executar o vim, utilize:

$ vi => Abre o vim vazio, sem nenhum arquivo e exibe a tela de apresentação.
$ vi arquivo => Abre o arquivo de nome "arquivo".
$ vi arquivo + => Abre o arquivo de nome "arquivo", com o cursor no final do mesmo.
$ vi arquivo +10 => Abre o arquivo de nome "arquivo", com o cursor na linha 10.
$ vi arquivo +/Copag => Abre o arquivo de nome "arquivo", na primeira ocorrência da palavra "Copag".

Ao executar o vim, ele inicia diretamente em modo de comando. Para comprovar, é só olhar na última linha (rodapé) e não vai haver nada lá. Isso quer dizer que você não conseguirá escrever nada, pode digitar a vontade que só vai ouvir beeps. Para começar a escrever, pressione "i" em seu teclado. O vim entra em modo de inserção, que você comprova (como falado anteriormente) pelo rodapé da tela, onde fica a seguinte marcação:

- - -- INSERT --

Suponha que você já digitou o bastante, e quer salvar, por segurança. Pressione a tecla ESC para voltar em modo de comandos. E veja os comandos para salvar/sair:

:w => Salva o arquivo que está sendo editado no momento.
:q => Sai.
:wq => Salva e sai.
:x => Idem.
ZZ => Idem.
:w! => Salva forçado.
:q! => Sai forçado.
:wq! => Salva e sai forçado.

Então, você editou uma boa quantidade de textos e quer salvar:
:w

Agora, quer voltar a editar o texto:
i

Lembre que utilizando o "i" para inserção, a mesma se inicia inserindo texto antes do cursor.

Veja agora outros subcomandos de inserção de texto:

A => Insere o texto no fim da linha onde se encontra o cursor
o => Adiciona uma linha vazia abaixo da linha corrente
O => Adiciona uma linha vazia acima da linha corrente
Ctrl + h => Apaga último caracter à esquerda
Voltando ao modo de comando:
Veja agora subcomandos para movimentação pelo texto:
Ctrl + f => Passa para a tela seguinte.
Ctrl + b => Passa para a tela anterior.
H => Move o cursor para a primeira linha da tela.
M => Move o cursor para o meio da tela.
L => Move o cursor para a última linha da tela.
h => Move o cursor para caracter a esquerda.
j => Move o cursor para linha abaixo.
k => Move o cursor para linha acima.
l => Move o cursor para caracter a direita.
w => Move o cursor para o início da próxima palavra (não ignorando a pontuação).
W => Move o cursor para o início da próxima palavra (ignorando a pontuação).
b => Move o cursor para o início da palavra anterior (não ignorando a pontuação).
B => Move o cursor para o início da palavra anterior (ignorando a pontuação).
0 (zero) => Move o cursor para o início da linha corrente.
^ => Move o cursor para o primeiro caracter não branco da linha.
$ => Move o cursor para o fim da linha corrente.
nG => Move o cursor para a linha de número "n"
(susbstitua n pelo número da linha)..
G => Move o cursor para a última linha do arquivo.

Copiando e colando textos no vim (Utilizando o mouse)


Selecione o texto necessário com o botão esquerdo do mouse. Quando você for colar, saiba que o texto será colado a partir de onde se encontra o cursor (esse que aparece, às vezes piscando e às vezes não, quando você está digitando). Para colar, depois de ter selecionado o texto, você pode utilizar uma dessas opções:

1) Pressionando o botão direito do mouse;
2) Pressionando o botão direito + botão esquerdo juntos;
3) Pressionando o botão do meio do mouse (mouse de 3 botões);
Observação: Lembre-se que o vim deve estar no modo de inserção.

Usando o modo visual do vim


Entre no modo visual: v
Agora, utilize as teclas direcionais (setas) do teclado, para selecionar o texto desejado.
Pressione e cole, utilizando a tecla "p" (paste).
Veja agora como apagar um determinado texto:
Utilizando normalmente as teclas Backspace/Delete, ou entrando em modo visual (v) e pressionando a tecla Delete.
Você pode remover até o final de uma palavra, utilizando: dw
Pode também remover até o final de uma frase: d$

Desfazendo uma ação


É claro que você pode desfazer uma ação que você considera errado, ou que errou ao digitar o texto. É só utilizar: u
Se você precisar voltar o texto na tela, utilize as teclas Ctrl + r.

Subcomandos para localização de texto


/palavra => Procura pela palavra ou caracter acima ou abaixo do texto.
?palavra => Move para a ocorrência anterior da palavra (para repetir a busca use "n").
n => Repete o último comando utilizando / ou ?.
N => Repete o último comando / ou ? ao contrário (baixo para cima).
Ctrl+g => Mostra o nome do arquivo, o número da linha corrente e o total de linhas.

Mais opções para remoção dos caracteres


x => Apaga o caracter onde o cursor estiver.
dd => Apaga a linha inteira onde o cursor estive
D => Apaga a linha a partir da posição do cursor até o fim.
J => Une a linha corrente à próxima.
:5dd => Removeas próximas 7 linhas a partir da posição do atual do cursor (qualquer número).

Mais para copiar e colar...


:yy => Copia a linha onde o cursor se encontra.
:5yy => Copia as próximas 5 linhas a partir da posição atual do cursor.
:p => Cola o que foi copiado na linha abaixo do cursor atual.

Opções para substituições de textos


rCARACTER => Substitui o caracter onde o cursor se encontra pelo caracter especificado em CARACTER.
RTEXTO => Substitui o texto corrente pelo texto digitado (sobrepõe).
cw => Remove a palavra corrente para substituição.
cc => Remove a linha corrente para substituição.
C => Substitui o restante da linha corrente, esperando o texto logo após o comando.
J => Une a linha corrente à próxima.
:s/velho/novo => Substitui a primeira ocorrência de "velho" por "novo" na linha corrente.
:% s/velho/novo => Substitui em todo o arquivo (%) a primeira ocorrência de "velho" por "novo" em cada linha.
:% s/velho/novo/g => Substitui em todo o arquivo (%), todas (g) as ocorrências de "velho" por "novo".
:% s/velho/novo/gc => Igual ao anterior, mas pedindo confirmação para cada substituição.
:% s/^String[0-9]//gc => Expressões regulares também funcionam, como no sed.
:% s/./\u&/gc => Converte para maiúsculas (\u) o primeiro caracter (.) de cada linha.

Abreviações


:ab => Mostra todas as abbr.
:abc[lear] => Remove todos.
:iab => Apenas para modo de inserção.
:iabc[lear] => Tira todos de inserção.
:cab => Apenas p/modo de comando ( : ).
:cabc[lear] => Tira todos os modos de comando.
:una vc => Tira ab para vc.
Observação: Pontuação, espaço ou o ENTER, disparam a expansão de uma abreviação. Porém, Ctrl+] também pode ser usado, para expandir sem adicionar caracteres.

Opções para o comando SET



:set
autowrite aw => Salva a cada alteração.
backspace bs => Comportamento backspace (1 ou 2).
errorbell eb => Campainha de erro.
expandtab et => Troca tab por espacos.
fileformat=dos ff => Converte o arquivo para DOS.
hidden hid => Preserva o buffer.
hlsearch hls => Elumina a última procura.
ignorecase ic => Case insensitive na busca.
incsearch is => Ilumina procura enquanto digita.
laststatus=2 => Mostra linha de estado.
lazyredraw lz => Não redesenha em macros.
lines=N => Múmero de linhas na tela.
magic => Usar mágicas na procura de padrões.
number nu => Mostra núm da linha.
report=N => Mostra aviso quando N linhas mudaram (0=sempre).
showcmd => Mostra o comando que se está fazendo.
showmatch sm => Mostra o casamento de {},[],().
smartcase scs => Assume "noic" quando tiver maiúsculas.
textwidth=N => Quebra de linha do texto.
undolevels ul=N => Guarde os N últimos comandos para desfazer (padrão=1000).
vb t_vb= => Retira o "beep" de erro.

Invertendo Maiúsculas e Minuúculas


5~ => Inverte os 5 próximos caracteres.
g~$ => Inverte todos os caracteres até o fim da linha.
seleciona, u => Converte para minúsculas.
seleciona, U => Converte para maiúsculas.
seleciona, ~ => Inverte.
Observação: Onde está escrito "seleciona", é para fazer utilizando o modo visual (v).
Agora veja como definir coluna de quebra de linha (problema que eu tive quando iniciei no aprendizado do vim):
:set textwidth=N
Se você já estiver num arquivo pronto:
:set wm=5 => O número 5 aqui são as colunas que serão "cortadas".
gqG => Até o final do arquivo.

Vamos ver agora o que podemos fazer pressionando a tecla "Ctrl". É claro que é segurando Ctrl + . No modo de COMANDO:

A => Incrementa um número (Add)
X => Decrementa um número
S => ScrollLock
L => Redesenha tela
V => Modo visual (Visual Vertical)
G => Status do arquivo
M => Início da próxima linha
E => Linha abaixo sem mover cursor
Y => Linha acima sem mover cursor
N => Próxima linha (Next)
P => Linha anterior (Previous)
F => PageDown (Forward)
B => PageUp (Backyard)
U => PageUp / 2 (Up)
D => PageDown / 2 (Down)
Agora, no modo de INSERÇÃO:
A => Insere o último texto inserido
I => TAB
S => ScrollLock
H => BackSpace
T => 2 tab's no início da linha (Two Tabs)
V => Anula expansão do próximo caractere
J => Enter - quebra de linha
M => Enter - quebra de linha
L => Redesenha tela
R => Insere conteúdo do registrador [a-z] (Veja abaixo)
K => Insere um dígrafo (Veja abaixo)
N => Procura palavra no texto atual (Next)
P => Procura palavra no texto atual (Previous)
Y => Copia caractere que está acima (Yank)
Veja os caracteres especiais:
ga => Mostra o código da letra sobre o cursor.
:dig => Mostra todos os dígrafos disponíveis (tabela).
Exemplos: Para fazer um º, use Ctrl+K,-,o ("Ctrl"+"K"+"-"+"o").
Para fazer um ½, use Ctrl+K,1,2 ("Ctrl"+"K"+"1"+"2").

Trabalhando com arquivos e janelas múltiplas


Você pode abrir múltiplos arquivos, por exemplo:
$ vim arquivo1 arquivo2
E pode alternar entre as janelas. Veja:
:wn => Grava o atual e vai ao próximo.
:wN => Grava o atual e vai ao anterior.
:args => Mostra todos os arquivos atuais.
:qa => Sai de todas as janelas de uma vez.
:all => Abre todos os arquivos em janelas individuais.
Tecla chave das janelas = Crtl+W
j, seta abaixo => Move para janela abaixo.
k, seta acima => Move para janela acima.
o => Apenas esta janela, fecha todas as outras (Only).
+, - => Muda o tamanho da janela.
= => Deixa todas as janelas com tamanhos iguais.


Os Registradores


"[a-z] => Use o registrador [a-z] para o próximo delete, cópia ou cola.
:reg => Mostra o conteúdo de todos os registradores.
:reg [a-z] => Mostra o conteúdo do registradores [a-z].
Observação: O [a-z] pode ser: 0-9a-z%#:.-="
Marcas:
m[a-z] => Marca em [a-z] a posição corrente do cursor.
`[a-z] => Vai até a marca [a-z].
`` => Vai até a posição anterior ao último pulo (alterna).
:marks => Mostra as marcas ativas.


Fazendo gravação de sequência de comandos


q[a-z] => Inicia a gravação de uma seqüência no registrador [a-z].
q[A-Z] => Inicia a gravação, adicionando no registrador [a-z].
q => Pára a gravação.
@[a-z] => Executa a seqüência do registrador [a-z] (5 vezes? 5@a)

Dica: Pode-se colocar o @[a-z] dentro da própria gravação do q[a-z]! Assim ele é executado recursivamente. Muito útil quando há uma procura de padrões na gravação. faz para todas as ocorrências.

Mapeamentos


:map :r!date => Mapeamento em modo de comando.
:imap :r!date => Mapeamento em modo de inserção.
:cmap r!date => Mapeamento em modo linha de comando.
:vmap :r!date => Mapeamento em modo visual.
Exemplos:
"html: negrito no trecho selecionado
:vmap d`pa # html: negrito no trecho selecionado
"liga/desliga autoIndent
:map ,si :set ai!:echo "autoIndent="&ai
"mostrar os espaços em branco no fim das linhas
:map / *$^M
Através dos mapeamentos é possível "encurtar" comandos, ou seja, abreviá-los. Conheça as sintaxes:
Comment => Ciano
Constant => Roxo
Identifier => Ciano
PreProc => Azul escuro
Special => Vermelho
Statement => Amarelo
String => Roxo
Type => Verde
Todo => Preto, fundo marrom
Error => Branco, fundo vermelho
Ignore => Preto, fundo preto! - esconde

Utilizando o recurso de expandtab


Mas, o que isso faz? Transforma todos os TABs em espaços. Podemos ativar dentro do próprio vim, utilizando o comando:
:set expandtab
Para desabilitar:
:set noexpandtab
Podemos colocar também no arquivo ~/.vimrc a seguinte linha:
set expandtab
O arquivo ~/.vimrc pode ser usado para muitas configurações, e essa é uma delas. Existe ainda o arquivo ~/.exrc, mas não entraremos em detalhes.
Podemos incluir a saída de um comando no vim, utilizando:
:r!comando
Por exemplo:
:r!rpm -q kernel
Incluiria o seguinte resultado, dentro do seu texto (isso na minha máquina):
kernel-2.4.18-3
Dicas diversas do vim:
:xit => Igual :wq, mas só grava se tiver sido alterado algo no arquivo.
:map N_ARQ ^R=expand("%:t:r")^M
Imprime no arquivo o próprio nome do arquivo editado quando N_ARQ é digitado.
Agora, veja como alinhar o texto:
:left
:right
:center

E para fazer uma busca de 2 palavras ao mesmo tempo:
/palavra1\|palavra2

Fonte: Infowester

    terça-feira, 6 de abril de 2010

    Samba - Listando máquinas através de redes roteadas

    Samba em 3 redes roteadas (VPN)

    Servidor (smb.conf)
    [global]
      workgroup = INTERNET         // Nome do grupo de trabalho
      server string = kyo                  //  Nome da maquina na rede
      interfaces = 192.168.0.255/255.255.255.0 192.168.1.255/255.255.255.0   192.168.2.255/255.255.255.0       // Interligando 3 redes
      name resolve order = wins bcast
      os level = 64
      preferred master = Yes
      domain master = Yes
      wins support = Yes
      remote announce = 192.168.0.255/INTERNET 192.168.1.255/INTERNET 192.168.2.255/INTERNET
      remote browse sync = 192.168.0.255 192.168.1.255 192.168.2.255  // ips das 3 redes

    Filial 02 (smb.conf)
    [global]
      workgroup = INTERNET
      netbios name = slackware01   
      server string = Samba slackware01
      interfaces = 192.168.2.0/24, eth1, 127.0.0.0/8
      os level = 32
      preferred master = Yes
      domain master = No
      dns proxy = No
      wins server = 192.168.0.1        // IP do servidor Samba (Matriz)

    Filial 03 (smb.conf)
    [global]
      workgroup = INTERNET
      netbios name = slackware03   
      server string = Samba slackware03
      interfaces = 192.168.3.0/24, eth1, 127.0.0.0/8
      os level = 32
      preferred master = Yes
      domain master = No
      dns proxy = No
      wins server = 192.168.0.1        // IP do servidor Samba (Matriz)
      

    Squid - Libera range para acesso ao proxy.

    Libera uma range de IP's da rede interna para acesso ao proxy. (Acesso Total)

    acl faixa_adm src 192.168.0.10-192.168.0.50
    http_access allow faixa_adm all

    Liberado de: 192.168.0.10 à 192.168.0.50
     

    Squid - Libera Acesso Específico para um Usuário

    Proxy Transparente
    Libera Acesso Específico para um Usuário.

    acl sites_juliano url_regex -i "/usr/local/squid/etc/sites_juliano.txt"
    acl juliano src 192.168.1.13
    http_access allow sites_juliano juliano
    http_access deny juliano all


    Proxy Autenticado
    Libera Acesso Específico para um Usuário.

    acl sites_juliano url_regex -i "/usr/local/squid/etc/sites_juliano.txt"
    acl juliano proxy_auth juliano
    http_access allow sites_juliano juliano
    http_access deny juliano all


    sites_juliano.txt: Contem todos os sites que o usuario juliano pode acessar.

    Tanto para proxy transparente como para autenticado primeiro se libera os sites necessários e depois o restante é bloqueado.
     

    Squid - Restringindo o horário de acesso

    Aqui é onde nós citamos outro tipo interessante de controle que nós podemos implementar em um escritório ou em um meio acadêmico: o controle por horário.

    Para nós fazermos isto, nós fazemos o uso da ACL do tipo time.

    acl horariopermitido time MTWHF 08:00-18:00
    http_access deny !horariopermitido

    Interpretando a regra fica assim: Ele vai negar o uso do proxy em todos os horários, COM EXCESSÃO do horário especificado na ACL horariopermitido.

    O "MTWHF" na frente da ACL especifica os dias da semana conforme esta tabela:

      S - Sunday (Domingo)M - Monday (Segunda)T - Tuesday (Terça)W - Wednesday (Quarta)H - Thursday (Quinta)F - Friday (Sexta)A - Saturday (Sábado) 
       

    Squid - Bloqueando extensões e downloads

    Muitas pessoas se infectam com vírus contidos em arquivos de extensões conhecidas por conter programas maliciosos, como o .bat o .pif e o .scr.

    Mas por incrível que pareça, você pode bloquear extensões que os seus usuários baixam no computador por meio de HTTP ou de FTP e de quaisquer outros protocolos que o Squid suporte, fazendo os seguintes passos:

    touch /usr/local/squid/etc/extensoes.txt
    chmod 755 /usr/local/squid/etc/extensoes.txt

    Feito isto, você deve escrever as extensões que você quer bloquear da seguinte maneira no arquivo extensoes.txt.

    \.com$
    \.pif$
    \.bat$
    \.src$
    \.zip$
    \.exe$

    NOTA: O "\" é um eliminador de metacaracteres e serve para cancelar a função do ".". Já o "$" serve para que seja analizado até o final de string.

    Agora nós vamos adicionar a ACL no Squid que vai bloquear as extensões efetivamente, juntamente com o seu http_access:

    acl extensoes urlpath_regex -i "/usr/local/squid/etc/extensoes.txt"
    http_access deny extensoes all
     

    Squid - Liberando acessos (sites)

    Primeiro criamos o arquivo texto com a  lista de sites e damos à ele permissão de leitura:

    touch /usr/local/squid/etc/liberados.txt
    chmod 755 /usr/local/squid/etc/liberados.txt

    Nele insira todas as sites que serão liberados. Adicione um site por linha.

    Após, crie a ACL da seguinte maneira:
    acl liberados url_regex -i "/usr/local/squid/etc/liberados.txt"

    O parâmetro "-i" serve para que o Squid não distingua entre maiúsculas ou minúsculas.

    E libere o acesso com o http_access:
    http_access allow liberados all
      

    IPTables - Criando chains Personalizadas.

    Script que permite acesso total a rede.

    hostsliberados.sh 

    for x in `cat /root/hostsliberados.txt`
       do
            iptables -t nat -A preHostsLiberados -s $x -j ACCEPT
            iptables -t nat -A posHostsLiberados -s $x -j MASQUERADE
       done


    hostsliberados.txt (Ips que serão liberados)
    192.168.0.2
    192.168.0.4
    192.168.0.6

    Regras
    iptables -t nat -N preHostsLiberados
    iptables -t nat -N posHostsLiberados
    /root/hostsliberados.sh

    iptables -t nat -A PREROUTING -j preHostsLiberados
    iptables -t nat -A POSTROUTING -j posHostsLiberados
      

    IPTables - Redirecionar conexões

    Regra redireciona conexões que chegam na porta 8000 do servidor para a maquina 192.168.0.100 na porta 22.

    iptables -t nat -A PREROUTING -p tcp --dport 8000 -j DNAT --to 192.168.0.100:22
     

    IPTables - Criando regras com mac address

    O IPTABLES é uma ferramenta de edição da tabela de filtragem de pacotes, ou seja, com ele você é capaz de analisar o cabeçalho (header) e tomar decisões sobre os destinos destes pacotes.

    O módulo mac serve para conferir com o endereço Ethernet dos pacotes de origem. Somente faz sentido se usado nos chains de PREROUTING (da tabela nat) ou INPUT (da tabela filter). Aceita como argumento a opção --mac-source endereço. O símbolo "!" pode ser usado para especificar uma exceção.

    iptables -A FORWARD -s 192.168.0.2 -m mac --mac-source xx:xx:xx:xx -j DROP

    Bloqueia o acesso da maquina, 192.168.0.2.
      

    segunda-feira, 5 de abril de 2010

    Samba - Compartilhando Arquivos.

    SAMBA

    O SAMBA é um servidor e conjunto de ferramentas que permite que máquinas Linux e Windows se comuniquem entre si, compartilhando serviços (arquivos, diretório, impressão) através do protocolo SMB (Server Message Block)/CIFS (Common Internet File System), equivalentes a implementação NetBEUI no Windows. O SAMBA é uma das soluções em ambiente UNIX capaz de interligar redes heterogênea.

    Abaixo uma configuração do samba onde:

    \\servidor
    -programas (Acesso apenas a leitura)
    -musicas (Acesso Liberado)
    -documentos (Solicitado um usuário e senha)

    [global]
    workgroup = (seu_grupo_de_trabalho)
    netbios name = servidor
    security = user
    smb passwd file = /etc/samba/smbpasswd
    encrypt passwords = yes
    log level = 3
    syslog = 1
    log file = /var/log/samba/log.%m
    os level = 99

    [programas]
    comment = Troca de Arquivos
    path = /home/programas
    read only = yes
    writable = no

    [musicas]
    comment = Musicas
    path = /home/musicas
    read only = no
    writable = yes
    guest ok = yes
    browseable = yes
    create mask = 0777

    [documentos]
    comment = Documentos
    path = /home/documentos
    read only = no
    writable = yes
    guest ok = yes
    browseable = yes
    create mask = 0777
    valid users = user1,user2,user3 #usuários que podem gravar.

    E se preciso verifique as permissões de cada diretório:

    ls -ialh /home/convidados
    ls -ialh /home/documentos

    Se necessário:  chmod a+wrtx /home/documentos
      

    quinta-feira, 25 de março de 2010

    Instalação do ZABBIX

    O Zabbix é uma ferramenta com o objetivo de monitorar a performance e a disponibilidade de uma rede ou serviço, com suporte a banco de dados e interface web. 

    Para a instalação do ZABBIX é necessário:
    • Apache;
    • MySQL (ou PostgreSQL);
    • MySQL ou PostgreSQL headers e libraries;
    • PHP4;
    • PHP GD module;
    • PHP 4.0 MySQL ou PostgreSQL module;
    • GNU Make;
    • NET-SNMP (ou UCD-SNMP) library e header files.  

    Obtendo o Zabbix.
    Antes de prosseguir, visite o site ZABBIX e verifique se existe alguma versão mais nova do mesmo. O Zabbix está disponível para o download em:
    Versão instalada nesse artigo: zabbix-1.8.1.tar.gz  

    Descompactando e Instalando (SERVIDOR). 
    cd /usr/src/
    tar xvfz zabbix-1.8.1.tar.gz
    cd zabbix-1.8.1
    ./configure --with-mysql --with-net-snmp --enable-server --enable-agent

    make install
    mkdir /etc/zabbix
    cp misc/conf/zabbix_server.conf /etc/zabbix/
    cp misc/conf/zabbix_agentd.conf /etc/zabbix/
    chown zabbix:zabbix /etc/zabbix/ -R


    Configurando o Banco de Dados. 
    mysql -u root -p
    mysql> create database zabbix;
    mysql> grant ALL on zabbix.* to zabbix@'localhost' identified by 'digite aqui sua senha';
    Query OK, 0 rows affected (0.02 sec)
    cd create/schema/
    cat mysql.sql |mysql -u zabbix -p zabbix
    Enter password:
    cat ../data/data.sql |mysql -u zabbix -p zabbix
    Enter password:
    cat ../data/images_mysql.sql |mysql -u zabbix -p zabbix
    Enter password:



    Configurando os Daemons zabbix_server e zabbix_agentd 
    Tratando-se de uma instalação pequena, não é necessário nenhum “tweaking” para ajustes de performance, nem no server nem no agentd. 

    vi /etc/zabbix/zabbix_agentd.conf

    Neste arquivo, a unica linha que precisa ser configurada neste momento é: 

    server=127.0.0.1

    Esta linha qual o IP de origem do monitoramento. (servidor). Como usaremos um agente e um servidor no mesmo computador, vamos colocar nosso próprio IP como Server.

    Ajustando as configurações do banco de dados.

    vi /etc/zabbix/zabbix_server.conf
       DBHost=localhost    DBName=zabbix   DBUser=zabbix     DBPassword=Sua Senha   

    Ok, agora é a hora da verdade, vamos verificar se o agente e o servidor rodam corretamente:
     
    zabbix_server
    zabbix_agentd


    Após executar estes dois comandos, digite: 

    ps -aux |grep zabbix 

    Ele deve mostrar várias instancias do zabbix_agentd e do zabbix_server rodando.
    .