Terça-feira, Outubro 27, 2009

Latinoware 2009

E um ano depois, estou eu aqui novamente para falar sobre o Latinoware 2009, infelizmente esse ano o nível foi baixo, se comparado com o de 2008, houveram palestras muito boas, mas nem todas.
Pelo menos compras e diversão houveram a rodo!!! Haha, comprei um filtro de ar esportivo de duplo fluxo pro polão, tá bonito o barulho do guri, perfuminho, pra fica cheiroso entre outras coisas.
Dessa vez tivemos a oportunidade de ir tomar uma beer com O cara do software livre, sim, Mr. Jon 'Maddog' Hall



E a balada na Ono, como já é default, muito boa por sinal!!! Ví a galera curtir a rodo também, e claro me incluo nessa! haha

Bom as palestras que assisti:

  • Segurança em Redes WiFi;
  • Redes Mesh;
  • Puppet - Automatização e Gerenciamento de configurações Linux/Unix;
  • 40 Anos da Internet, Unix, Linus Torvalds e a barba do Maddog - Peter H. Salus;
  • OpenGOP - Gestão de DataCenter;
  • Hardening Linux;
  • Forense Linux;
  • Xen;
É isso aí, espero que no próximo ano seja melhor o evento, mas mesmo assim estava legal, e pretendo levar algum conteúdo para o mesmo no próximo ano, quem sabe uma palestra sobre meu TCC, veremos!

Forte abraço!

Read more!

Quarta-feira, Novembro 05, 2008

Latinoware 2008

Olá pessoal!

Fui ao Latinoware, o evento foi muito bom! Conheci novas tecnologias, novas soluções, muitas pessoas (nerds) hehe, e até ícones da comunidade que se parecem com nosso querido papai noel! Sim Jon "Maddog" Hal, apelidado carinhosamente por Santaclaus por mim e por um amigo hahaha, ele não achou ruim e retrucou "Free Software! Ho Ho Ho!" O conheci procurando um HotSpot pra ver meus e-mails, passei vergonha por não ter tido tempo de por linux no notebook antes de ir para o evento, sentado ao lado do cara da Linux International, estava eu bootando meu rWindows XP (podia ser pior, poderia ainda estar com rWindows Vista que veio nele ¬¬)
hahahahaha é um cara muito gente boa esse Maddog, Segue uma foto:


Algumas palestras interessantes que assisti:
1. Elastix Libertad para Comunicarse (sim espanhol)
2. Forense Computacional em Linux
3. LessWatts: Economia de Energia em Linux
4. OpenSource: exemplo prático do Modelo de open innovation
5. Disc-OS: Solução OpenSource para VoIP
6. Modelo em cascata para gerneciamento de Sistemas
7. Asterisk: Solução corporativa de Fax
8. Multiterminais e Rede Paraná Digital
9. Asterisk com Java
10. Gestão Operacional de DataCenter em software livre
11. Gerenciamento da Rede da CELEPAR com Software Livre
12. Software Livre em ambiente de alta criticidade
13. BROffice.Org 3.0
14. Técnicas Anti-Forense


Isso tudo foi muito interessante, fora os eventos, ver a barragem ser iluminada à noite sincronizada a uma música, show! E show denovo na sexta feira para o pessoal do Latinoware com Bikini Cavadão, haha, muito legal, boas histórias pra se contar e rir (muito) ! AUHEUAE

Isso aí pessoal, uma experiência positiva, apesar de alguns contra-tempos (ônibus pinga-pinga na ida e na volta e um tiozão fedendo cachaça! Entre outros não tão engraçados).

E ano que vem se tudo der certo estaremos lá novamente, parabéns ao pessoal do evento pela organização e nível das palestras (pelo menos da maioria das que assisti).

Forte Abraço

Read more!

Quarta-feira, Julho 09, 2008

Banda Cash In Flowers

Hi everybody, putz muito tempo sem postar absolutamente nada, agora de férias da facul (graças a Deus), especialmente hoje acordei bem, e conversando com um IRMÃO meu chamado Nelson Jr. , ele puto comigo porque não fui em nenhum show do Cash In Flowers (banda dele), realmente faltei na obrigação de amigo, mas meu amigo, pelo menos a publicidade eu faço isso eu juro! hehehe

E como estou fazendo a publicidade então gente, se quiserem ouvir música de qualidade sigam esse link:

http://www.lastfm.pt/music/Cash+In+Flowers/Ellen+%28single%29

é o primeiro cd dessa galera, inclusive enquanto escrevo ouço a música Ellen (pela segunda vez seguida).

Nerso! meu amigo aquele abraço, muito sucesso pra vc e pra banda, vc sabe que pode contar sempre com esse camarada aqui!

abaixo a capa do album e a imagem do cd:



Read more!

Sexta-feira, Outubro 26, 2007

Brincando com Squid Autenticando no MySQL (Linux)

Olá povo!

Mais uma vez aqui para mais uma aventurazinha =P

Na faculdade surgiu um trabalho de final de ano que agruparia várias matérias num único projeto, chamado Projeto Integrador, o qual consistia em fazer um autenticador (helper) para o Squid em C para autenticar no MySQL.
Me baseando num outro projeto[1] que já existia. Como era pra faculdade eu dei uma melhorada na sintaxe e deixei ele verboso pois o professor de C queria um log bem bonito (rs).

How it works:

1. Instalando o Squid, MySQL, GCC e libs.
2. Source do Helper.
3. Compilando o Helper.
4. Estrutura do banco Squid.
5. Configurando o Squid.
6. Inserindo e testando usuários.
7. Considerações.
8. Links



1. Instalando o SQUID.

Na faculdade os professores pediram para usar o Debian (apesar de gostar mais do FreeBSD), os caras mandam (rs). Depois do linux instalado na máquina e também


# apt-get install squid
# apt-get install mysql-server
# apt-get install libmysqlclient15-dev
# apt-get install libmysqlclient15off
# apt-get install gcc


2. Source do Helper



#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>

#define HOST "localhost"
#define USER "root"
#define PASS "root"
#define DB "squid"

#define TAB "usuarios"
#define USER_TAB "login"
#define PASS_TAB "senha"
#define ACT_TAB "status"

main() {
char query[255], *senha, *user;;
MYSQL_RES *resp;
MYSQL conexao;
FILE *log;
char buffer[255];
int res;

if((log=fopen("/var/log/mysql_auth.log","a")) == NULL ) {
(void)printf("ERR\n");
}
/* joga a saida pro standart out pro squid ler */
if( (setvbuf(stdout, NULL, _IOLBF, 0)) != 0 ) {
return;
}

mysql_init(&conexao);

while(1) {
if((log=fopen("/var/log/mysql_auth.log","a")) == NULL ) {
(void)printf("ERR\n");
}
if(mysql_real_connect(&conexao, HOST,USER,PASS,DB,0,NULL,0)) {
if((fgets(buffer, 255, stdin)) == NULL ) {
break;
}
/* encontra a quebra de linha e aponta a senha */
if((senha = strchr(buffer, '\n')) != NULL ) {
*senha = '\0';
}

if((senha = strchr(buffer, ' ')) == NULL ) {
(void) printf("ERR\n");
fprintf(log,"Senha vazia\n");
}
*senha++='\0';

sprintf(query, "SELECT " USER_TAB " FROM " TAB " WHERE " USER_TAB "='%s' AND " PASS_TAB "=PASSWORD('%s') AND " ACT_TAB "='1'",buffer, senha);

fprintf(log,"Conectado ao banco\n");
if((res = mysql_query(&conexao, query)) == 0) {
fprintf(log,"Select Efetuado com Sucesso:\n %s\n", query);
resp = mysql_store_result(&conexao);
fprintf(log,"resposta da consulta: %i\n", resp);
} else {
(void) printf("ERR\n");
fprintf(log,"Erro %d: %s\n", mysql_errno(&conexao),mysql_error(&conexao));
continue;
}

if(resp -> row_count != 0) { // verifica se o objeto row_count dentro de resp eh diferente de zero pra responder
(void) printf("OK\n");
fprintf(log,"Usuário %s login: OK\n",buffer);
mysql_free_result(resp);
mysql_close(&conexao);
} else {
(void) printf("ERR\n");
fprintf(log,"Usuário %s login : Denied\n", buffer);
}
fclose(log);
exit(0);

} else {
(void) printf("ERR\n");
fprintf(log,"Erro %d: %s\n", mysql_errno(&conexao),mysql_error(&conexao));
}
}
}



Porém como o blogspot não respeita identação ¬¬ está tudo fora do lugar. Caso queiram baixem o fonte em http://neo.bs2.com.br/integrador/autenticador.c

3. Compilando o helper

É muito simples:

# gcc -l mysqlclient autenticador.c -o autenticador

mova-o para uma pasta onde o squid tem acesso ex.: /etc/squid/

4. Estrutura do banco MySQL para o Squid:



CREATE DATABASE IF NOT EXISTS squid;
USE squid;
DROP TABLE IF EXISTS `usuarios`;
CREATE TABLE `usuarios` (
`login` varchar(40) NOT NULL,
`senha` varchar(255) NOT NULL,
`status` int(11) NOT NULL default '1',
UNIQUE KEY `login` (`login`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


Salve-o como banco.sql.
Insira-o no banco com o comando:


# mysql -uroot -proot -e"source banco.sql"


5. Configurando o Squid.

Tomando como padrão que a sua rede seja 192.168.0.0, será necessário colocar as seguintes linhas no squid.conf



auth_param basic program "/etc/squid/autenticador"
auth_param basic realm "Proxy - Digite usuário/senha"
auth_param basic children 5
auth_param basic casesensitive off

acl senha proxy_auth REQUIRED
acl rede src 192.168.0.0./24

http_access allow rede senha


6. Inserindo e testando usuários.

Vamos inserir um usuário teste:


# mysql -uroot -proot squid
> INSERT INTO usuarios VALUES ('teste',PASSWORD('teste'),1);
> QUIT


Crie o arquivo de LOG e dê permissão para que o squid grave nele


# touch /var/log/mysql_auth.log
# chmod 777 /var/log/mysql_auth.log



Inicialize o SQUID:


# /etc/init.d/squid start


Configure seu navegador com o IP e porta do proxy e faça o teste.
No banco se você quiser apenas desativar um usuário sem deletá-lo basta trocar o valor no campo status para 0 (zero).

Facilitei a sua vida? esse software está sobre a Licensa BeerWare... ou seja me paga uma cerveja =]

7. Considerações

Como é um trabalho para a faculdade achei interessante documentar, apesar de não ter tido tempo de escrever este artigo antes de entregar (pois, poderia usá-lo no trabalho), foi bacana desenvolver isso.

Espero que ajude outras pessoas também, que precisem de uma solução como esta onde precisa-se buscar os usuários do squid no banco MySQL.

8. Links
[1] http://www.devet.org/squid/proxy_auth/

Read more!

Sexta-feira, Agosto 24, 2007

FreeBSD FAMP Server with Pure-FTPd in MySQL

Neste howto eu quero cobrir a instalação completa de um servdidor FAMP ( FreeBSD+Apache+MySQL+PHP) com Pure-FTPd autenticando no MySQL.
Visto que em muitas empresas se vê necessidade de hospedagem local, não é a grande maioria, pois há várias empresas especializadas em WebHosting como a empresa na qual eu trabalho, que têm custos benefícios ótimos. Porém para quem quer "meter a mão na massa" segue abaixo a "brincadeira":


Hora de Diversão:

1. Instalando FreeBSD
1.1 Atualizando o FreeBSD
2. Instalando Apache
2.1 Configurando Apache
3. Instalando PHP
3.1 Instalando extensões do PHP:
4. Instalando MySQL
4.1 Configurando MySQL
5. Instalando Pure-FTPd
5.1 Configurando o Pure-FTPd com MySQL
5.1.1 Criando Base de Usuários de FTP no MySQL
5.1.2 Configurando o Pure-FTPd efetivamente.
6. Levantando Serviços.
7. Conclusão
8. Referências.



1. Instalando FreeBSD:

Faça uma instalação básica do FreeBSD (nesta parte serei bem genérico):

boote com o cd do FreeBSD particione da maneira que lhe convier, instale com a opção 'minimal' depois adicione o 'src' (all) de preferência, adicione também o man, não é necessário o ports nem o X.

Após instalação ser completada, vamos a alguns ajustes:

Primeiro Baixando PORTS atualizado:


# portsnap fetch extract


depois de completa a operação:


# cd /usr/ports/net/csup && make install clean && rehash


isso para instalar o csup, utilitário/cliente de cvs para atualizarmos os sources do FreeBSD.

1.1 Atualizando o FreeBSD:

Após termos os pré-requisitos necessários para a atualização do sistema vamos prosseguir com ela:

primeiro é necessário criar o arquivo de configuração de onde o csup irá tirar as informações para baixar os sources do sistema


# vi /usr/local/etc/csup.conf


insira as seguintes linhas:

#####################################
*default host=cvsup3.br.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_6
*default delete use-rel-suffix

src-all

*default tag=.
######################################


Salve e feche.

Agora vamos executar o csup para que baixe os sources atualizados:


# csup -g -L 2 /usr/local/etc/csup.conf


Após baixados os sources vamo a atualização própriamente dita:


# cd /usr/src

Se você estiver compilando de uma máquina potente utilize essa sintaxe:


# make -s -j4 buildworld


Caso não apenas retire o argumento '-j4', pois ele abre multiplos workers para compilar
Enfim esse comando irá preparar/compilar todos os binários do sistema.

Após isso será necessário compilar o Kernel:
Isso irá compilar o kernel atualizado, você pode tunnar o kernel, mas isso eu não irei cobrir aqui:


# make -s -j4 buildkernel KERNCONF=GENERIC


Instalando novo Kernel

# make -s installkernel KERNCONF=GENERIC

Instalando binários que foram compilados anteriormente

# mergemaster -p
# make -s TMPDIR=/var/tmp installworld


Agora iremos fazer um MERGE dos arquivos de configuração novos com os antigos (CUIDADO NESTE MOMENTO CASO JÁ TENHA EFETUADO ALGUMA MUDANÇA NOS SEUS ARQUIVOS DE CONFIGURAÇÃO DO /etc FAÇA UM BACKUP):


# mergemaster -Pi
# reboot


Pronto, sistema atualizado.



2. Instalando Apache:

Vamos instalar o Apache do PORTS:

Entrar na pasta do Apache no ports, manda compilar com modulos SSL/Proxy/MPM e instalar.


# cd /usr/ports/www/apache22
# make WITH_PROXY_MODULES=yes WITH_SSL_MODULES=yes WITH_MPM_MODULES=yes install clean && rehash


Coloque-o para inicializar no boot

# echo 'apache22_enable="YES"' >> /etc/rc.conf


Pronto Apache instalado.

2.1 Configurando Apache:

Edite o arquivo /usr/local/etc/apache22/httpd.conf


#################################################

ServerRoot "/usr/local"


Timeout 300

KeepAlive Off
#MaxKeepAliveRequests 5
#KeepAliveTimeout 5


ServerLimit 500



PidFile /var/run/httpd.pid




LockFile /var/log/accept.lock




StartServers 5
MinSpareServers 5
MaxSpareServers 20
MaxClients 150
MaxRequestsPerChild 0



Listen 80


LoadModule authn_file_module libexec/apache22/mod_authn_file.so
LoadModule authn_dbm_module libexec/apache22/mod_authn_dbm.so
LoadModule authn_anon_module libexec/apache22/mod_authn_anon.so
LoadModule authn_default_module libexec/apache22/mod_authn_default.so
LoadModule authn_alias_module libexec/apache22/mod_authn_alias.so
LoadModule authz_host_module libexec/apache22/mod_authz_host.so
LoadModule authz_groupfile_module libexec/apache22/mod_authz_groupfile.so
LoadModule authz_user_module libexec/apache22/mod_authz_user.so
LoadModule authz_dbm_module libexec/apache22/mod_authz_dbm.so
#LoadModule authz_owner_module libexec/apache22/mod_authz_owner.so
LoadModule authz_default_module libexec/apache22/mod_authz_default.so
LoadModule auth_basic_module libexec/apache22/mod_auth_basic.so
LoadModule auth_digest_module libexec/apache22/mod_auth_digest.so
#LoadModule file_cache_module libexec/apache22/mod_file_cache.so
#LoadModule cache_module libexec/apache22/mod_cache.so
#LoadModule disk_cache_module libexec/apache22/mod_disk_cache.so
LoadModule dumpio_module libexec/apache22/mod_dumpio.so
LoadModule include_module libexec/apache22/mod_include.so
LoadModule filter_module libexec/apache22/mod_filter.so
LoadModule charset_lite_module libexec/apache22/mod_charset_lite.so
LoadModule deflate_module libexec/apache22/mod_deflate.so
LoadModule log_config_module libexec/apache22/mod_log_config.so
LoadModule logio_module libexec/apache22/mod_logio.so
LoadModule env_module libexec/apache22/mod_env.so
LoadModule mime_magic_module libexec/apache22/mod_mime_magic.so
LoadModule cern_meta_module libexec/apache22/mod_cern_meta.so
LoadModule expires_module libexec/apache22/mod_expires.so
LoadModule headers_module libexec/apache22/mod_headers.so
LoadModule usertrack_module libexec/apache22/mod_usertrack.so
LoadModule unique_id_module libexec/apache22/mod_unique_id.so
LoadModule setenvif_module libexec/apache22/mod_setenvif.so
LoadModule version_module libexec/apache22/mod_version.so
LoadModule proxy_module libexec/apache22/mod_proxy.so
LoadModule proxy_connect_module libexec/apache22/mod_proxy_connect.so
LoadModule proxy_ftp_module libexec/apache22/mod_proxy_ftp.so
LoadModule proxy_http_module libexec/apache22/mod_proxy_http.so
LoadModule proxy_ajp_module libexec/apache22/mod_proxy_ajp.so
LoadModule proxy_balancer_module libexec/apache22/mod_proxy_balancer.so
LoadModule ssl_module libexec/apache22/mod_ssl.so
LoadModule mime_module libexec/apache22/mod_mime.so
LoadModule dav_module libexec/apache22/mod_dav.so
LoadModule status_module libexec/apache22/mod_status.so
LoadModule autoindex_module libexec/apache22/mod_autoindex.so
LoadModule asis_module libexec/apache22/mod_asis.so
LoadModule info_module libexec/apache22/mod_info.so
LoadModule cgi_module libexec/apache22/mod_cgi.so
LoadModule dav_fs_module libexec/apache22/mod_dav_fs.so
LoadModule vhost_alias_module libexec/apache22/mod_vhost_alias.so
LoadModule negotiation_module libexec/apache22/mod_negotiation.so
LoadModule dir_module libexec/apache22/mod_dir.so
LoadModule imagemap_module libexec/apache22/mod_imagemap.so
LoadModule actions_module libexec/apache22/mod_actions.so
LoadModule speling_module libexec/apache22/mod_speling.so
LoadModule userdir_module libexec/apache22/mod_userdir.so
LoadModule alias_module libexec/apache22/mod_alias.so
LoadModule rewrite_module libexec/apache22/mod_rewrite.so
LoadModule php5_module libexec/apache22/libphp5.so # ESTE MÓDULO É INSERIDO AUTOMATICAMENTE QUANDO O PHP FOR COMPILADO.


User www
Group www


ServerAdmin seu-email@seu-dominio

ServerSignature Off
ServerName srv-00.teste.com.br:80

DocumentRoot "/usr/local/www/apache22/data"


AllowOverride None
Order deny,allow
Deny from all



Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all




DirectoryIndex index.html index.php index.php3 index.htm



Order allow,deny
Deny from all
Satisfy All


ErrorLog /var/log/httpd-error.log

LogLevel warn


LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common


LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio


#CustomLog /var/log/httpd-access.log common

CustomLog /var/log/httpd-access.log combined



#ScriptAlias /cgi-bin/ "/usr/local/www/apache22/cgi-bin/"



#Scriptsock /var/run/cgisock



AllowOverride None
Options None
Order allow,deny
Allow from all


DefaultType text/plain


TypesConfig etc/apache22/mime.types

AddType application/x-gzip .tgz
AddEncoding x-compress .Z
AddEncoding x-gzip .gz .tgz
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

#AddHandler cgi-script .cgi

# For type maps (negotiated resources):
#AddHandler type-map var

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps



MIMEMagicFile etc/apache22/magic

ServerTokens Prod
ServerSignature Off


# Virtual hosts
#Include etc/apache22/extra/httpd-vhosts.conf

# Secure (SSL/TLS) connections
#Include etc/apache22/extra/httpd-ssl.conf

SSLRandomSeed startup builtin
SSLRandomSeed connect builtin


Include etc/apache22/Includes/*.conf

#############################################################




3. Instalando o PHP:

Também vamos instalar o PHP pelo PORTS, visto que o PORTS já baixa, compila e instala todas as dependências do software (que convenhamos facilita e muito a nossa vida).


# cd /usr/ports/lang/php5


Escolha tudo que necessita com built-in no PHP:

# make config


Eu sempre costumo utilizar estes módulos como built-in:
[X] APACHE Build Apache module
[X] SUHOSIN Enable Suhosin protection system (not for jails)
[X] MULTIBYTE Enable zend multibyte support
[X] MAILHEAD Enable mail header patch

Instalando:


# make install clean && rehash


Copie o arquivo de configuração do PHP para o nome correto:


# cd /usr/local/etc
# cp php.ini-recommended php.ini


Pronto!

3.1 Instalando extensões do PHP

Também pelo PORTS:


# cd /usr/ports/lang/php5-extensions


Escolha as extensões necessárias para suas páginas.

# make config


Depois instale:

# make install clean && rehash


Pronto!


4. Instalando MySQL:

Mais uma vez VIVA O PORTS!!!


# cd /usr/ports/databases/mysql50-server

# make WITHOUT_INNODB=yes BUILD_OPTIMIZED=yes BUILD_STATIC=yes install clean && rehash



Coloque-o para inicializar no boot

# echo 'mysql_enable="YES"' >> /etc/rc.conf


Instalado!

4.1 Configurando o MySQL;

Uma ótima política em se usar o MySQL é configurar a sua inicialização alguns parametros como máximo de concatenação de dados as vezes são muito úteis entre outras coisas, segue abaixo um arquivo de configuração do MySQL que eu considero um bom começo.


##############################################
[client]
socket = /tmp/mysql.sock
port = 3306


[mysqld]
bind-address = x.x.x.x # SUBSTITUA POR SEU IP
port = 3306
socket = /tmp/mysql.sock
tmpdir = /var/tmp
key_buffer = 256M
max_allowed_packet = 1M
table_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 16M
thread_concurrency = 4

max_connections=3048
max_user_connections=256
max_connect_errors=10000

wait_timeout = 1800
interactive_timeout = 1800
connect_timeout = 30

skip-locking
skip-name-resolve

group_concat_max_len = 999999

[isamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout
######################################################


Salve em /var/db/mysql/my.cnf

Defina uma senha para o root do mysql, mas antes levante o serviço MySQL:


# /usr/local/etc/rc.d/mysql-server start
# mysqladmin -u root password sua-senha


Pronto!


5. Instalando Pure-FTPd

Ae agora você que está lendo o artigo me pergunta:
"Mas porque o Pure-FTPd? Por que não o ProFTPd?
E eu responderei:
"Por que o Pure-FTPd é um tanto mais intuitivo, leve e fácil de utilizar (além da minha preferência pessoal pelo programa) visto que nesse tutorial eu o integrarei ao MySQL usando Quotas e Controle de taxa de transferência, fora uma leve personalizada no arquivo ftpd.c, onde peca o Pure-FTPd é no banner de boas-vindas.

Vamos lá:


# cd /usr/ports/ftp/pure-ftpd
# make config


Selecione:
[X] MYSQL Support for users in MySQL database
[X] PAM Support for PAM authentication
[X] PRIVSEP Enable privilege separation
[X] PERUSERLIMITS Per-user concurrency limits
[X] THROTTLING Bandwidth throttling
[X] UPLOADSCRIPT Support uploadscript daemon

DESABILITE O BANNER:
[ ] BANNER Show pure-ftpd welcome upon session start

Baixe-o e extraia-o:


# make extract


Caso queira personalizar o banner de conexão:


# cd work/pure-ftpd-1.0.21/src


Edite o arquivo ftpd.c

procure pela linha:

addreply_noformat(220, "FTP server ready.");

e mude-a conforme você queira que ele se apresente quando um cliente se conecte ao servidor FTP, esta linha no meu arquivo é a de número: 4499

addreply_noformat(220, "Fulano de tal ISP FTP server ready.");

salve-o e feche-o.

Compilar o bicho:


# cd /usr/ports/ftp/pure-ftpd
# make install clean && rehash


Insira-o no rc.conf para inicializar no boot:


# echo 'pure-ftpd_enable="YES"' >> /etc/rc.conf


Pronto instalado!

5.1 Configurando o Pure-FTPd para se autenticar no MySQL

5.1.1 Criando Base de Usuários de FTP no MySQL

Primeiro é necessário para o funcionamento do Pure-FTPd com o MySQL a criação da base ou da tabela em alguma base de sua preferência onde o Pure-FTPd irá se conectar para autenticar os usuários.
Segue abaixo a SQL que insere o Banco propriamente dito:


########################################################

CREATE DATABASE `pureftpd`;
USE pureftpd;

CREATE TABLE `ftpusers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(16) NOT NULL,
`password` varchar(255) NOT NULL DEFAULT '',
`uid` int(10) NOT NULL DEFAULT '80',
`gid` int(5) NOT NULL DEFAULT '80',
`homedir` varchar(255) NOT NULL DEFAULT '/var/www/',
`active` tinyint(1) NOT NULL DEFAULT '1',
`Quota` int(10) NOT NULL DEFAULT '0',
`ULbw` int(10) NOT NULL DEFAULT '32',
`DLbw` int(10) NOT NULL DEFAULT '32',
`ULRatio` int(10) NOT NULL DEFAULT '0',
`DLRatio` int(10) NOT NULL DEFAULT '0',
`QuotaFiles` int(10) NOT NULL DEFAULT '0',
`dominio` char(100) NOT NULL,
PRIMARY KEY (`id`,`uid`) USING BTREE,
UNIQUE KEY `username` (`username`),
UNIQUE KEY `uid` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='FTP users';

#########################################################


Nesse tutorial eu acessarei esse banco/tabela como root do MySQL (o que não é uma política muito correta, de preferência crie um usuário com menos privilégios para acessar este banco).

5.1.2 Configurando o Pure-FTPd efetivamente.

Configurando agora o Pure-FTPd para se conectar ao MySQL e os parametros necessários para o funcionamento:

Edite o arquivo /usr/local/etc/pure-ftpd.conf


#########################################################

DisplayDotFiles yes # Mostra arquivos como .ftpquota
ChrootEveryone yes # Enjaula todos dentro de seus homes
BrokenClientsCompatibility yes
MaxClientsNumber 150 # Máximo de Clientes
Daemonize yes # Transforma-o em daemon
MaxClientsPerIP 22 # Máximo de clientes por IP
VerboseLog yes # Log Verboso
AnonymousOnly no # Não permite Anonimo
NoAnonymous yes
SyslogFacility ftp # Joga saida do Log no syslog
DontResolve yes # não resolva nomes
MaxIdleTime 15 # Máximo de tempo de idle em minutos
MySQLConfigFile /usr/local/etc/pureftpd-mysql.conf # Configuração de conexão com MySQL
PAMAuthentication no # Não permite autenticação de usuários na máquina
UnixAuthentication no
LimitRecursion 5000 8
AnonymousCanCreateDirs no
MaxLoad 4
AntiWarez yes
Umask 133:022
MinUID 503
AllowUserFXP no
AllowAnonymousFXP no
ProhibitDotFilesWrite no
ProhibitDotFilesRead no
AutoRename no
AnonymousCantUpload no
AltLog stats:/var/log/pureftpd.log
MaxDiskUsage 90 # Máxima utilização do disco em %
KeepAllFiles no
CreateHomeDir yes # Cria o home do usuário no primeiro login caso vc esqueça de criar
CustomerProof yes
PerUserLimits 2 2
#UserRatio 1 3

#############################################################


E agora o arquivo de conexão com o MySQL:

Edite o arquivo /usr/local/etc/pureftpd-mysql.conf


##############################################################

MYSQLServer x.x.x.x # Substitua pelo ip do seu server caso não seja o mesmo, caso seja o mesmo comente a linha
MYSQLPort 3306
#MYSQLSocket /tmp/mysql.sock # se o servidor for local descomente esta linha
MYSQLUser root
MYSQLPassword suasenha
MYSQLDatabase pureftpd
MYSQLCrypt any
MYSQLGetPW SELECT password FROM ftpusers WHERE username ='\L' AND active='1'
MYSQLGetUID SELECT uid FROM ftpusers WHERE username = '\L'
MYSQLGetGID SELECT gid FROM ftpusers WHERE username = '\L'
MYSQLGetDir SELECT homedir FROM ftpusers WHERE username = '\L'
MySQLGetBandwidthUL SELECT ULbw FROM ftpusers WHERE username = '\L'
MySQLGetBandwidthDL SELECT DLbw FROM ftpusers WHERE username = '\L'
MySQLGetRatioUL SELECT ULRatio FROM ftpusers WHERE username ='\L'
MySQLGetRatioDL SELECT DLRatio FROM ftpusers WHERE username ='\L'
MySQLGetQTASZ SELECT Quota FROM ftpusers WHERE username ='\L'
MySQLGetQTAFS SELECT QuotaFiles FROM users WHERE username = '\L'
MySQLTransactions On

################################################################


Pronto integração Completa! Agora basta você inserir os usuários no banco e logar para que as pastas sejam criadas e as permissões setadas.


6. Levantando os Serviços:

"Botando a coisa pra rodar"


# /usr/local/etc/rc.d/apache22 start
# /usr/local/etc/rc.d/pure-ftpd start


Bom pelo menos aqui não deu erro não! hehehe.
E está tudo funcionando perfeitamente.

7. Conclusão

Acredito que o objetivo de instalar um FAMP Server com Pure-FTPd autenticando no MySQL tenha se cumprido.
Temos agora um servidor rodando Apache com suporte a PHP e MySQL, juntamente com um FTP autenticando no MySQL proporcionando um ambiente bem controlado e seguro no quesito PROGRAMAS, pois não cobri a configuração de um Firewall (o qual pretendo ainda escrever algo).

8. Referências

Atualização do FreeBSD por Christopher Giese no FUG:
http://www.fug.com.br/content/view/46/60/


Documentação do PureFTPd na Web:
http://www.pureftpd.org/project/pure-ftpd/doc

Read more!

Sábado, Março 24, 2007

Linux Mais Bonito que rWindows Vista

Só vou colocar uma foto, depois eu coloco um tutorial (quando tiver tempo e coragem), pq todos que achei não satisfizeram.. dae fui mesclando eles e deu certo hahaha!!!

Não tá muito cheio de frescura mas tá mais legal que o tal "AERO" hehe


Estou rodando Ubuntu 6.10 e no VirtualBox rodando DSLinux, VGA GeForce FX5200.
Show de bola!

Abraço

Marcadores: , , , , ,


Read more!

Terça-feira, Novembro 14, 2006

Brincando com Jail's no FreeBSD

Eae pessoal!?

Bom hoje a aventura é com as Jail's do FreeBSD.
As Jails foram criadas por Poul-Henning Kamp para a R&D Associates e daí introduzidas no FreeBSD 4.0. Robert Watson esteve envolvido na documentação e na elaboração de alguns ''remendos''.
E também as Jails servem para "virtualizar" alguns serviços, por exemplo:

Um provedor que disponibilize shells para seus clientes, ele pode criar uma Jail para cada um deles, sem que isso atrapalhasse os outros processos, ela funciona como se fosse um mini-sistema independente com seus usuários e seu super-usuário próprios, ou melhor ainda funciona parecido com um VMWare, compartilha os recursos da máquina mas roda independente, mas tudo dentro de um processo "enjaulado" quase indistinguível de um sistema real.
Aí que entra a questão da segurança que a Jail proporciona, pois dentro da Jail tudo que está abaixo dela (na máquina anfitriã) não é visível, e você pode disponibilizar várias Jails sem que elas saibam da existência de outras. O que for feito pelo root de uma Jail não afeta o sistema anfitrião.

Bom Vamos ao índice da "brincadeira":

  1. Criando a Jail
  2. Configurações no Host em relação a Jail
  3. Configurando a Jail
  4. Configurações das sysctl's no anfitrião[1]
  5. Atualização da Jail
  6. Considerações e Links

Primeiro iremos criar a pasta onde os arquivos da nossa Jail irá ficar:

# mkdir /usr/jails
# mkdir /usr/jails/1

Como eu estava em processo de atualização da minha máquina de testes eu havia acabado de atualizar ela para o FreeBSD 6.2PRE-RELEASE, então meu /usr/obj estava prontinho pra dar make installworld que é o comando que iremos usar a seguir:


# cd /usr/src
# make installworld DESTDIR=/usr/jails/1
# cd etc
# make distribution DESTDIR=/usr/jails/1


Caso, vc não tenha apagado os objetos em /usr/obj, vc terá de rodar o buildworld primeiro pra depois o installworld e assim por diante.

Após a instalação da Jail é necessário fazer com que o Host anfitrião saiba que ele existe, configurando o IP que deverá ser usado pela Jail, como as demais configurações de arranque da Jail que serão detalhadas agora:

No arquivo /etc/rc.conf:

ifconfig_lnc0="inet 192.168.0.16 netmask 255.255.255.0"
ifconfig_lnc0_alias0="inet 192.168.0.17 netmask 255.255.255.0" #IP que a Jail irá usar

* o dispositivo "lnc0" é a placa de rede virtual do meu VMWare, substitua pela sua na sua configuração.

jail_enable="YES"
jail_set_hostname_allow="YES"
jail_socket_unixiproute_only="YES"
jail_sysvipc_allow="YES"
jail_list="j01"

jail_j01_rootdir="/usr/jails/1"
jail_j01_hostname="zion-j01.zion.local"
jail_j01_ip="192.168.0.17"
jail_j01_exec="/bin/sh /etc/rc"
jail_j01_devfs_enable="YES"
jail_j01_procfs_enable="YES"


Este ultimo bloco de configurações é específico da Jail chamada "j01" a qual se refere na flag "jail_list=". Ou seja, para cada jail que vc adicionar no sistema um bloco desse é necessário para seu funcionamento.

Quase pronto!
Agora iremos mecher com as configurações nos arquivos dentro da Jail que criamos nos passos anteriores.

Temos que criar um arquivo (vazio) "fstab" para a Jail:

# touch /usr/jails/1/etc/fstab

Configurar os NameServers para resolução de nomes:

# echo "nameserver ip.do.server.de.nomes" > /usr/jails/1/etc/resolv.conf

E agora criaremos o "rc.conf" da Jail:

# vi /usr/jails/1/etc/rc.conf

E inseriremos isto:


network_interfaces="" # Para desabilitar os alertas do ifconfig

rpcbind_enable="NO"
usbd_enable="NO"

font8x14="NO" # bloco de personalização de fonte (desnecessário/opcional)
font8x16="swiss-8x16"
font8x8="swiss-8x8"
keymap="br275.iso.acc"
keyrate="fast"

clear_tmp_enable="YES"
update_motd="NO"
fsck_y_enable="YES"
virecover_enable="NO"

syslogd_flags="-ss"

sshd_enable="YES" # habilita SSH
sendmail_enable="NONE" # desabilita sendmail


Agora é necessário fazer com que o SSH ouça apenas no IP da Jail adicionando ao sshd_config a seguinte linha:

ListenAddress 192.168.0.17 #substitua esse IP pelo IP que vc colocou pra sua Jail

Também precisamos criar a pasta do ports e também uma pasta BUILD dentro da pasta tmp da Jail:

# mkdir /usr/jails/1/usr/ports
# mkdir /usr/jails/1/etc/BUILD



Agora criamos um make.conf para a Jail:

# touch /usr/jails/1/etc/make.conf
# cd /usr/jails/1
# echo "WRKDIRPREFIX=/tmp/BUILD" > etc/make.conf



Montar o DEVFS para o Jail:

# mount_devfs devfs /usr/jails/1/dev


Ligar o dispositivo "null" ao núcleo do kernel:

# cd /usr/jails/1
# ln -sf dev/null kernel



Pronto. Agora iremos subir a Jail e criar os usuários para que possamos acessá-la por SSH e assim poderemos configurar outras coisas ainda dentro da Jail como /etc/syslogd.conf ou mesmo rodar o sysinstall.
Para rodar a Jail execute:


# jail /usr/jails/1 j01 192.168.0.17 /bin/sh

E estamos na Jail:

zion-j01#

Agora dentro da Jail defina a senha do root com o comando passwd, e crie usuários normalmente com o pw. Configure o timezone no sysinstall.

Terminado isso digite "exit" para sair.
Como já configuramos tudo e já estão habilitadas todas as configurações no host anfitrião, basta subi-la pelo script rc dele.

# /etc/rc.d/jails start
Configuring jails:.
Starting jails: j01


E com o comando jls vc pode ver as Jails em "UP":

# jls
JID IP Address Hostname Path
6 192.168.0.17 zion-j01.zion.local /usr/jails/1



Veremos agora como e quais parametros (MIB's) - ''Management Information Base'' usar para alterar o estado do núcleo do sistema e o tratamento dado por este às Jails.

Presentemente a alteração destas MIBs propaga-se a todas as Jails existentes no sistema, no futuro esta funcionalidade será afinada para que possa haver maior distinção entre cada Jail e suas configurações.

Para receber a listagem de todas as ''MIBs'' usadas pelo núcleo basta executar como root o comando: sysctl -a | more

No nosso caso iremos só pesquisar as que interagem directamente com o mundo das Jails.
  $ sysctl -a | grep 'jail'
security.jail.set_hostname_allowed: 0
security.jail.socket_unixiproute_only: 1
security.jail.sysvipc_allowed: 1
security.jail.getfsstatroot_only: 1
security.jail.allow_raw_sockets: 0
security.jail.chflags_allowed: 0
security.jail.jailed: 0
Resumidamente, estas MIBs significam:
  • security.jail.allow_raw_sockets
    Esta entrada determina se o root é capaz ou não de criar ''raw sockets''. Activando esta MIB, irá permitir que utilitários como ping e traceroute operem dentro das Jails.

  • security.jail.getfsstatroot_only
    Define se dentro de uma Jail, os processos são capazes de ver ou não todos os ''mountpoints''.

  • security.jail.set_hostname_allowed
    Esta MIB assegura se os processos dentro da Jail podem ou não alterar o nome do nó via comando hostname.

  • security.jail.socket_unixiproute_only
    A tecnologia de enclausuramento permite auscultar um IP versão 4 em cada Jail, e limitar o acesso a outros endereços de rede no espaço IPv4 que possam estar disponíveis no ambiente. No entanto, presentemente a Jail não é capaz de limitar o acesso a outras pilhas de protocolos de rede que não tenham esta técnologia de enclausuramento. Assim, por defeito, processos dentro de Jails apenas podem aceder a protocolos nos seguintes domínios: (PF_LOCAL, PF_INET e PF_ROUTE, permitindo-os aceder a sockets de UNIX, endereços IPv4 e sockets de roteamento.

  • security.jail.sysvipc_allowed
    Com esta MIB definimos se os processos residentes nas Jails irão ter acesso a primitivas ''System V IPC''.
    Como nota especial para esta MIB, dou como exemplo o caso de se ter uma instância de PostgreSQL a correr dentro de uma Jail o qual obriga a activação da MIB em causa.

  • security.jail.chflags_allowed
    Esta entrada determina se um utilizador priviligiado dentro da Jail é tratado por chflags(2). Se estiver a zero, este utilizador é tratado como não priviligiado não podendo alterar ficheiros com ''flags'' definidas.
Entretanto também temos as seguintes MIB's que devem ser alvo de atensão:
  $ root@fac:/etc/rc.d$ sysctl -a | grep 'bsd.see_other'
security.bsd.see_other_uids: 1
security.bsd.see_other_gids: 1
Acima, como o próprio nome indica, cada utilizador ou grupo de utilizadores, só poderá ver os seus/grupo processos.

As considerações finais para este tema vão para:
  • Uma MIB com o valor zero (0) estará ináctiva, uma com o valor um (1) estará activa.

  • Para que as ''sysctl's'' premanecam correctamente configuradas após reiniciarmos o servidor, deveremos lista-las em /etc/sysctl.conf


Um tópico que eu achei poucas informações, bom é simples como se estivessemos fazendo na própria máquina, a diferença é que temos mostrar a Jail na hora de instalar a nova compilação do sistema. Segue exemplo abaixo:

No anfitrião:

# /etc/rc.d/jails stop j01

Atualize os sources com csup ou cvsup.

# cd /usr/src
# make -j4 buildworld


E agora a parte da instalação, faça backup do /usr/jails/1/etc pois eles poderão ser sobrescritos com arquivos vazios após o MERGE.

# make installworld DESTDIR=/usr/jails/1
# mergemaster -D /usr/jails/1
# /etc/rc.d/jails start


Pronto Jail atualizada!


Com este artigo acredito ter ficado claro como é simples de se virtualizar serviços com FreeBSD sem precisar comprar uma solução proprietária (VMWare e outros).
Dentro desta Jail criada usando o portsnap podemos baixar o ports com a opção extract e então compilar qualquer aplicação que queiramos. Como citado anteriormente é um sistema independente (em termos), isolado e com um nível legal de segurança para rodar seus aplicativos de risco, por exemplo um apache, ou então um banco PostgreSQL.

Links:
[1] http://www.myfreebsd.com.br/modules.php?name=Sections&op=viewarticle&artid=29
[2] http://en.wikipedia.org/wiki/FreeBSD_Jail


Marcadores: , , ,


Read more!