Archive for the Linux Category

Qualquer idiota é capaz de pintar um quadro; somente um gênio é capaz de vendê-lo.

Porque hoje é sexta

Porque hoje é sexta

Porque hoje é sexta

Porque hoje é sexta

Porque hoje é sexta

Porque hoje é sexta

Porque hoje é sexta

Imagine o seguinte cenário: Empresa de pequeno porte, com um AD instalado às pressas sem muitos cuidados e um servidor Linux lá no meio servindo de proxy. Se você tiver vontade de autenticar os serviços no AD, aqui vão alguns exemplos práticos e rápidos.

Tome como base um Windows 2003, com o domínio chamado “EverLinux” e um usuário rosca lá chamado “tcruz” somente para fazer as buscas no diretório da Microsoft. O Linux seria um Ubuntu ou Debian da vida.

Autenticando o Apache no AD

cd /etc/apache2/mods-enabled
ln -s ../mods-available/ldap.load .
ln -s ../mods-available/authnz_ldap.load .
 
<Directory "/var/www/protegido">
        AuthBasicProvider ldap
        AuthzLDAPAuthoritative off
        AuthName "Entre com a senha do AD"
        AuthType Basic
        AuthLDAPBindDN tcruz@everlinux
        AuthLDAPBindPassword senha_do_tcruz
        AuthLDAPURL ldap://10.10.20.20:3268/cn=users,dc=everlinux?sAMAccountName?one
        require user tcruz cmangini
        Allow from all
</Directory>

Autenticando o Squid no AD

...
acl bloqueados dstdom_regex -i "/etc/squid/block.txt"
http_access deny bloqueados
 
auth_param basic program /usr/lib/squid/ldap_auth -R -b "dc=everlinux" -D \
"cn=tiago cruz,cn=users,dc=everlinux" -w "senha_tcruz" -f sAMAccountName=%s -h 10.10.20.20
auth_param basic children 5
auth_param basic realm Autenticacao
auth_param basic credentialsttl 5 minutes
acl ldapauth proxy_auth REQUIRED
http_access allow ldapauth
...

Autenticando algo em PHP no AD

O exemplo será o software OneOrZero utilizado Help Desk:

# apt-get install php5-ldap
 
cat /var/www/helpdesk/configuration/website_settings.php
auth_method = "AD"
ldap_host = "10.10.20.20"
ldap_domain = "everlinux"
ldap_binddn = "CN=Tiago Cruz,CN=Users,DC=everlinux"
ldap_bindpwd = "senha_tcruz"
ldap_rootdn = "CN=Users,DC=everlinux"
ldap_searchattr = "sAMAccountName"
ldap_fname = "givenname"
ldap_lname = "sn"
ldap_uname = "samaccountname"
ldap_email_add = "mail"
ldap_office = "physicaldeliveryofficename"
ldap_phone = "telephonenumber"
ldap_context = "sAMAccountName"

Fazendo uma busca manualmente no diretório

# ldapsearch -LLL -h 10.10.20.20 -P 3 -x -D "cn=tiago cruz,cn=users,dc=everlinux" -W \
-b "cn=users,dc=everlinux"  "(&(&(objectClass=user)(objectCategory=person)) \
(sAMAccountName=tcruz))" 
Enter LDAP Password: 
dn: CN=Tiago Cruz,CN=Users,DC=everlinux
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: Tiago Cruz
sn: Cruz
physicalDeliveryOfficeName: EverLinuxs Office
telephoneNumber: 1234-4321
givenName: Tiago
initials: ti
distinguishedName: CN=Tiago Cruz,CN=Users,DC=everlinux
instanceType: 4
whenCreated: 20090427110042.0Z
whenChanged: 20100406221357.0Z
displayName: Tiago Cruz
uSNCreated: 555987
memberOf:: Q049QWRtaW5zLiBkbyBkb23DrW5pbyxDTj1Vc2VycyxEQz1kb21pbmlvMjAwNw==
memberOf: CN=Administradores,CN=Builtin,DC=everlinux
uSNChanged: 2331137
name: Tiago Cruz
objectGUID:: 39teBl62JUWwzZz36nNICw==
userAccountControl: 66048
badPwdCount: 0
codePage: 0
countryCode: 0
badPasswordTime: 129150648344589017
lastLogoff: 0
lastLogon: 129150648382871002
pwdLastSet: 128853036428004858
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAAR0LCqonS5XyzPF2T+AQAAA==
adminCount: 1
accountExpires: 9223372036854775807
logonCount: 0
sAMAccountName: tcruz
sAMAccountType: 80530263368
userPrincipalName: tcruz@everlinux
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=everlinux
mail: tiagocruz AT everlinux.com

Espero que com estas dicas fique mais fácil para você centralizar a autenticação de seus serviços, caso seja necessário integrar com um LDAP proprietário.

Se você precisa balancear a carga em seu webserver e não tem (ou não pode usar) um hardware dedicado para isso, segue alguns exemplos práticos:

Apache httpd:

NameVirtualhost *:80
<VirtualHost *:80>
    ServerName everlinux-homolog.com
    ServerAlias 200.24.12.34 10.10.23.53 10.10.23.56
    ServerAdmin suporte@everlinux.com
    ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/error_log.%Y%m%d 86400 -180"
    CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log.%Y%m%d 86400 -180" combined
 
        <Proxy balancer://everhttp>
          BalancerMember http://10.10.23.53:80/ ping=10
          BalancerMember http://10.10.23.56:80/ ping=10
        </Proxy>
 
ProxyPreserveHost on
ProxyPass / balancer://everhttp/
ProxyPassReverse /oii balancer://everhttp/
 
</VirtualHost>

Nginx

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  50;
 
      upstream everbalance {
         ip_hash;
         server 10.10.23.53 max_fails=3 fail_timeout=30s;
         server 10.10.23.56 max_fails=3 fail_timeout=30s;
         }
 
    server {
         listen  202.34.52.24:80;
         server_name  everlinux-homolog.com;
         location /
           {
            access_log   /var/log/nginx/hdig.log;
            proxy_pass   http://everbalance;
            proxy_set_header Host $host;
           }
         }
}

As linhas “ProxyPreserveHost on” (apache) e “proxy_set_header Host $host;” (nginx) são importantes caso sua aplicação trabalhe com o nome do domínio da URL para montar alguma coisa dinamicamente. Conteúdo estático geralmente não é necessário estas variáveis.

Ouvindo muitos “Jackson Five – Motoboy”, acabei juntando algumas rimas encontradas na InterNet e usadas por ele.
Segue um link do histórias do malandro e sua magrela Lady Laura (motocicleta).

YouTube Preview Image

Suave na nave
De boa na lagoa (canoa)
Tranquilo no quilo (como um grilo)
As pampa na rampa
Firmão no galpão (busao, macarrao)
De leve na neve
Beleza na mesa
Irado no gado
Na moral no matagal
Legal no bananal
Firmose na apoteose
Sem drama na cama
Firmeza na represa
Sossegado no mercado
Tudo em cima na piscina
Tudo certo no deserto
Relax no durex
Joia na Jibóia
Realiza na briza
Sussa na montanha russa
Relaxa na bolaxa (ou graxa)
Se pá no maracujá
Joinha na prainha
Estranho como um ranho
Se orienta na polenta
Light na night
Tudo em cima na piscina
Bem no armazém
Manero no putero
Demoreba na budega
De boresta na palestra
A brisa no para-brisa
Nice on the ice
sussegado no marcado
tranquilo no asilo
ja é no jacaré
firmão no busão
suavão no camburão
seguro no muro
tudo em cima na piscina
conosco não há enrosco
comigo não tem perigo
é quente no dente
legal no pedal
relachado no machado
de onda na Honda
se toca na tapioca
no grau do bacalhau
de bobeira na ladeira
Stayle no baile

Éh nóis queiróiz! 8p

Calma pessoal, hoje ainda não é sexta! Então não se empolgem.
Há uns dias atrás fiz um post falando sobre o GIMP, que é junto com Photoshop um das poderosas ferramentas de editorações e retoques em imagens.
Então clique na imagem abaixo e veja alguns milagres feitos por essas ferramentas.

Retoque Digital

[ 1 ]
[ 2 ]
[ 3 ]
[ 4 ]
[ 5 ]

É um software de distribuição gratuita capaz de realizar composição e criação de imagem, retoques em fotos, entre muitas outras coisas.

Ele é bastante utilizado por profissionais para manipular e melhorar a qualidade fotos e ou para a realização de projetos gráficos. Sendo assim uma alternativa livre ao Photoshop da Adobe.

Nasceu como um projeto universitário em 1995 por Spencer Kimball e Peter Mattis é hoje mantido por um grupo de voluntários.

Site oficial: Gimp

Download [linux]: The Gimp 2.6.7 [15.58MB]

Download [win]: The Gimp 2.6.7 Portable Rev 3 [16.73MB]

Download [win]: The GIMP 2.6.7 [16.08MB]

Download [win]: The GIMP 2.7.0 Beta [15.04MB]

gimps

A Little Linux Story
“free the code”

free the code

Já é a segunda vez que meu Ubuntu 9.04 resolve colocar o MAC “AA:00:04:00:0A:04″ em minha interface de rede. Aconteceu com minha Realtek RTL8101E/RTL8102E (onboard) e agora com a minha Realtek RTL-8139/8139C/8139C+ Offboard, no meu super PC da SpaceBR que já veio com Linux instalado.

Aparentemente não é algo difícil de acontecer no Ubuntu, por isso colocarei aqui o que fiz para parar de vez com esse problema irritante:

Editei o /etc/rc.local e acrescentei essas linhas:

/sbin/ifconfig eth0 hw ether 00:21:97:9E:13:13
/sbin/ifconfig eth1 hw ether 00:E0:4C:56:0E:D8

Logo em seguida, arrumei o /etc/udev/rules.d/70-persistent-net.rules

# PCI device 0x10ec:0x8136 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:21:97:9e:13:13", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
 
# PCI device 0x10ec:0x8139 (8139too)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:e0:4c:56:0e:d8", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

No próximo reboot, o NetworkManager resolveu me obedecer e colocar o IP que eu havia selecionado (na verdade DHCP), sem ficar criando o maldito “Auto eth0″ com dhcp e aquele MAC maluco.

No meu caso, eu configuro meu roteador Netgear WGR614 v7 para colocar um IP de acordo com o MAC da minha placa. Desta forma, meu Wii (rodando o mplayer_ce 0.75) consegue montar meu compartilhamento exportado via SaMBa (veja como no artigo: Assistindo Filmes no Wii usando o Mplayer) e eu posso assistir animês/ filmes e seriados pela TV da sala, deitado no sofá. Bem melhor do que ficar sentado na frente de um monitor :-)

O problema era que o Ubuntu colocava esse MAC maluco, o Wireless mandava um IP diferente do qual eu havia programado (192.168.1.5 ao invés do 192.168.1.2) e aí o Wii se perdia porque não encontrava o compartilhamento :-/

Agora tudo parece estar funcionando como deveria!

Eu havia comentado anteriormente sobre a compra do meu PC novo para 2009, em substituição ao já idoso Athlon XP 1600+ que eu tinha anteriormente.

Na verdade, um dos meus objetivos é possuir uma máquina descente para jogar games novos, por exemplo, o Diablo 3 (quando ele sair…), pois ainda estou muito empolgado jogando Diablo 2 no Linux decentemente :)

Quando comprei a placa Nvidia GeoForce Series 9 – 9500 GT com 1GB DDR2 (DVI/D-SUB/HDMI) – PCI-Express 2.0, eu assim a fiz pensando no ótimo (??) suporte que a mesma possui em Linux. Eu ja tive uma Radeon 9200 da ATi e bem me lembro o sufoco que era fazer a mesma funcionar a aceleração 3D no Linux (se bem que isso não quer dizer muita coisa, hoje em dia as coisas andam muito mais fáceis…rsrsrs)

Para exemplificar isso, resolvi postar os screenshoots da instalação/ configuração desta placa no Ubuntu Linux 9.04. Mais fácil do que isso só roubar doce de criança…

Tudo começa clicando em System -> Administrator -> Hardware Drivers. O restante você confere nos screenshoots (clique para ampliar as imagens) :)

- Na primeira imagem você vê uma saída do ‘lspci’ junto ao ‘Hardware Drivers’
- Na segunda imagem, o /etc/X11/xorg.conf sendo modificado automaticamente
- Na terceira, você pode visualizar o novo NVIDIA X Server Settings, tudo de forma fácil e gráfica!

Eu só não sei se tenho saudades dos velhos tempos em que configurar um X era coisa para macho, hahahahha 8)

Abraços e até mais!

O objetivo deste post é ajudar as pessoas a manter o SELinux habilitado, resolvendo os problemas com o mesmo.

O exemplo é um LAMP com Red Hat EL 5.3 com tudo funcionando, porém um daemon vsftpd que não quer subir quando o SELinux está rodando.

Para verificar se o problema é de fato o SELinux, basta desabilita-lo temporariamente:

[root@selinux tmp]# setenforce Permissive
 
[root@selinux tmp]# /etc/init.d/vsftpd start
Starting vsftpd for vsftpd:                                             [  OK  ]

Sem o SELinux, o VSFTP funciona normalmente, porém basta ativa-lo que mensagens estranhas começam a aparecer:

[root@selinux tmp]# setenforce enforcing
 
[root@selinux tmp]# /etc/init.d/vsftpd start
Starting vsftpd for vsftpd: /usr/sbin/vsftpd: error while loading shared libraries: libssl.so.6: failed to map segment from shared object: Permission denied
                                                          [FAILED]
[root@selinux ~] # tail /var/log/messages
Jul 27 15:01:44 selinux kernel: type=1107 audit(1248717704.011:1569): user pid=25449 uid=28 auid=4294967295 subj=system_u:system_r:init_t:s0 msg='avc:  denied  { shmempwd } for  scontext=system_u:system_r:initrc_t:s0 tcontext=system_u:system_r:init_t:s0 tclass=nscd
Jul 27 15:01:44 selinux kernel: : exe="?" (sauid=28, hostname=?, addr=?, terminal=?)'
Jul 27 15:01:44 selinux kernel: type=1107 audit(1248717704.012:1570): user pid=25449 uid=28 auid=4294967295 subj=system_u:system_r:init_t:s0 msg='avc:  denied  { getpwd } for  scontext=system_u:system_r:initrc_t:s0 tcontext=system_u:system_r:init_t:s0 tclass=nscd
Jul 27 15:01:44 selinux kernel: : exe="?" (sauid=28, hostname=?, addr=?, terminal=?)'
Jul 27 15:01:44 selinux kernel: type=1107 audit(1248717704.012:1571): user pid=25449 uid=28 auid=4294967295 subj=system_u:system_r:init_t:s0 msg='avc:  denied  { shmemgrp } for  scontext=system_u:system_r:initrc_t:s0 tcontext=system_u:system_r:init_t:s0 tclass=nscd
Jul 27 15:01:44 selinux kernel: : exe="?" (sauid=28, hostname=?, addr=?, terminal=?)'
Jul 27 15:01:44 selinux kernel: type=1107 audit(1248717704.012:1572): user pid=25449 uid=28 auid=4294967295 subj=system_u:system_r:init_t:s0 msg='avc:  denied  { getgrp } for  scontext=system_u:system_r:initrc_t:s0 tcontext=system_u:system_r:init_t:s0 tclass=nscd
Jul 27 15:01:44 selinux kernel: : exe="?" (sauid=28, hostname=?, addr=?, terminal=?)'
Jul 27 15:01:44 selinux kernel: type=1400 audit(1248717704.028:1573): avc:  denied  { execute } for  pid=25644 comm="vsftpd" path="/lib64/libssl.so.0.9.8e" dev=sda3 ino=1488241 scontext=system_u:system_r:ftpd_t:s0 tcontext=system_u:object_r:file_t:s0 tclass=file

Você pode observar que vários destes erros são referentes ao cache NSCD, e somente a última é de fato referente ao VSFTPd e suas bibiotecas compartilhadas.

Para ficar mais visível, vamos parar o o nscd e tratar como dois problemas distintos:

[root@selinux selinux]# /etc/init.d/nscd stop
Stopping nscd:                                             [  OK  ]
 
[root@selinux selinux]# /etc/init.d/vsftpd start
Starting vsftpd for vsftpd: /usr/sbin/vsftpd: error while loading shared libraries: libssl.so.6: failed to map segment from shared object: Permission denied
                                                          [FAILED]
[root@selinux selinux]# tail /var/log/messages
Jul 27 15:01:52 selinux kernel: type=1400 audit(1248717712.742:1574): avc:  denied  { execute } for  pid=25662 comm="vsftpd" path="/lib64/libssl.so.0.9.8e" dev=sda3 ino=1488241 scontext=system_u:system_r:ftpd_t:s0 tcontext=system_u:object_r:file_t:s0 tclass=file

Uma das coisas mais legais que foram adicionados ao RHEL5, é o daemon setroubleshoot que ajuda a traduzir esses erros monstros do selinux para algo que um humano consiga entender.

A ferramenta audit2allow permite pegar trechos de logs monstros que estão barrando em algo e converter para o mundo do Selinux, eliminando assim o problema em que você está preso:

[root@selinux tcruz]# grep vsftpd /var/log/messages | audit2allow -M vsftpd

Será gerado dois arquivos:
vsftpd.te = texto
vsftpd.pp = binário

O vsftpd.te conterá algo como:

module vsftp 1.0;
 
require {
	type ftpd_t;
	type file_t;
	class dir search;
	class file execute;
}
 
#============= ftpd_t ==============
allow ftpd_t file_t:dir search;
allow ftpd_t file_t:file execute;

Enquanto o nscd.te mostraria algo assim:

module nscd 1.0;
 
require {
	type init_t;
	type initrc_t;
	class nscd { shmemhost shmempwd getpwd shmemgrp gethost getgrp };
}
 
#============= initrc_t ==============
allow initrc_t init_t:nscd { shmemgrp getgrp shmempwd getpwd gethost shmemhost };

Se você estiver satisfeito com o resultado, poderá simplesmente importar o arquivo binário para junto das regras atuais do seu sistema:

[root@selinux tcruz]# semodule -i vsftpd.pp

Você pode fazer isso com o vsftpd e com nscd, até que seu problema seja de fato resolvido!

Pronto! Simples assim :)

Um outro comando interessante, é o getsebool que pode alterar várias variáveis boolean (on ou off, 0 ou 1, ligado ou desligado) pré-definidas como:

[root@selinux log]# setsebool -P ftp_home_dir 1
[root@selinux log]# setsebool -P allow_ftpd_full_access=1
 
[root@selinux log]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> on
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
allow_tftp_anon_write --> off
ftp_home_dir --> on
ftpd_disable_trans --> off
ftpd_is_daemon --> on
httpd_enable_ftp_server --> off
tftpd_disable_trans --> off

Links Úteis para saber mais sobre o SELinux:

http://jczucco.blogspot.com/2009/07/apresentacao-sobre-selinux-no-fisl-10.html
http://magazine.redhat.com/2007/05/04/whats-new-in-selinux-for-red-hat-enterprise-linux-5/
http://fedoraproject.org/wiki/SELinux
http://docs.fedoraproject.org/selinux-faq-fc5/
http://fedoraproject.org/wiki/SELinux/Understanding