Once upon a time, the computer company most hackers loved to hate; today, the one they are most puzzled to find themselves liking.
From hackerdom's beginnings in the mid-1960s to the early 1990s, IBM was regarded with active loathing. Common expansions of the corporate name included: Inferior But Marketable; It's Better Manually; Insidious Black Magic; It's Been Malfunctioning; Incontinent Bowel Movement; and a near-{infinite} number of even less complimentary expansions (see also {fear and loathing}). What galled hackers about most IBM machines above the PC level wasn't so much that they were underpowered and overpriced (though that counted against them), but that the designs were incredibly archaic, {crufty}, and {elephantine} ... and you couldn't fix them -- source code was locked up tight, and programming tools were expensive, hard to find, and bletcherous to use once you had found them.
We didn't know how good we had it back then. In the 1980s IBM had its own troubles with Microsoft and lost its strategic way, receding from the hacker community's view. Then, in the 1990s, Microsoft became more noxious and omnipresent than IBM had ever been.
In the late 1990s IBM re-invented itself as a services company, began to release open-source software through its AlphaWorks group, and began shipping {Linux} systems and building ties to the Linux community. To the astonishment of all parties, IBM emerged as a staunch friend of the hacker community and {open source} development, with ironic consequences noted in the {FUD} entry.
This lexicon includes a number of entries attributed to `IBM'; these derive from some rampantly unofficial jargon lists circulated within IBM's formerly beleaguered hacker underground.
Anywhere outside the kernel. "That code belongs in userland." This term has been in common use among Unix kernel hackers since at least 1985, and may have have originated in that community. The earliest sighting was reported from the usenet group net.unix-wizards.
The emerging {Linux}/Intel alliance. This term began to be used in early 1999 after it became clear that the {Wintel} alliance was under increasing strain and Intel started taking stakes in Linux companies.
Tux the Penguin is the official emblem of {Linux}, This eventuated after a logo contest in 1996, during which Linus Torvalds endorsed the idea of a penguin logo in a couple of famously funny postings. Linus explained that he was once bitten by a killer penguin in Australia and has felt a special affinity for the species ever since. (Linus has since admitted that he was also thinking of Feathers McGraw, the evil-genius penguin jewel thief who appeared in a Wallace & Grommit feature cartoon, The Wrong Trousers.)
Larry Ewing designed the official Tux logo. It has proved a wise choice, amenable to hundreds of recognizable variations used as emblems of Linux-related projects, products, and user groups. In fact, Tux has spawned an entire mythology, of which the Gospel According to Tux and the mock-epic poem Tuxowolf are among the best-known examples.
There is a `real' Tux -- a black-footed penguin resident at the Bristol Zoo. Several friends of Linux bought a zoo sponsorship for Linus as a birthday present in 1996.
Segurança: os 25 erros de programação mais perigosos
Os 25 erros de programação mais perigosos segundo a SANS
Saiu no site da SANS a lista criada com o consenso entre varios profissionais e empresas do ramo de segurança e desenvolvimento descrevendo os 25 erros de programação mais perigosos para o desenvolvimento seguro. Eu vou traduzir os nomes e informação básicos mas o melhor é ler o artigo na íntegra, em inglês.
Os erros estão separados em três categorias: Interação insegura entre componentes, Gerenciamento arriscado de recursos, Defensas porosas.
Categoria: Interação insegura entre componentes
Validação Imprópria de Entradas: Entradas que recebem dados e os aceitam mesmo sem certificar que eles são do tipo/formato esperado.
Codificação ou Escape Impróprios de Saída: Saídas que não são codificadas ou escapadas corretamente são a maior fonte de ataques de injeção de código.
Falha ao Preservar a Estrutura da Busca, SQL (conhecido como Injeção de SQL): Se os atacantes podem influenciar as procuras SQL do seu programa, então eles podem controlar o seu banco de dados.
Falha ao Preservar a Estrutura do Código da Página (conhecido como "Cross-site Scripting"): Assim como o anterior, se os atacantes podem injetar código ou scripts em sua página, eles podem controlar a página.
Falha ao Preservar a Estrutura de Comandos do Sistema Operacional: Se você permitir que entradas ilegais sejam passadas para aplicativos do sistema operacional, o atacante pode controlar o servidor.
Transmissão de Dados Sensíveis em Texto Puro: Senhas, dados de cartão e qualquer informação considerada sensível deve ser criptografada.
Falsificação de Requisição Entre Sites: Um atacante pode criar uma requisição que é enviada a outro site forjando a origem e fazendo o mesmo partir de um usuário inocente, aproveitando credenciais de autenticação e acessos.
Condição de Corrida: Atacantes vão sempre procurar por condições de corrida no software para conferir se alguma informação importante não é obtida no processo.
Vazamento de Informações em Mensagens de Erro: Atacantes vão procurar por mensagens de erro que descrevam mais que o necessário, como nomes de campos SQL, objetos e bibliotecas sendo utilizadas.
Categoria: Gerenciamento arriscado de recursos:
Falha ao Limitar Operações aos Limites de um Buffer de Memória: O conhecido buffer overflow.
Controle Externo de Dados Sensíveis: Informações críticas que são mantidas fora de um banco de dados por questões de performance não deviam ser facilmente acessíveis por atacantes.
Controle Externo de de Caminho ou Nome de Arquivo: Quando você usa dados externos para montar um nome de arquivo ou caminho de gravação, você está se arriscando a ser atacado.
Caminho de Procura Inseguro: Se o caminho de procura de recursos estiver em algum lugar sob controle de um atacante, bibliotecas ou código pode ser inserido a revelia.
Falha ao Controlar a Geração de Código: Caso o atacante consiga influenciar a geração de código dinâmico (se geração de código dinâmico for utilizada no programa) ele poderá controlar todo seu código.
Download de Código sem Verificação de Integridade: Se você executa código obtido por download, você confia na fonte. Atacantes podem aproveitar esta confiança.
Desligamento ou Liberação Impróprias de Recursos: Arquivos, conexões e classes precisam ser corretamente encerradas.
Inicialização Imprópria: Dados, bibliotecas e sistemas inicializados incorretamente podem abrir margens para problemas.
Cálculos Incorretos: Quando o atacante tem algum controle sobre as entradas usadas em operações matemáticas, isso pode gerar vulnerabilidades.
Categoria: Defensas porosas:
Controle de Acesso Impróprio: Se você não garante que seus usuários estão fazendo apenas o que deviam, os atacantes irão se aproveitar de sua autenticação.
Uso de um Algoritmo Criptográfico Quebrado ou Vulnerável: Utilização de algoritmos fracos ou comprometidos levam a falhas de criptografia e vulnerabilidades.
Senha no Código: deixar um usuário e uma senha no próprio código traz inúmeros problemas.
Permissão de Acesso Insegura para Recurso Crítico: Configurações, arquivos de dados e bancos de dados devem ter suas permissões de acesso protegidas.
Uso de Valores Insuficientemente Aleatórios: Se você usa tipos de segurança que dependem de aleatoriedade, usar um gerador aleatório insuficiente só vai causar problemas.
Execução com Privilégios Desnecessários: Se seu programa precisa de privilégios elevados para executar suas funções, ele deve abrir mão destes direitos assim que ele termina de executar as ações que precisavam dos privilégios.
Aplicação de Segurança do Lado do Servidor pelo Cliente: Atacantes podem usar engenharia reversa em um cliente de software e escrever seus próprios clientes removendo testes e aplicações de segurança.
America's Army is a professionally developed game for the US Army. It is one of the most popular online games and provides an authentic military experience. Technically this game isn't free as it was paid for using your tax dollars, but we won't go there.
Básicos
ls [-al]: listagem do diretório.
cp [-ir]: copiar arquivos.
mv [-i]: mover ou renomear arquivos.
rm [--]: remover arquivos.
mkdir/rmdir: cria/remove diretórios.
ln -s path link: cria links simbólicos (symlinks) para arquivos ou diretórios.
Outros comandos
file: determina o tipo do arquivo (/etc/magic).
cat: mostra o conteúdo do arquivo na tela.
head / tail: mostra linhas no inicio / fim do arquivo.
less / more: lista o conteúdo do arquivo.
man filename: manual online do programa.
ctrl+alt+del/reboot: reinicia o sistema.
shutdown -h now/halt: desliga o computador.
Combinações CTRL+C: sai (kill) do programa.
CTRL+ALT+BackSpace: sai (kill) do servidor X.
CTRL+L: limpa a tela.
CTRL+A / E: move o cursor para o início / fim da linha.
CTRL+U / K: remove da posição do cursor até o início / fim da linha.
CTRL+H: remove palavra anterior ao cursor.
CTRL+R: busca comando digitado no history do bash.
CTRL+D: logout (para isto altere ou unset a var. $IGNOREEOF).
Processos
CTRL+Z: suspende o processo temporariamente.
top: os processos que consomem mais recursos do sistema.
jobs: lista as tarefas rodando em fore/background.
bg/fg: manda processo para o back/foreground.
nice/renice: altera prioridades.
ps -auxw: lista todos os processos do sistema:
PID (process id), TTY (terminal ou ? caso seja um daemon), STAT (estado do processo), TIME (tempo de CPU consumido), COMMAND (o comando executado).
pstree -p: idem.
time: calcula o tempo decorrente do início ao término de um processo. # time updatedb real 1m42.233s user 0m0.490s sys 0m10.290s
Matando processos
kill: as opções mais comuns são (onde id é o mesmo que PID):
kill -HUP id-do-processo: reinicia processo.
kill -9 id-do-processo: mata processo.
killall processo: mata processo pelo nome.
killall -HUP processo: reinicia processo pelo nome.
Permissões
As permissões dos arquivos são definidas através dos comandos chmod, chown e chgrp.
Estrutura do comando:
chmod
Ao listar as informações de um arquivo ou diretório, o formato é o seguinte: drwxrwxrwx.
Respectivamente: diretório (d), permissão do dono (read/write/execute), do grupo (read/write/execute) e de outros (read/write/execute).
Por exemplo, para transformar um arquivo em executável:
• chmod +x nome_do_arquivo (executável para todos)
• chmod g+x nome_do_arquivo (executável para o grupo)
Para alterar o usuário e o grupo de um arquivo ou diretório:
• chown root.root /sbin/firewall.sh (-R: recursivamente)
Outros exemplos:
• chmod 755 (executável): -rwxr-xr-x
• chmod 4700 (suid) set user id para programas que precisam rodar com permissão de root: -rws------
Para calcular o valor numérico das permissões, basta considerar o valor do executavel como 1, de escrita como 2 e de leitura como 4, que seria o equivalente decimal aos bits:
rwx = 111 (todos bits ligados) = 2**2 + 2**1 + 2**0 = 7
Dessa forma, uma permissao de leitura e escrita (4+2) para o owner, e de leitura apenas para os outros teria o valor 644. Para calcular a umask, que seria a máscara de permissão aplicada na criação de um novo arquivo, basta então subtrair 666 (ou 777 para diretórios) resultando em umask 022.
Como se encontrar no sistema
Localizar arquivo por nome:
find [path...] -name [nome_do_arquivo]
find . -name slackware.png
find / -name "*.png" -print (arquivos png do dir. atual)
find /home -size +5000k -print (arquivos com mais de 5Mb)
Local de um binário:
whereis (ou which) [nome_do_arquivo]
which gcc
gcc: /usr/bin/gcc
Outros:
cd - : alternar entre diretórios
pwd: listar caminho atual
Criando arquivos compactados
>> tar.gz
É possível criar tarfile (tarball) da seguinte forma:
tar -c file1 file2 > foo.tar
Para 'zipar' o tar a mesma coisa:
gzip -c file1 file2 > foo.tar.gz
Ou então:
tar -cvzf diretorio.tar.gz diretorio/
tar.bz2
Troque o 'z' pelo 'j' para criar arquivos bzip2.
tar -jxvf arquivo.tar.bz2 (descompactanto bz2)
>> zip
zip -r filename.zip files
O editor vi(m)
a / i: adiciona texto (append/insert).
y / p: copiar e colar (copy/paste).
x: remover letra.
/: buscar palavra (n: next N: prev).
u: desfazer (undo).
v: selecionar texto (visual).
:edit file: cria novo buffer.
:ls: lista buffers.
:buffer N: edita buffer N.
:bdelete: remove buffer.
:so \$VIMRUNTIME/syntax/2html.vim: converte source em html.
:ab SW slackware: cria abreviação (abclear: remove abs.)
map :qa! : mapeia tecla (adicione em .vimrc)
Para gravar digite ESC seguido por :wq (write and quit), :q! (sair sem gravar) ou :qa! (fechar todos).
Image by Gea-Suan Lin via Flickr
Um cliente MySQL em Unix pode conectar ao servidor mysqld de dois modos diferentes: sockets Unix, que conectam através de um arquivo no sistema de arquivos (padrão /tmp/mysqld.sock) ou TCP/IP, que conecta através um número de porta. Sockets Unix são mais rápidos que TCP/IP mas só podem ser usados quando conectados ao servidor no mesmo computador. Sockets Unix são usados se você não especificar um nome de máquina ou se você especificar o nome de máquina especial localhost.
No Windows, se o servidor mysqld está rodando no 9x/Me, você só pode conectar via TCP/IP. Se o servidor estiver rodando no NT/2000/XP e o mysqld é iniciado com --enable-named-pipe, você também pode conectar com named pipes. O nome do named pipes é MySQL. Se você não der um nome de máquina quando conectar ao mysqld, um cliente MySQL tentará conectar primeiro ao named pipe, e se isto não funcionar ele irá conectar a porta TCP/IP. Você pode forçar o uso de named pipes no Windows usando . como nome de máquina.
O erro (2002) Can't connect to ... normalmente significa que não há um servidor MySQL rodando no sistema ou que você está usando um arquivo socket ou porta TCP/IP errado ao tentar conectar so servidor mysqld.
Inicie verificando (usando ps ou gerenciador de tarefas do Windows) que há um processo chamado mysqld executando em seu sistema! Se não houver nenhum processo mysqld, você deve iniciar um. Veja Secção 2.4.2, "Problemas Inicializando o Servidor MySQL".
Se um processo mysqld estiver em execução, você pode verificar o servidor tentando estas diferentes conexões (o número da porta e o caminho do socket devem ser diferente em sua consiguração, é claro):
shell> mysqladmin version
shell> mysqladmin variables
shell> mysqladmin -h `hostname` version variables
shell> mysqladmin -h `hostname` --port=3306 version
shell> mysqladmin -h 'ip for your host' version
shell> mysqladmin --protocol=socket --socket=/tmp/mysql.sock version
Note o uso de aspas para traz em vez de aspas para frente com o comando hostname; isto provoca a saída de hostname (que é, o nome de máquina atual) para ser substituído no comando mysqladmin.
Aqui estão algumas razões pela quais o erro Can't connect to local MySQL server pode ocorrer:
mysqld não está rodando;
Você está rodando em um sistema que usa MIT-pthreads. Se você estiver executando em um sistema que não possui threads nativas, o mysqld usa o pacote MIT-pthreads. Veja Secção 2.2.3, "Sistemas Operacionais suportados pelo MySQL". No entanto, nem todas as versões de MIT-pthreads suportam sockets Unix. Em um sistema sem suporte a sockets você sempre deve especificar o nome de máquina explicitamente ao conectar ao servidor. Tente usar este comando para verificar a conexão com o servidor:
shell> mysqladmin -h `hostname` version
Alguém removeu o socket Unix que o mysqld utiliza (por padrão /tmp/mysqld.sock). Você deve ter um trabalho cron que remove o socket MySQL (por exemplo, um trbalhoque remove arquivos antigos do diretório /tmp). Você sempre pode executar mysqladmin version e verificar que o socket que o mysqladmin está tentando usar realmente existe. A correção neste caso é alterar o trabalho cron para não remover mysqld.sock ou para colocar o socket em outro local. Veja Secção A.4.5, "Como Proteger ou AlterarHow to Protect or Change the MySQL Socket File /tmp/mysql.sock";
Você está usando Linux e uma thread finalizou (core dumped). Neste caso você deve matar as outras threads mysqld (por exemplo, com o script mysql_zap antes de você poder iniciar um novo servidor MySQL. Veja Secção A.4.1, "O Que Fazer Se o MySQL Continua Falhando";
Você pode não ter privilégios de leitura e escrita tanto no diretório que guarda o arquivo de socket quanto no próprio arquivo de socket. Neste caso você deve mudar o privilégio do diretório/arquivo ou reiniciar mysqld para que ele use um diretorio que você possa utilizar.
Se você obter a mensagem de erro Can't connect to MySQL server on alguma_maquina, você pode tentar o seguinte para descobrir qual é o problema:
Verifique se o servidor está funcionando fazendo telnet seu-servidor num-porta-tcp-ip e pressione Enter algumas vezes. Se houver um servidor MySQL em execução nesta porta você deve obter uma resposta que inclui o número da versão do servidor MySQL em execução. Se você obter um erro como telnet: Unable to connect to remote host: Connection refused, então não há nenhum servidor rodando na porta dada;
Tente conectar ao daemon mysqld na máquina local e verifique a porta TCP/IP que o mysqld está configurado para usar (variável port) com mysqladmin variables;
Verifique se o seu servidor mysqld não foi iniciado com a opção --skip-networking.
Resolvi montar essa pequena dica, sei que já existem várias, porém vou colocar algumas dicas do chmod, porque onde trabalho fizeram o favor de setar um chmod -R 777 na pasta /, aí o servidor ficou com permissão errada para todos os arquivos, tive que setar as permissões arquivo por arquivo comparando com outra máquina com mesmo sistema Slackware, pois não podíamoss desligar o servidor.
O primeiro caractere da string indica o tipo de arquivo. Se for "d" representa um diretório, se for "-" equivale a um arquivo.
d: diretório
b: arquivo de bloco
c: arquivo especial de caractere
p: canal
s: socket
-: arquivo normal
É necessário ter um certo cuidado com as permissões. Por exemplo, do que adianta o usuário ter permissão de gravação se ele não tem permissão de leitura habilitada? Ele poderá ler o arquivo para poder modificá-lo? Não! De certo, isso tem utilidade em arquivos de log.
Fazendo associação com as letras r, w, x e o caractere -, vamos entender cada uma:
r: significa permissão de leitura (read);
w: significa permissão de gravação (write);
x: significa permissão de execução (execution);
-: significa permissão desabilitada.
Atenção:
---: nenhuma permissão;
r--: permissão de leitura;
r-x: leitura e execução;
rw-: leitura e gravação;
rwx: leitura, gravação e execução.
Vamos supor que o arquivo estava assim:
crwxrwxrwx 1 root disk 37, 128 Dec 11 1995 nht0
Dessa forma ele está errado. Sua forma correta é:
crw-r----- 1 root disk 37, 128 Dec 11 1995 nht0
Usei o comando:
# chmod 640 nht0
Alterando as permissões de crwxrwxrwx para crw-r-----. Note que sempre as letras iniciais não mudam, ok?
O comando chmod -R seta as permissões no diretório e nos arquivos dentro dele, cuidado com isso, foi o que fizeram aqui no meu servidor.
Use assim:
$ chmod [número] [nomedoarquivo]
Exemplo:
# chmod 755 apache
Comando
Número
Permissão
chmod
000
---------
chmod
400
r--------
chmod
444
r--r--r--
chmod
600
rw-------
chmod
620
-rw--w----
chmod
640
-rw-r-----
chmod
644
rw-r--r--
chmod
645
-rw-r--r-x
chmod
646
-rw-r--rw-
chmod
650
-rw-r-x---
chmod
660
-rw-rw----
chmod
661
-rw-rw---x
chmod
662
-rw-rw--w-
chmod
663
-rw-rw--wx
chmod
664
-rw-rw-r--
chmod
666
rw-rw-r--
chmod
700
rwx------
chmod
750
rwxr-x---
chmod
755
rwxr-xr-x
chmod
777
rwxrwxrwx
chmod
4711
-rws--x--x
Outro detalhe, os símbolos:
u: usuário
g: grupo
o: outros
a: totos
Para mostrar como essa combinação é feita, vamos supor que você deseje adicionar permissão de gravação no arquivo teste.txt para um usuário. Então o comando a ser digitado será:
$ chmod u+w teste.txt
O "u" indica que a permissão será dada a um usuário. O sinal de adição (+) indica que está sendo adicionada a permissão e "w" indica que a permissão que está sendo dada é de gravação.
Caso você queira dar permissões de leitura e execução ao seu grupo, o comando será:
$ chmod g+rw teste.txt
vamos supor que o arquivo teste.old deverá estar com todas as permissões disponíveis para o grupo. Podemos usar então:
$ chmod g=rwx teste.txt
Usar o chmod com valores numéricos é algo bastante prático. Em vez de usar letras como símbolos para cada permissão, usam-se números. Se determinada permissão é habilitada, atribui-se valor 1, caso contrário, atribui-se valor 0. Sendo assim, a string de permissões r-xr----- na forma numérica fica 101100000. Essa combinação de 1 e 0 é um número binário.
Mas temos ainda que acrescentar a forma decimal (ou seja, números de 0 a 9). Para isso, observe a tabela abaixo:
Permissão
Binário
Decimal
---
000
0
--x
001
1
-w-
010
2
-wx
011
3
r--
100
4
r-x
101
5
rw-
110
6
rwx
111
7
Pra quem está começando agora vai ser um pouco complicado entender de uma vez isto, porém se você possui uma maquina com Linux, treine.
PHLAK é uma distribuição baseada em Linux que roda diretamente do CD. É voltada para análise e segurança de sistemas operacionais. O pacote inclui ferramentas de análise de rede, vulnerabilidades do sistema, ataques, entre outras.
O portal xoops.org, havia anunciado anteriormente o lançamento da versão 0.2. Mas ela foi disponibilizada apenas hoje. Vale a pena dar uma conferida.
O portal do PHLAK, escolheu o XOOPS como estrutura para o seu website
http://www.phlak.org
Ou ainda a materia no portal do xoops.org:
http://www.xoops.net.br/modules/news/article.php?storyid=1159