sexta-feira, julho 28, 2006

Renomeando arquivos no console

Estou atualizando a galeria de fotos do site e me deparei com um problema. Várias fotos do Windows acabando vindo com espaços e caracteres inválidos. Também queria uma forma de deixar todos os caracteres minúsculos.
Acabei encontando as seguintes dicas:

for foo in *; do mv $foo `echo $foo | tr /[A-Z]/ /[a-z]/` ; done

fonte: www.vivaolinux.com.br

Eu acabei adaptando para poder criar um script que faz tudo de uma vez só no diretório em que é rodado.


#!/bin/bash
for foo in *; do mv $foo `echo $foo | tr /[A-Z]/ /[a-z]/` ; done
for foo in *; do mv $foo `echo $foo | tr " " "_"` ; done

Múltiplos usos do Comando Find

Quem nunca precisou editar algo em particular, em vários arquivos de uma só vez. O Nagios por exemplo, se for mudado o nome de um host no arquivos hosts.cfg, este nome deve ser mudado também no hostroups.cfg e no services.cfg. Ou então qer trocar uma váriavel em vários arquivos de um mesmo programa.


Para isto temos o comando find. A melhor utilização para mim descobri já fazem uns dois anos do site Dicas-L, do pessoal envolvido com a Unicamp.


O comando para isto é:



find ./ -maxdepth 1 -name '*.php' | xargs perl -i.bkp -p -e 's/isso/aquilo/ig;'


O isso você troca pela variável que você quer trocar, e o aquilo pelo valor a ser escrito. A opção -maxdepth 1 faz com que a substituição aconteca somente no diretório onde o comando foi executado. Se quiser que ele rode recursivamente, basta tirar esta parte do comando. Após o comando perl, a opção -i.bkp cria um backup de todo arquivo modificado.



Se você quiser mais explicações sobre este uso do find consulte no site do Dicas-L (find).



Outro uso excelente que podemos fazer é para achar aquivos “sem dono“.


find / -nouser -print


E se você quiser apagar estes arquivos pode usar o comando assim:


find / -nouser -print | xargs rm

Mais uma do comando Find

Que procurar um texto entre vários arquivos de um diretório? use este comando:


find . -type f -exec grep "antes" {} \; -print


Fonte: Dicas-L

Precisa ativar o snmp do seu Linux?

Novamente estava precisando ativar o snmp dos meus boxs Linux, pois meu chefe vive fuçando e acabando com o meu serviço, dai resolvi deixar este post para facilitar a minha vida e de quem precisar ativar o snmp no Linux.

A instalação em si é muito simples, o complicado é o snmp.conf.
Para instalar em máquinas que utilizem o apt, admitindo que o seus sources.conf está OK, o comando é:


sudo apt-get install snmp snmpd (Ubuntu)


ou


sudo apt-get install net-snmp net-snmp-utils (Mandriva, Conectiva)


Se você tem alguma dúvida do nome do pacote utiliza este comando para achar o nome correto:


apt-cache search snmp

Este comando serve para procurar qualquer pacote do qual você não lembra o nome.


No Fedora Core 5, que por default utiliza o yum o comandofica assim:


yum search snmp (para procurar o pacote)
yum install net-snmp net-snmp-utils

Obs.: O apt-get tem uma performance muito maior que o yum, não se preocupem com a demora do yum, é assim mesmo.

Após a instalação, é só configurar o snmp.conf, como no exemplo abaixo:



#Definição da community e das rede que poderão acessar estas informações
## sec.name source community
## ======== ====== =========
com2sec local localhost geekguy
com2sec network_1 192.168.0.0/24 geekguy
com2sec network_2 192.168.1.0/24 geekguy
#Quem pode acessar e versão do snmp utilizada
## Access.group.name sec.model sec.name
## ================= ========= ========
group MyROGroup v2c local
group MyROGroup v2c network_1
group MyROGroup v2c network_2
#MIBs Disponíveis
## MIB.view.name incl/excl MIB.subtree mask
## ============== ========= =========== ====
view all-mibs included .1 80
# Define política de segurança
## MIB
## group.name context sec.model sec.level prefix read write notif
## ========== ======= ========= ========= ====== ==== ===== =====
access MyROGroup “” v2c noauth exact all-mibs none none

syslocation onde_esta_o_BOX # Se você quiser
syscontact Luciano Santos - john@doe.com # O seu email, tb se vc quiser

proc httpd 200 1 #verificar o processo, com o limite em 200, por exemplo
disk / 10000 #verificar o HD, com um mínimo de 10MB
load 12 14 14 #carga da CPU

#exec .1.3.6.1.4.1.2021.50 /bin/bash /usr/bin/sensors
#exec .1.3.6.1.4.1.2021.51 ps /bin/ps
#exec .1.3.6.1.4.1.2021.52 top /usr/local/bin/top
#exec .1.3.6.1.4.1.2021.53 mailq /usr/bin/mailq



Eu sugiro definir uma regrinha no iptables para permitir o acesso a porta 161 a somente as redes descritas acima no snmp.conf.

Bem é isso! Até mais pessoal.

Comando sudo

Um dos comandos mais úteis do Linux é o comando sudo.

Com ele é possível rodar programas como root sem comprometer a segurança do sistema. Assim, é possível, por exemplo, que um administrador do sistema não precisar ficar logando como root toda hora para alterar coisas importantes do sistemas. Outra aplicação é permitir que usuários sem privilégios rodem scripts, sem precisar ficar alterando estes scripts para permissão a todos os usuários.

Um exemplo de aplicação, no meu caso é rodar um script php que cadastra, remove e consulta meus usuários de email. Assim, o script php fica associado ao apache, que roda o web server, mas o comando roda um shell script que está associado ao vpopmail. Assim a segurança do servidor permanece, pois o apache só pode roda o script do vpopmail, via localhost, e somente este comando como root, mais nenhum.

Para o sudo funcionar se faz necessário editar o arquivo sudoers. Isto pode ser feito com o comando visudo. Este comando deve ser rodado como root. Após isto, abre um arquivo conf como este:



# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#
# Host alias specification
# User alias specification
# Cmnd alias specification
# Defaults specification
# Runas alias specification
# User privilege specification
root ALL=(ALL) ALL # Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL # Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL # Samples
# johndoe ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now
# %users localhost = NOPASSWD: /sbin/shutdown -h now


Como podemos ver, você pode definir o usuário (johndoe), ou um grupo (adicionando %, como em %users), o IP acompanhado pelo sinal de = e podendo ser com senha (do usuário) ou não, para a excecução do comando. Em outro momento vou passar uma explicação mais profunda do comando e os operados envolvidos no arquivo.

Alguns bons textos sobre o comando sudo:

LinuxSecurity

Courtesan example

sudo manual

Antivírus nos Sistemas *nix Like

Um leitor da Linha Defensiva fez uma pergunta interessante: “até hoje não encontrei ninguém que use antivírus em computadores com Linux. Vocês sabem dizer o porquê disso? Não é necessário realmente? E em outros sistemas operacionais, como FreeBSD, é necessário?”

A resposta mais curta é que o número de pragas existentes para esses sistemas não justificam a presença de um software antivírus no computador. Vírus, cavalos-de-tróia, adwares e spywares são, atualmente, problemas que afetam somente o Windows de forma significativa. Existem alguns motivos para isso — listamos o que acreditamos serem os três principais:

  1. O Windows é o sistema dominante e, sendo assim, o mais visado
  2. Plataformas Unix têm um sistema de permissão mais robusto que dificulta a ação de pragas digitais
  3. O usuário de Windows é, em geral, mais leigo que o usuário de Linux e portanto mais vulnerável aos ataques digitais

Ao invés de escolher apenas uma das afirmações acima, é mais correto afirmar que todos estes três pontos, de alguma forma, influenciam o atual cenário que envolve a criação de pragas digitais.

A influência do número de máquinas que rodam o sistema é às vezes contestada, mas válida na opinião de muitos. Servidores Linux são alvos mais comuns de vírus/backdoors do que desktops Linux, o oposto do que ocorre com o sistema da Microsoft. Como servidores Linux são comuns, tornam-se também alvos comuns.

A maioria dos usuários de Windows usa o sistema a partir de uma conta administrativa ao invés de uma conta limitada. O Windows XP utiliza por padrão uma conta de administrador, um erro da Microsoft que a empresa não quer repetir no Windows Vista. Programas mais antigos são dificilmente executados corretamente sem permissões administrativas, o que diminui ainda mais o incentivo do usuário em utilizar uma conta limitada e do desenvolvedor em tornar o software compatível com contas desse tipo. No Linux, é regra que os softwares devem funcionar perfeitamente em contas limitadas, que dificultam (mas não impossibilitam) a instalação de pragas digitais.

Usuários de Linux são geralmente mais experientes do que usuários de Windows, pois até mesmo fizeram uma escolha consciente sobre o seu sistema operacional. Muitos usuários de Windows sequer sabem exatamente o que é um sistema operacional. O usuário de Linux, portanto, é geralmente mais técnico do que o usuário comum do Windows e assim saberia diferenciar links maliciosos mais facilmente, o que significaria que e-mails falsos que tentam enganar usuários de Linux têm uma taxa menor de “retorno” para o criador da praga.

Vemos notícias de que alguns vírus são criados para o Linux, mas nenhum deles chega a causar qualquer estrago. É muito difícil que um “vírus de Linux” se espalhe, pois o número de máquinas rodando Linux é pequeno e isso diminui as chances de que o vírus encontre um sistema compatível.

Usuários de Linux, BSD e Mac não usam antivírus pelo simples motivo de que o problema de pragas digitais é praticamente inexistente nessas plataformas. O mesmo vale para outros sistemas menos conhecidos.

Não é possível afirmar nem negar que essa (quase) imunidade iria continuar se um dia esses sistemas obtiverem a quantidade de usuários que hoje o Windows tem, mas isso não deve ocorrer tão cedo.

Renomenando arquivos no console

Estou atualizando a galeria de fotos do site e me deparei com um problema. Várias fotos do Windows acabando vindo com espaços e caracteres inválidos. Também queria uma forma de deixar todos os caracteres minúsculos. Acabei encontando as seguintes dicas:
 for foo in *; do mv $foo `echo $foo | tr /[A-Z]/ /[a-z]/` ; done

fonte: www.vivaolinux.com.br

Eu acabei adaptando para poder criar um script que faz tudo de uma vez só no diretório em que é rodado.
#!/bin/bash
for foo in *; do mv $foo `echo $foo | tr /[A-Z]/ /[a-z]/` ; done
for foo in *; do mv $foo `echo $foo | tr " " "_"` ; done