Posts de Fevereiro, 2007

Permissões de Arquivos em GNU/Linux

Fevereiro 21, 2007

Permissão é um conceito importantíssimo, principalmente para garantir a segurança do sistema contra acessos indevidos a arquivos importantes.
Todo arquivo do sistema pertence a um dono e a um grupo, podendo pertencer somente a um usuário ou fazer parte de um grupo de vários usuários. Estes dois parâmetros (dono do arquivo e grupo ao qual o arquivo pertence) é que determinam as permissões do arquivo, por quem o arquivo foi criado, que permissões foram dadas pelo dono, quem poderá acessá-lo e a forma de acesso de que irão dispor todos aqueles que fizerem operações com o arquivo, entre outros.

No Linux a implementação de permissões é feita para três grupos de usuários. São esses grupos:
O dono do arquivo, o grupo de trabalho ao qual o arquivo pertence e, finalmente, os demais usuários que não se encaixam nos dois grupos anteriores.
Esses dados podem ser visualizados através do comando ls -l e modificado através dos comandos chown, que muda o dono do arquivo e também o seu grupo; o comando chgrp é usado para mudar apenas o grupo do arquivo.

Como os dados são tratados como arquivos, mesmo que sejam apenas indicadores para dispositivos (por exemplo, /dev/mouse), as permissões fazem com que se possa proibir determinado usuário ou grupo de usuários de acessar algum recurso específico da máquina, como por exemplo recursos de áudio ou o acesso a um drive de disquetes. No entanto, o superusuário pode acessar qualquer arquivo ou dispositivo, independente de suas permissões.

Quando um arquivo é criado ele recebe certos valores de propriedade, como o UID do dono (normalmente o criador do arquivo), o valor de propriedade do grupo GID (geralmente o grupo a que o dono pertence quando o arquivo é criado) e outros valores de permissão de acesso derivados dos valores associados ao valor umask do dono, no momento da criação. Estes valores umask são definidos geralmente no arquivo /etc/profile com os seguintes valores:

Para o superusuário:

# umask 022

Para os demais usuários do sistema:

# umask 002

A umask funciona retirando permissões, ou seja, a permissão padrão do sistema seria 666, mas com um valor de 022, no caso do superusuário, teríamos 644 (666-022=644), o que significa que quando um arquivo for criado pelo superusuário ele vai ter suas permissões inicias em -rw-r-r–, permitindo escrita e leitura para o dono do arquivo e somente leitura ao grupo ao qual ele pertence e para os demais usuários do sistema.
Já no caso dos usuários comuns do sistema, todo arquivo iniciará sua vida com permissões 664 (666-002=664), o que significa leitura e escrita para o dono e para o grupo (no formato absoluto será -rw-rw-r–) e aos outros usuários do sistema permite apenas leitura.

Com o comando abaixo você terá informações sobre o arquivo:

$ ls -l arquivo

-rw-rw-r– 1 andre projeto 71815 2007-02-12 15:52 arquivo

O primeiro bit do campo -rw-rw-r– determina o seu tipo, pois tudo em um sistema Linux é tratado como se fosse arquivo, incluindo os diretórios, links e dispositivos do sistema.

Os principais tipos e seus significados são:

-: atributo de arquivo.

d: quando se trata de um diretório.

l: o arquivo é um link simbólico.

b: dispositivos de bloco.

c: dispositivos de caractere.

s: trata-se de um socket, atribuído para arquivos de comunicação e memória.

t: sticky bit.

O restante do campo indica as permissões para cada grupo. Os tipos de permissões para arquivos são:

r: leitura (copiar, imprimir, visualizar).

w: escrita (mover, apagar, modificar).

x: execução (programas, scripts, diretórios).

-: sem permissão.

E para os diretórios:

r: permite que você liste o conteúdo do diretório.

w: permite que você crie, altere a apague arquivos no diretório.

x: permite que você efetue buscas no diretório.

-: sem permissões para o diretório.

Estas permissões podem ser aplicadas para:

u: o dono do arquivo (user).

g: um grupo de usuários ao qual o arquivo pertence (group).

o: todos os usuários que não estão incluídos em nenhuma das duas categorias anteriores (others ou outros).

a: as permissões para todos (u+g+o).

O campo com o número 1 pode ter dois significados. Se for um arquivo, este número indica quantos hard links estão sendo apontados para ele, e neste caso, existe apenas um só: o arquivo apontando para ele mesmo. Se for um diretório, indica quantos subdiretórios existem.
A seguir, os campos andre e projeto mostram o nome do usuário e do grupo no qual o arquivo se encontra. Caso o usuário dono do arquivo ou o seu grupo não estejam adicionados ao sistema, serão visualizados os números de UID (User Identification) e GID (Group Identification) do arquivo.

Enfim, os últimos campos indicam o tamanho do arquivo, a data e o horário em que ele foi pela última vez modificado e o nome do arquivo.

O dono do arquivo tem total controle sobre todos os seus parâmetros a qualquer hora; se um usuário não for o dono do arquivo mas pertencer ao grupo, poderá acessá-lo mas não poderá restringir ou permitir acessos ao arquivo.

Se o usuário tem permissões de escrita no diretório e tentar apagar um arquivo que não tenha permissão de escrita, o sistema perguntará se ele confirma a exclusão do arquivo apesar do modo leitura. Caso tenha permissões de escrita no arquivo, o arquivo será apagado por padrão sem mostrar nenhuma mensagem de erro. Por outro lado, mesmo que se tenha permissões de escrita em um arquivo mas não se tenha permissões de escrita em um diretório, a exclusão do arquivo será negada.

Isto mostra que é levada mais em consideração a permissão de acesso do diretório do que as permissões dos arquivos e subdiretórios que ele contém. Esta característica é muitas vezes ignorada por muitas pessoas e expõe o sistema a riscos de segurança. Imagine o problema que algum usuário que não tenha permissão de escrita em um arquivo mas que a tenha no diretório pode causar em um sistema mal administrado.

As mudanças aplicadas em diretórios também podem ser feitas recursivamente, ou seja, alterando todos os arquivos e diretórios contidos no diretório. Para isso, basta usar os comandos chown e chgrp com o parâmetro -R.

Além destas permissões, existe uma permissão especial que permite que usuários possam executar arquivos de outros donos, com as permissões destes últimos. É o chamado suid bit.

Exemplo utilizando o SUID

# chmod a+s teste.sh

Com esta linha de comando, o arquivo teste.sh pode ser executado por qualquer usuário (parâmetro a – all), utilizando as permissões do dono do arquivo.

Além da identificação do usuário para a execução de um arquivo, esta identificação pode ser configurada também para um grupo de usuários (SGID).

Configurando permissões com chmod:

Um detalhe interessante deste comando é que você pode configurar permissões de duas maneiras: simbolicamente e numericamente. Primeiramente veremos o método simbólico.

Para ter uma visão mais clara da forma simbólica com o chmod, imagine que tais símbolos se encontram em duas listas, e a combinação deles gera a permissão:

Lista 1
Símbolo
u => usuário
g => grupo
O (letra o maiúscula) => outro
a => todos

Lista 2
Símbolo
r => leitura
w => gravação
x => execução

Para poder combinar os símbolos destas duas listas, usam-se os operadores:

+ (sinal de adição) => adicionar permissão
- (sinal de subtração) => remover permissão
= (sinal de igualdade) => definir permissão

Para mostrar como essa combinação é feita, vamos supor que você deseje adicionar permissão de gravação no arquivo teste.old para um usuário. Então o comando a ser digitado será:

chmod u+w teste.old

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.old

Agora, 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.old

Usando chmod com o método numérico

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

Como o sistema binário somente trabalha com os números 0 e 1 (decimal trabalha com os números de 0 a 9, ou seja, é o sistema de numeração que utilizamos no nosso dia-a-dia), ele precisa de uma seqüência para representar os valores. Sendo assim, na tabela acima, a coluna Binário mostra como são os valores binários dos números de 0 a 7 do sistema decimal.

Para exemplificar, vamos utilizar a permissão rw-, cujo valor em binário é 110, que por sua vez, em decimal corresponde ao número 6. Então, em vez de usar rw- ou 110 para criar a permissão, simplesmente usa-se o número 6.
Repare então que com o método numérico, usamos somente um dígito para representar uma permissão, ao invés de três. Com isso a string de permissões r–r–r– pode ser representa por 444, pois r– em decimal é igual a quatro.

Observe o exemplo abaixo:

chmod 600 arquivo.txt

Acima, estão sendo dadas as permissões rw——- ao arquivo arquivo.txt, pois 6 equivale a rw- e 0 equivale a —. Como zero aparece duas vezes, forma-se então o valor 600. Faça o comando acima com um arquivo de teste e depois digite ls- l arquivo.txt e veja o retorno.

A tabela abaixo mostra as configurações de permissões mais usadas:

——— => 000
r——– => 400
r–r–r– => 444
rw——- => 600
rw-r–r– => 644
rw-rw-r– => 666
rwx—— => 700
rwxr-x— => 750
rwxr-xr-x => 755
rwxrwxrwx => 777

fonte:
http://www.conectiva.com
http://www.infowester.com

Configuração básica de rede em sistemas GNU/Linux

Fevereiro 20, 2007

A configuração da rede envolve básicamente três passos:

1- Carregar o módulo correto para a placa de rede e certificar-se que o sistema o utilizou para habilitar a interface eth0.

2- Configurar o IP, máscara de rede, etc. usando o ifconfig.

3- Configurar a rota padrão e colocar o DNS do provedor no arquivo /etc/resolv.conf.

Tudo isto pode ser feito diretamente através de comandos de terminal. Depois de testar a configuração você pode torná-la definitiva adicionando os mesmos comandos a um dos arquivos de inicialização do sistema.
Esta dica pode ser usada em qualquer distribuição GNU/Linux, sempre que as ferramentas de configuração falharem.

Em primeiro lugar, verifique se o módulo que habilita o suporte à sua placa de rede está carregado.

Use o comando lsmod:

Um exemplo de saida do comando:

Module Size Used by:
soundcore 11232 1 snd
sis900 25856 0
mii 6912 1 sis900
serio_raw 8452 0
snd_page_alloc 11400 2 snd_intel8×0,snd_pcm
psmouse 41352 0
slamr 436392 2

No meu caso a placa é uma Sis, e o módulo que habilita suporte a ela é o Sis900.

O próximo passo é configurar o arquivo /etc/modules.conf, para ter certeza que o módulo está sendo usado para habilitar a interface de rede.
Se você tem apenas uma placa de rede então ela será sempre a eth0.
Abra o arquivo /etc/modules.conf e adicione a linha:

# alias eth0 sis900

Trocando o sis900 pelo módulo usado pela sua placa.

Caso o módulo da placa não estivesse carregado, você poderia ativá-lo usando o modprobe, como em:

# modprobe sis900

Em seguida, falta fazer a configuração da rede. A melhor opção para fazer a configuração manualmente é usar o ifconfig:

# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up

Este configura o endereço IP e a máscara de sub-rede. O “up” serve para ativar a rede.

# route del default

# route add default eth0

Para ter certeza que o sistema tentará acessar a net usando a placa eth0.

# route add default gw 192.168.0.1

Aqui vai a configuração do gateway da rede.

Verifique também se o arquivo /etc/resolv.conf contém os endereços DNS do provedor, como em:

nameserver 200.202.193.76

nameserver 200.222.0.35

Os endereços são correspondentes ao Ig

A falta dos endereços no /etc/resolv.conf é provavelmente a causa mais comum de problemas com a navegação.

Para que estes comandos sejam executados durante o boot, restaurando a configuração, coloque-os no final do arquivo /etc/init.d/bootmisc.sh. No caso do Ubuntu e outros derivados do Debian, ou no arquivo /etc/rc.d/rc.local no caso de outras distribuições.

Segue abaixo os comandos:

modprobe sis900
ifconfig eth0 192.168.0.1
netmask 255.255.255.0 up
route del default
route add default eth0
route add default gw 192.168.0.1

Caso você esteja configurando um servidor com várias placas de rede, cada uma ligada a um hub diferente, com a rede dividida em várias sub-redes com IP’s diferentes, você pode usar o comando route desta forma:

route add -net 192.168.1.0
netmask 255.255.255.0 eth1
route add -net 192.168.2.0
netmask 255.255.255.0 eth2
route add -net 192.168.3.0
netmask 255.255.255.0 eth3
route add default eth0

Neste caso estamos dizendo que o sistema tem 4 placas de rede instaladas, eth0, eth1, eth2 e eth3, sendo que a eth0 está ligada na conexão com a Web e as outras 3 são placas ligadas à três redes diferentes, sendo um hub ou switch separado para cada placa, formando três redes locais separadas que usam as faixas de IP’s 192.168.1.x, 192.168.2.x e 192.168.3.x, as três com a máscara de sub-rede 255.255.255.0.

Estas linhas também podem ser incluídas no script de configuração da rede.

Fonte: http://www.guiadohardware.net

Instalação Plugin TomCat no Eclipse.

Fevereiro 20, 2007

Acessem a url:

http://www.sysdeo.com/sysdeo/eclipse/tomcatplugin

baixem o arquivo correspondente a sua versão do Eclipse/TomCat e
descompacte na pasta Plugins no diretorio de instalação do seu
Eclipse (instalação padrão de plugins no Eclipse).

Apos isso é só reiniciar a IDE e configurar conforme a versão do
TomCat que você tem instalada.

Com a instalação deste plugin, você poderá controlar o servidor e
também executar/debugar suas aplicações web sem problemas, direto da
sua IDE.(como acontece no NetBeans).

Para mais detalhes da instalação/configuração/execução, acessem
este endereço.

https://www.dev.java.net/files/documents/353/13028/eclipse_tomcat.swf

Note que haverá alterações na forma de configuração,
principalmente em relação as versões dos softwares.
O meu funfou, com poucas alterações.

Fontes TrueType no Debian/Ubuntu GNU/Linux

Fevereiro 14, 2007

Para instalar fontes TrueType, siga os seguintes procedimentos:

Atualize sua lista de pacotes, caso já não tenha feito:

# apt-get update

Instale o novo pacote:

# apt-get install msttcorefonts

Após a instalação, algumas fontes (as mais comuns como Arial, Verdana, Courier New, etc) serão baixadas da internet automaticamente.

Essas fontes ficarão em /usr/share/fonts/truetype/msttcorefonts e você pode adicionar outras (*.ttf) dentro deste mesmo diretório. Basta reiniciar o xfstt (servidor de fontes) e o X (modo gráfico) para que as alterações entrem em vigor.

Lembre-se que muitas fontes possuem licenças e algumas empresas/pessoas não permitem violá-las.

Como usar o APT – Configurações Básicas

Fevereiro 14, 2007

O arquivo /etc/apt/sources.list

Para seu funcionamento, o APT utiliza-se de um arquivo que lista as `fontes’ de onde ele obterá os pacotes. Esse arquivo é o /etc/apt/sources.list.
As entradas desse arquivo são normalmente formadas assim:

deb http://host/debian distribuição seção1 seção2 seção3
deb-src http://host/debian distribuição seção1 seção2 seção3

Não se esqueça de rodar apt-get update depois de modificar o arquivo /etc/apt/sources.list.
Você precisa fazer isso para que o APT obtenha as listas de pacotes das fontes que você especificou.

Colocando um CDROM na sources.list

Se você preferir usar um CDROM para instalar seus pacotes ou atualizar seu sistema automaticamente com o APT, você pode colocá-lo na sua sources.list. Para fazer isso, rode o apt-cdrom assim:

# apt-cdrom add

Atualizando a lista de pacotes disponíveis

O sistema de empacotamento usa um banco de dados próprio para saber quais pacotes estão instalados, quais não estão e quais estão disponíveis para instalação. O apt-get usa esse banco de dados para saber instalar os pacotes solicitados pelo usuário e para saber quais pacotes são necessários para que o pacote selecionado rode perfeitamente.
Para atualizar essa lista, você usa o comando apt-get update. Ele procura pelas listas de pacotes nos repositórios indicados no seu arquivo /etc/apt/sources.list.
É útil executar esse comando regularmente para saber de possíveis atualizações nos pacotes, principalmente de segurança.

Instalando pacotes

Finalmente um dos processos mais esperados! Com sua sources.list preparada e a lista de pacotes disponíveis, basta rodar o apt-get para ter seu pacote instalado. Por exemplo você pode fazer:

# apt-get install xchat

O APT vai buscar então em seu banco de dados a versão mais nova desse pacote e vai baixá-la do repositório correspondente na sources.list. Caso esse pacote dependa de algum outro — o que é o caso aqui — o APT irá conferir as dependências e instalar os pacotes necessários.

Quando existe dependencias, o APT as vai buscar no repositório. Se você tivesse especificado os nomes dessas bibliotecas na linha de comando do apt-get, o APT não teria perguntado se devia continuar ou não, ele tomaria como certo o seu desejo em instalar todos aqueles pacotes.
Isso significa que o APT só pede confirmação quando precisar instalar pacotes além daqueles que foram solicitados para suprir uma dependência.

As seguintes opções podem ser de utilidade:

-h – ajuda
-d – baixar arquivos apenas, não instalar
-f – conserta erros de instalações de pacotes
-s – não agir, apenas simular operação
-y – assume `sim’ para todas as perguntas
-u – mostrar pacotes que serão atualizados também

Múltiplos pacotes podem ser solicitados em uma única linha de comando. Os arquivos baixados da rede são colocados no diretório /var/cache/apt/archives para serem instalados depois.

Você pode especificar pacotes para remoção na mesma linha de comando. Para isso, basta colocar um ‘-’ logo depois do nome do pacote a ser removido, assim:

# apt-get install nautilus gnome-panel-

Caso você de alguma forma danifique a instalação de um pacote, ou simplesmente deseja que os arquivos do pacote sejam repostos com a versão mais nova que estiver disponível, você pode usar a opção –reinstall assim:

# apt-get –reinstall install gdm

Removendo pacotes

Caso você não esteja mais querendo usar um pacote, você pode removê-lo do seu sistema usando o APT. Para isso basta usar: apt-get remove pacote. Por exemplo:

# apt-get remove gnome-panel

No exemplo acima, o APT cuida também de retirar os pacotes que dependem do pacote sendo removido. Não há como remover pacotes sem remover os que são dependentes dele.

Rodando o apt-get como acima vai levar à remoção dos pacotes, mas seus arquivos de configuração, caso existam, permanecerão intactos. Para uma remoção completa, faça:

# apt-get –purge remove gnome-panel

Assim como no caso do método install, você pode usar um sinal gráfico para fazer o processo inverso. No caso da remoção, se você adicionar um sinal ‘+’ logo depois do nome do pacote, ao invés de removido ele será instalado. Exemplo:

# apt-get –purge remove gnome-panel nautilus+

Atualizando os pacotes

A atualização de pacotes é um grande trunfo do sistema APT. Ela é feita com um simples comando: apt-get upgrade. Você pode atualizar tanto pacotes dentro de uma mesma distribuição quanto atualizar para uma nova distribuição, mas, para essa última, o comando apt-get dist-upgrade é melhor.
É útil usar sempre a opção -u para esse comando. Essa opção faz com que o APT mostre os pacotes que serão atualizados. Sem ela você vai fazer uma atualização no escuro. O APT irá baixar as últimas versões de cada pacote e as instalará numa ordem coerente. É sempre importante rodar o apt-get update antes.

# apt-get -u upgrade

Esse processo é muito simples. você notará que logo no início, o apt-get diz que alguns pacotes foram kept back. Isso significa que eles têm novas versões que não serão instaladas por algum motivo. Alguns deles são: dependências quebradas (um pacote do qual ele depende não tem uma versão disponível para ser baixada), novas dependências (o pacote passou a depender de novos pacotes desde a última versão).
O primeiro motivo não tem solução limpa, para o segundo basta rodar um apt-get install específico para o pacote, que baixará suas dependências. Outra solução, ainda mais limpa, é usar o dist-upgrade.

Atualizando para uma nova distribuição

Essa característica do APT serve para atualizar uma distribuição inteira de uma única tacada, através da internet ou de um novo CD adquirido, ou uma ISO baixada.
Ela é usada também quando mudanças são feitas na interrelação de pacotes já instalados que devem ser atualizados mas são mantidos inalterados (kept back).
Por exemplo, supondo que você está usando a versão estável do Debian revisão 0 e compre o CD com a revisão 3, você pode usar o APT para atualizar seu sistema a partir desse novo CD.
É importante notar que o APT sempre busca as versões mais novas dos pacotes. Portanto, se seu arquivo /etc/apt/sources.list estiver listando um repositório que tenha uma versão mais nova de determinado pacote que contém o CD, ele tenderá a buscá-lo de lá.

# apt-get -u dist-upgrade

Obtendo informações sobre os pacotes.

Existem alguns programas, conhecidos como front-ends para o sistema APT que facilitam em muito a listagem dos pacotes disponíveis para instalação, os instalados, em quais seções se encontram, quais suas prioridades, descrições, etc.
Mas… nossa intenção aqui é aprender a usar o APT puro. Então o que fazer para descobrir o nome do pacote que você pode querer a vir instalar?
Para isso temos uma série de recursos. Vamos começar com o apt-cache. Esse programa é usado pelo sistema APT para manter seu banco de dados. Nós vamos entrar apenas nos aspectos práticos dele.

Descobrindo nome dos pacotes

Por exemplo, suponha que você está com vontade de relembrar os bons tempos do atari 2600. Você quer usar o APT para instalar um emulador de atari e depois baixar alguns jogos. Você pode fazer:

# apt-cache search atari
atari-fdisk-cross – Partition editor for Atari (running on non-Atari)
circuslinux – The clowns are trying to pop balloons to score points!
madbomber – A Kaboom! clone
tcs – Character set translator.
atari800 – Atari emulator for svgalib/X/curses
stella – Atari 2600 Emulator for X windows
xmess-x – X binaries for Multi-Emulator Super System

Achamos então vários pacotes relacionados ao que queremos e breves descrições.

Para ter mais informações sobre um pacote, posso, então, usar:
# apt-cache show stella
Package: stella
Priority: extra
Section: non-free/otherosfs
Installed-Size: 830
Maintainer: Tom Lear
Architecture: i386
Version: 1.1-2
Depends: libc6 (>= 2.1), libstdc++2.10, xlib6g (>= 3.3.5-1)
Filename: dists/potato/non-free/binary-i386/otherosfs/stella_1.1-2.deb
Size: 483430
MD5sum: 11b3e86a41a60fa1c4b334dd96c1d4b5
Description: Atari 2600 Emulator for X windows
Stella is a portable emulator of the old Atari 2600 video-game console
written in C++. You can play most Atari 2600 games with it. The latest
news, code and binaries for Stella can be found at:
http://www4.ncsu.edu/~bwmott/2600

Note, que a primeira a ser listada é a disponível e a segunda, a que já se encontra instalada.

Como descobrir a qual pacote um arquivo pertence

Se você quer instalar um pacote e não consegue achar o seu nome usando o apt-cache mas sabe o nome do arquivo do programa ou de algum outro arquivo que pertence ao pacote pode usar o apt-file para encontrar o nome do pacote. Isso é feito assim:

$ apt-file search nomedoarquivo

Onde consigo ajuda?

http://www.debian.org
http://focalinux.cipsga.org.br
http://debian-br.cipsga.org.br

Fonte:

http://www.debian.org