sexta-feira, dezembro 28, 2007

Mandando mensagens pelo terminal para outro usuario conectado no servidor

Esta é uma dica para SysAdmin's mas que também pode ser utilizada por usuarios linux normais conectados a um mesmo servidor...

Isso me é muito útil, pois muitas vezes preciso falar com um outro administrador que poder estar em outra sala, andar do predio, cidade ou até mesmo em outro país ou pode ser um usuário comum que também não estando perto esta conectado remotamente no mesmo servidor Linux, através dele podemos trocar mensagens, sem parar o que estamos fazendo.

Para fazer isso, primeiro digite no console ou terminal:

# w

Deve aparecer algo do tipo:
09:25:01  up 18:39,  1 user,  load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
iconradi pts/1 iconradi.lts.ece 14:40 0.00s 0.02s 2.33s gnome-terminal --geometry=70x20+110+500
iconradi pts/3 iconradi.lts.ece 13:17 8.00s 0.03s 0.02s ssh 192.168.1.209 -l root
iconradi pts/4 iconradi.lts.ece 15:03 11.00s 0.01s 0.00s ssh 200.146.61.145 -l root
iconradi pts/9 iconradi.lts.ece 15:20 2:54m 0.13s 0.11s ssh 192.168.1.25 -l root


Isso quer dizer que existe um usuário chamado iconradi em pts/1, pts/3, pts/4, pts/9. Com isso você digita:

# mesg y

Para habilitar a troca de escrita pelo seu terminal e depois você manda a mensagem da seguinte forma:

# write iconradi pts/1

O pts/1 é opcional, mas recomendo usar, pois o usuário esta em vários TTY'S.

Para sair da troca de mensagens é só apertar CTRL + c.

Não esqueça de mandar uma mensagem para o outro usuário falando para ele usar o comando "mesg y" antes do write.

Se você quiser fazer um teste, use seu usuário e TTY no comando write que funciona!

[]'s

Placa Mãe Abit KN9-SLI


As imagens são meramente ilustrativas

Placa Mãe Abit KN9-SLI ( 2 DDR 2, 2 PCI - Express e 2 Rede)

Descrição:

Socket AM2
Socket AM2 is a processor socket for AMD? desktop CPUs, introduced in May 2006. One major improvement of the Socket AM2 is the support for dual channel DDR2 memory. Dual channel DDR2 offers 30% higher bandwidth while considerably lowering power consumption. This also results in less heat build-up thereby putting less stress on your system.

Dual Channel DDR2
This is the latest generation of DDR memory. It effectively doubles data transfer rate and bandwidth of DDR2 memory. To make optimal use of the Dual Channel capability a pair of identical memory modules must be placed in matching DIMM sockets. Those are color coded.

SLI?
The Scalable Link Interface is a technology developed by nVidia? to link two or more graphics cards together. The linked graphics cards will effectively work as one graphic processing unit thereby potentially doubling the graphics processing power. To use SLI?, you can only use one graphics output and cannot use dual or multi-monitor output.

PCI Express also called PCIe
PCI Express is the next generation local interconnect on a motherboard. It effectively started supplementing the older PCI and AGP bus and has become the prevailing interconnect standard. End users in general get in general associate with PCI Express a graphics card slot on the motherboard. Here PCIe x8 or PCIe x16 are the most seen standards. PCIe in the meantime has replaced the AGP slot for graphics cards.

quinta-feira, dezembro 13, 2007

Permissões

Introdução

As permissões são um dos aspectos mais importantes do Linux (na verdade, de todos os sistemas baseados em Unix). Elas são usadas para vários fins, mas servem principalmente para proteger o sistema e os arquivos dos usuários.
Somente o super-usuário (root) tem ações irrestritas no sistema, justamente por ser o usuário responsável pela configuração, administração e manutenção do Linux. Cabe a ele por exemplo, determinar o que cada usuário pode executar, criar, modificar, etc. Naturalmente, a forma usada para determinar o que o usuário pode fazer é a determinação de permissões.
Um ponto interessante de citar é que o Linux trata todos os diretórios como arquivo também, portanto, as permissões se aplicam de igual forma para ambos. Tais permissões podem ser divididas em quatro partes para indicar: tipo, proprietário, grupo e outras permissões. O primeiro caractere da string indica o tipo de arquivo: se for "d" representa um diretório, se for "-" equivale a um arquivo. Entretanto, outros caracteres podem aparecer, já que existem outros tipos de arquivo no Linux, conforme mostra a tabela abaixo:

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

A ordem em que as permissões devem aparecer é rwx.

Muitas vezes a pessoa não sabe o que está fazendo quando dá uma permissão 777 ou 455 para um arquivo. Vou explicar mais a fundo o funcionamento do chmod.

Um 'ls -la' no Linux tem o seguinte output:

drwxr-xr-x 2 root root 4096 Set 22 10:08 temp
-rwxrwxr-x 1 garcia garcia 1088 Jul 5 16:17 torpedo
-rw-rw-r-- 1 garcia garcia 18283 Ago 3 13:10 videoteca.tar.gz
-rw------- 1 garcia garcia 4857 Ago 11 11:46 .viminfo
drwxr-xr-x 2 garcia garcia 4096 Jul 15 11:34 vlc
-rw-rw-r-- 1 garcia garcia 14872515 Jul 15 11:30 vlc-binary.tar.gz
drwxr-xr-x 2 garcia garcia 4096 Mar 4 2004 webalizer-2.01-10-x86

Então, fica subdividido dessa forma:

d rwx rwx rwx

1. d: tipo de arquivo (diretório);
2. rwx: permissões do proprietário e/ou usuário;
3. rwx : permissões para usuários do mesmo grupo;
4. rwx: permissões para todos usuários.


Configurando permissões com chmod
Acima, você dever tido pelo menos uma noção do que são permissões e sua importância no Linux. Chegou a hora de aprender a configurar permissões e isso é feito através do comando chmod (de change mode). 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 => totos
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

Também se pode trabalhar com valores decimais de 0 a 7. Cada valor tem uma combinação de permissões pelos 3 grupos de caracteres que expliquei acima. Vamos à elas.

0 : --- (nenhuma permissão)
1 : --x (somente execução)
2 : -w- (somente escrita)
3 : -wx (escrita e execução)
4 : r-- (somente leitura)
5 : r-x (leitura e execução)
6 : rw- (leitura e escrita)
7 : rwx (leitura, escrita e execução)


# chmod 640 arquivo.ext
Atribui permissão de leitura e escrita (6) para o dono do arquivo, somente leitura para usuários do mesmo grupo (4) e nenhuma permissão para outros usuários (0).


Para vc não perder dono e grupo definidos anteriormente, use o número 4 antes das permissões:
# chmod -R 4777 pasta

Só o dono do arquivo possa removê-lo
#chmod -R 1777 pasta


Status

Estar letras que aparecem junto com as permissoes (chmod u=rwx), são chamadas de status. Abaixo segue algumas dicas interessantes a respeito dos tipos de status. Para maiores informaçoes, você pode acessar a manpage stat.

Sequencia de formatos validos para arquivos (sem filesystem)
%a acesso direita octal
%F tipo de arquivo
%f cru modalidade hex
%G nome do proprietário do grupo
%g ID do proprietario do grupo
%n nome do arquivo
%U nome do proprietario
%u id do proprietario
%x horario do ultimo acesso
%y da última vez da modificação
Sequencia de formatos validos para file system
%a blocos livres para usuarios comuns
%b tamanho de um arquivo do sistema
%n nome do arquivo


Para apagar todas as permissões da pasta do fulano
# chmod a-rwx

Para fazer com que só o fulano mexa nos seus arquivos:
# chmod u=rwx

é o mesmo que
chown fulano.fulano -R /home/fulano
chmod 740 -R /home/fulano


chgrp
Muda o grupo de um arquivo/diretório.
chgrp [opções] [grupo] [arquivo/diretório]
Onde:
grupo
Novo grupo do arquivo/diretório.
arquivo/diretório
Arquivo/diretório que terá o grupo alterado.
opções
-c, --changes
Somente mostra os arquivos/grupos que forem alterados.
-f, --silent
Não mostra mensagens de erro para arquivos/diretórios que não puderam ser alterados.
-v, --verbose
Mostra todas as mensagens e arquivos sendo modificados.
-R, --recursive
Altera os grupos de arquivos/sub-diretórios do diretório atual.


chown
Muda dono de um arquivo/diretório. Opcionalmente pode também ser usado para mudar o grupo.
chown [opções] [dono.grupo] [diretório/arquivo]
onde:
dono.grupo
Nome do dono.grupo que será atribuído ao diretório/arquivo. O grupo é opcional.
diretório/arquivo
Diretório/arquivo que o dono.grupo será modificado.
opções
-v, --verbose
Mostra os arquivos enquanto são alterados.
-f, --supress
Não mostra mensagens de erro durante a execução do programa.
-c, --changes
Mostra somente arquivos que forem alterados.
-R, --recursive
Altera dono e grupo de arquivos no diretório atual e sub-diretórios.
O dono.grupo pode ser especificado usando o nome de grupo ou o código numérico correspondente ao grupo (GID).
Você deve ter permissões de gravação no diretório/arquivo para alterar seu dono/grupo.
chown joao teste.txt - Muda o dono do arquivo teste.txt para joao.
chown joao.users teste.txt - Muda o dono do arquivo teste.txt para joao e seu grupo para users.
chown -R joao.users * - Muda o dono/grupo dos arquivos do diretório atual e sub-diretórios para joao/users (desde que você tenha permissões de gravação no diretórios e sub-diretórios).


UMASK

O umask (máscara de criação de arquivos) é responsável por controlar as permissões padrão dos arquivos.O umask é uma espécie de filtro pelo qual os arquivos passam para determinar quais permissões permanecem neles. Se o valor da permissão for verdadeiro, continua no arquivo, caso contrário, deverá sair.

Se você usar o comando umask sem parâmetros será mostrado o valor atual que este comando está usando:

[usuario@localhost]# umask
002

Se você quiser alterar este valor você deve usar o comando umask com o valor da máscara como argumento:

[usuario@localhost]# umask
222

Para descobrir como o comando umask funciona você deve observar os bits da máscara, e não somente o número octal.

Veja os exemplos do comando umask para a criação de arquivos:


rwx rwx rwx rwx rwx rwx
umask=022 000 010 010 umask=133 001 011 011
=========== ===========
rw- r-- r-- rw- r-- r--



Você deve oberservar que o bit 0 liga uma permissão e que o bit 1 desliga uma permissão. Mas você deve ter notado que o bit "x" foi desligado, mesmo tendo a permissão 0. Isso é uma proteção do Linux, que não deixa criar nenhum arquivo com a permissão de executável. Se você quiser criar um arquivo executável deverá fazê-lo através do comando chmod. Isso é uma proteção muito boa, pois evita que vírus ataquem o sistema.

Veja o mesmo exemplo para a criação de diretórios:

rwx rwx rwx rwx rwx rwx
umask=022 000 010 010 umask=133 001 011 011
=========== ===========
rwx r-x r-x rw- r-- r--


Para descobrir como o comando umask funciona você deve observar os bits da máscara, e não somente o número octal.

Veja os exemplos do comando umask para a criação de arquivos:


rwx rwx rwx rwx rwx rwx
umask=022 000 010 010 umask=133 001 011 011
=========== ===========
rw- r-- r-- rw- r-- r--


A umask (user mask) são 3 números que definem as permissões iniciais do dono, grupo e outros usuários que o arquivo/diretório receberá quando for criado ou copiado. Digite umask sem parâmetros para retornar o valor de sua umask atual.

A umask tem efeitos diferentes caso o arquivo que estiver sendo criado for binário (um programa executável) ou texto (Arquivo texto e binário, Seção 2.2.3) . Veja a tabela a seguir para ver qual é a mais adequada a sua situação:

---------------------------------------------
| | ARQUIVO | DIRETÓRIO |
| UMASK |----------------------| |
| | Binário | Texto | |
|------------------------------|------------|
| 0 | r-x | rw- | rwx |
| 1 | r-- | rw- | rw- |
| 2 | r-x | r-- | r-x |
| 3 | r-- | r-- | r-- |
| 4 | --x | -w- | -wx |
| 5 | --- | -w- | -w- |
| 6 | --x | --- | --x |
| 7 | --- | --- | --- |
---------------------------------------------

Um arquivo texto criado com o comando umask 012;touch texto.txt receberá as permissões -rw-rw-r--, pois 0 (dono) terá permissões rw-, 1 (grupo), terá permissões rw- e 2 (outros usuários) terão permissões r--. Um arquivo binário copiado com o comando umask 012;cp /bin/ls /tmp/ls receberá as permissões -r-xr--r-x (confira com a tabela acima).


UID e GID

O Linux gerencia os usuários e os grupos através de números conhecidos como UID (User ID) e GID (Group ID). Como é possível perceber, UID são números de usuários e GID são números de grupos. Os nomes dos usuários e dos grupos servem apenas para facilitar o uso humano do computador.

Um fato ainda não citado, é que cada usuário precisa pertencer a um ou mais grupos. Como cada arquivo ou processo pertence a um usuário, logo, esse arquivo/processo pertence ao grupo de seu proprietário. Assim sendo, cada arquivo/processo está associado a um UID e a um GID.

Os números UID e GID variam de 0 a 65536. Dependendo do sistema, o valor limite pode ser maior. No caso do usuário root, esses valores são sempre 0 (zero). Assim, para fazer com que um usuário tenha os mesmos privilégios que o root, é necessário que seu GID seja 0. Isso informa ao sistema que o usuário em questão é super usuário.

Observação: na verdade, existe um UID real e um UID efetivo. O mesmo ocorre com o GID. Os números reais geralmente são iguais aos efetivos. Os UIDs e GIDs reais são usados, basicamente, para fins de contabilidade, enquanto que os efetivos são os usados para execução.


Se você formatar seu linux, deixando a partição /home intacta, ao tentar acessá-la e gravar algo nos arquivos da partição ela irá dar erro de permissão. Isso pode ser resolvido facilmente da seguinte maneira:

Copie todos arquivos do /etc ligados a usuarios e grupos, /etc/passwd /etc/groups /etc/users pra partição home por exemplo, reinstalar o servidor e depois copiar de volta esses arquivos.


chown altera o proprietário e o grupo do arquivo.

chgrp altera o grupo de um arquivo.

Permissoes Especiais

SUID

Se este bit estiver ligado em um arquivo executável, isso indica que que ele vai rodar com as permissões do seu dono (o proprietário do arquivo) e não com as permissões do usuário que o executou.

OBS: Só tem efeito em arquivos executáveis.

Tomemos como exemplo o shutdown. Ele está localizado no diretório /sbin/, e não pode ser executado por usuários comuns, retornando a seguinte mensagem de erro:
$ /sbin/shutdown
shutdown: you must be root to do that!
Ou seja, "shutdown: você precisa ser root para fazer isso!".
Vamos então ativar o buit SUID para permitir que o usuário davidson possa executar o shutdown:
# chmod 4755 /sbin/shutdown
Ou
# chmod u+s /sbin/shutdown
Observe que utilizamos 4 dígitos para o comando chmod no formato octal. O primeiro dígito, que até então não tínhamos utilizado, é justamente aquele utilizado para as permissões especiais. O número 4 corresponde ao bit SUID. Já no formato literal, utilizamos u+s para ativar (+) a permissão especial de execução (s) para os usuários (u).



SGUID

Faz o mesmo que o SUID, mas agora o arquivo executado vai rodar com as permissões do grupo do arquivo. Se aplicado a um diretório, força os arquivos/diretórios criados dentro dele a ter o mesmo grupo do diretório pai, ao invés do grupo primário do usuário que o criou.

Agora, para ativar o bit SGID, utilizamos o chmod na forma octal ou literal:
# chmod 2755 /sbin/shutdown
Ou
# chmod g+s /sbin/shutdown
No formato octal, veja que o número 2 corresponde ao bit SGID, enquanto os outros 3 números correspondem às permissões normais do arquivo. Já no formato literal, utilizamos g+s para ativar (+) a permissão especial de execução (s) para o grupo (g).


STICKY

Se este bit for ativado, faz com que arquivos criados em um determinado diretório só possam ser apagados por quem o criou (dono) ou pelo super-usuário do sistema. Um exemplo de uso do STICKY é o diretório /tmp.

Para ligar o bit STICKY num diretório, utilizamos o chmod no formato octal ou literal. Como exemplo, vamos ligar o bit STICKY no diretório documentos/.
$ chmod 1755 documentos
Ou
$ chmod o+t documentos
No formato octal, o número 1 corresponde ao bit STICKY, enquanto os outros 3 dígitos correspondem às permissões simples do diretório. No formato literal, utilizamos o+t, para ativar (+) a restrição da exclusão de arquivos (t) para os outros usuários (o).
Observe agora as novas permissões do diretório tmp/:

$ ls -ld documentos
drwxr-xr-t 2 renato 160 2005-03-11 10:43 teste
Observe que o bit "x" das permissões dos outros usuários foi substituído por um "t", indicando que o bit STICKY está ligado.
Agora, basta dar permissão de escrita para os outros usuários, para que eles possam criar arquivos dentro desse diretório:
$ chmod o+w tmp

Escrito por renato.people@gmail.com

quinta-feira, dezembro 06, 2007

Definindo quotas manualmente

É possível também definir as quotas via linha de comando, usando o comando "edquota". Ele é uma ferramenta bastante rudimentar, mas funcional, que usa um editor de texto pré-definido para exibir e permitir a alteração das quotas.

O primeiro passo é escolher o editor que será usado, definindo a variável "EDITOR", que pode conter o nome de qualquer editor de linha de comando (que esteja instalado), como o joe, mcedit, pico, nano ou vi, como em:

# EDITOR=joe

Para editar a quota para um usuário use a opção "-u", como em:

# edquota -u gdh

Ele exibe um arquivo de texto, usando o editor escolhido, contendo campos com a utilização atual e os limites para blocos e para o número de arquivos:

index_html_6d78e6a9

O que você faz aqui é editar os valores dos campos referentes aos limites, salvar o arquivo e sair do editor. Ao fazer isso, o edquota checa as mudanças feitas e as aplica. Note que os dois primeiros campos "soft" e "hard" da esquerda para a direita contém os limites de blocos (ou seja, o espaço em disco que pode ser usado), enquanto os campos seguintes indicam os limites para o número de arquivos.

Os únicos valores editáveis dentro do arquivo são mesmo os 4 campos com os limites. Os demais (como o número de blocos usados) são exibidos apenas a título de informação. Você até pode alterar estes campos (afinal, trata-se de um arquivo de texto simples), mas as alterações são ignoradas pelo edquota.

Por default, cada bloco corresponde a 1 KB, de forma que o valor "2000000" corresponde a 2 GB, mas isso pode variar de acordo com as opções usadas ao formatar a partição. Se quiser checar, use o comando "fdisk -l" (como root). Ele mostra detalhes sobre as partições, incluindo o tamanho e o número de blocos.

Continuando, você pode editar também as quotas para os grupos, usando o parâmetro "-g", como em:

# edquota -g alunos

Para alterar o grace period, use o parâmetro "-t" (sem argumentos), como em:

# edquota -t

Ele exibe outro arquivo de texto, dessa vez oferecendo as opções "Block grace period" (referente ao soft limit para blocos) e o Inode grace period (que se aplica ao soft limit para o número de arquivos, caso usado). O tempo pode ser especificado em dias (days), horas (hours), minutos (minutes), ou segundos (seconds), como em "7days", "12 hours" ou "5minutes" (sempre sem espaço):

index_html_6bd71a9a

Para ver um relatório com as quotas definidas para cada usuário e o espaço atualmente ocupado por cada um, use o comando "repquota", seguido pela pasta (e não o device) onde as quotas foram ativadas, como em:

# repquota /home

O relatório é exibido no próprio terminal, usando uma formatação simples, com um usuário por linha:

index_html_m261a4f69

Como pode ver, o webmin facilita bastante a configuração, eliminando parte do trabalho manual, mas é perfeitamente possível se virar com os comandos de modo texto quando ele não estiver disponível.

Uma última dica é que, quando ativas, as quotas são aplicadas praticamente em tempo real. Assim que o usuário atinge o hard limit, a gravação é bloqueada instantaneamente, interrompendo a transferência do arquivo. Caso isso não aconteça, é sinal de que as quotas estão na verdade desativadas. Nesse caso, ative-as usando o comando "quotaon /pasta", como vimos anteriormente.


Usando quotas de disco

Para que o Quota funcione, é necessário instalar os pacotes "quota" e "quotatool", que contém um conjunto de utilitários usados para configurar e verificar as quotas de disco. No Debian, os dois podem ser instalados via apt-get:

# apt-get install quota
# apt-get install quotatool

No Fedora, você precisa apenas instalar o pacote "quota" usando o Yum:

# yum install quota

Em seguida, é necessário carregar o módulo "quota_v2", que ativa o suporte necessário no Kernel:

# modprobe quota_v2

Para que ele seja carregado automaticamente durante o boot, adicione a linha "quota_v2" no final do arquivo "/etc/modules", ou adicione o próprio comando "modprobe quota_v2" no final do arquivo "/etc/rc.d/rc.local" ou "/etc/init.d/bootmisc.sh" (esse passo não é necessário no Fedora Core 5, onde o suporte a Quota vem compilado no executável principal do Kernel).

Com o módulo carregado, o primeiro passo da configuração é alterar a entrada no fstab que monta a partição, de modo que o suporte a quotas de disco seja ativado. Abra o arquivo "/etc/fstab", localize a linha referente à partição e adicione os parâmetros "usrquota,grpquota" logo após o "defaults". Se você está ativando o Quota para a partição "/home", a linha seria parecida com:

/dev/hda2 /home ext3 defaults 0 2

Depois da alteração, a linha ficaria:

/dev/hda2 /home ext3 defaults,usrquota,grpquota 0 2

Ao usar uma partição formatada em ReiserFs, a linha ficaria:

/dev/hda2 /home reiserfs defaults,usrquota,grpquota 0 2


Se o diretório home (ou qualquer outro diretório onde você deseja aplicar as quotas) faz parte do diretório raiz e você deseja primeiro migrá-lo para uma partição separada, o processo é o seguinte:

a) Instale o novo HD, particione-o e formate a partição de destino.

b) Monte a partição de destino em um diretório temporário usando o comando mount, como em:

# mount /dev/sdb2 /mnt/sdb2

c) Certifique-se de que nenhum usuário ou processo está usando o servidor. Se necessário reinicie a máquina e desconecte-a da rede.

d) Copie todos os arquivos do diretório atual para o raiz da nova partição, usando o comando "cp -a" (que copia recursivamente e mantém as permissões de acesso), como em:

# cp -a /home/* /mnt/sdb2/

e) Desmonte a partição e monte-a novamente no diretório de destino, como em:

# umount /mnt/sdb2
# mount /dev/sdb2 /home

f) Verifique se todos os arquivos e diretórios foram copiados para os locais corretos. Montar a partição sobre o diretório antigo não subscreve os arquivos antigos, que ficam apenas ocultos. Se algo der errado, você pode restaurar o diretório anterior simplesmente desmontando a nova partição.

g) Com tudo verificado, adicione a entrada no "/etc/fstab", especificando a partição, o diretório onde ele ficará montada, o sistema de arquivos e os parâmetros do Quota, como em:

/dev/sdb2 /home ext3 defaults,usrquota,grpquota 0 2

h) Reinicie o micro (ou remonte a partição) e continue com a configuração do Quota, seguindo os passos a seguir. :)

Em seguida você deve criar os arquivos "aquota.user" e "aquota.group" (onde ficam armazenadas as configurações do Quota) no diretório raiz da partição. Se você está ativando o Quota para a partição montada no /home, então os dois arquivos serão "/home/aquota.user" e "/home/aquota.group".

Por enquanto, vamos apenas criar dois arquivos vazios, usando o comando touch. É importante que ambos fiquem com permissão de acesso "600", de modo que apenas o root possa acessá-los ou fazer modificações. Os comandos são executados com a partição montada:

# touch /home/aquota.user
# chmod 600 /home/aquota.user
# touch /home/aquota.group
# chmod 600 /home/aquota.group

Depois da configuração inicial, é recomendável reiniciar o servidor, para que os scripts de inicialização se encarreguem de formatar os dois arquivos, montar a partição usando os parâmetros corretos e outros passos necessários.

Naturalmente, é possível também aplicar as alterações sem reiniciar o servidor. Nesse caso, é necessário fechar todos os programas e serviços que estejam acessando arquivos dentro da partição e remontar a partição (para que sejam aplicados os parâmetros incluídos no fstab) usando o parâmetro "-o remount" do mount, como em:

# mount -o remount /home

Para verificar se a partição foi montada corretamente, usando os parâmetros do quota, execute o comando "mount" (sem parâmetros) e veja se o "usrquota,grpquota" adicionados ao fstab aparecem nas propriedades da partição:

# mount

/dev/hda1 on / type ext3 (rw)
...
/dev/hda2 on /home type ext3 (rw,usrquota,grpquota)

Os arquivos "aquota.user" e "aquota.group" devem ser formatados em um formato especial antes de poderem ser usados pelo quota. Se você reiniciou o sistema depois de criar os arquivos, provavelmente o script de inicialização do quota já deve ter feito isso, caso contrário é necessário rodar o comando "quotacheck" para que ele faça seu trabalho:

# quotacheck -vagum

O quotacheck faz a verificação inicial dos arquivos e usuários, gerando uma tabela oculta que lista os arquivos de posse de cada usuário. Esta tabela é usada pelo Quota para checar o espaço ocupado por cada um e é atualizada em tempo real conforme novos arquivos são gravados.

Da primeira vez que ele é executado, exige uma mensagem de erro avisando que os arquivos "aquota.user" e "aquota.group" estão danificados (afinal, eles são arquivos vazios), mas isso é esperado. A função dele é justamente corrigir o problema:

quotacheck: WARNING - Quotafile /home/aquota.user was probably truncated. Cannot save quota settings...
quotacheck: WARNING - Quotafile /home/aquota.group was probably truncated. Cannot save quota settings...
quotacheck: Scanning /dev/hda2 [/home] done
quotacheck: Checked 36 directories and 331 files

Depois de executá-lo, você perceberá que os arquivos "aquota.user" e "aquota.group" aumentaram de tamanho, indo dos zero bytes iniciais para alguns kbytes, sinal de que o quotacheck fez seu trabalho:

# ls -lh /home

-rw------- 1 root root 7,0K 2008--01-25 08:24 aquota.group
-rw------- 1 root root 7,0K 2008--01-25 08:24 aquota.user
...

Com tudo pronto, ative o uso das quotas usando o comando "quotaon", seguido da pasta onde está montada a partição, como em:

# quotaon /home

Se precisar desativar temporariamente o uso das quotas, use o comando "quotaoff", como em:

# quotaoff /home


Bridge no virtualbox

1º Etapa:
instale os pacotes necessários:
sudo apt-get install bridge-utils uml-utilities

2º Etapa:
abra o arquivo de configuração:

sudo gedit /etc/rc.local

Tome Cuidado!!!!, uma edição mal feita nesse arquivo pode te deixar Sem acesso a REDE LOCAL e a INTERNET

e adicione essas linhas antes do 'exit 0':
tunctl -t tap0 -u (usuário)
chmod 0666 /dev/net/tun
/usr/sbin/brctl addbr br0
/sbin/ifconfig (sua placa de rede) 0.0.0.0 promisc
/usr/sbin/brctl addif br0 (sua placa de rede)
/sbin/dhclient br0
/usr/sbin/brctl addif br0 tap0
ifconfig tap0 (ip da maquina Virtual) up
bash -c 'echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp'
route add -host (IP local na LAN) dev tap0
arp -Ds (sua placa de rede) pub


(usuário) = o usuário que utiliza o VirtualBox
(sua placa de rede) = a placa de rede que vc se conecta a LAN ex: eth0
(ip da maquina Virtual)
= IP Reservado para a Maquina Virtual
(IP local na LAN) = o IP que seu PC Real usa dentro da LAN ex: 192.168.1.2

um exemplo de como Ficou no meu caso:
tunctl -t tap0 -u wilson
chmod 0666 /dev/net/tun
/usr/sbin/brctl addbr br0
/sbin/ifconfig eth0 0.0.0.0 promisc
/usr/sbin/brctl addif br0 eth0
/sbin/dhclient br0
/usr/sbin/brctl addif br0 tap0
ifconfig tap0 192.168.1.3 up
bash -c 'echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp'
route add -host 192.168.1.2 dev tap0
arp -Ds 192.168.1.2 eth0 pub


4º Etapa:
Configure o Virtualbox como abaixo

segunda-feira, dezembro 03, 2007

Processos no Linux

Introdução

Nos sistemas operacionais, um processo é a forma de representar um programa em execução. É o processo que utiliza os recursos do computador - processador, memória, etc - para a realização das tarefas para as quais a máquina é destinada. Este artigo mostrará os principais conceitos relacionados a processos no Linux e as ferramentas usadas para manipulá-los e gerenciá-los.

Composição de um processo

O sistema operacional lida com uma infinidade de processos e, por isso, é necessário ter meios que permitam controlá-los. Para isso, os processos contam com um conjunto de características, dentre as quais:

- Proprietário do processo;
- Estado do processo (em espera, em execução, etc);
- Prioridade de execução;
- Recursos de memória.

O trabalho de gerenciamento de processos precisa contar com as informações acima e com outras de igual importância para que as tarefas sejam executadas da maneira mais eficiente. Um dos meios usados para isso é atribuir a cada processo um PID.

PID e PPID

Um PID (Process Identifier) é um número de identificação que o sistema dá a cada processo. Para cada novo processo, um novo número deve ser atribuído, ou seja, não se pode ter um único PID para dois ou mais processos ao mesmo tempo.

Os sistemas baseados em Unix precisam que um processo já existente se duplique para que a cópia possa ser atribuída a uma tarefa nova. Quando isso ocorre, o processo "copiado" recebe o nome de "processo pai", enquanto que o novo é denominado "processo filho". É nesse ponto que o PPID (Parent Process Identifier) passa a ser usado: o PPID de um processo nada mais é do que o PID de seu processo pai.

UID e GID

Conforme já mencionado, cada processo precisa de um proprietário, um usuário que seja considerado seu dono. A partir daí, o sistema saberá, através das permissões fornecidas pelo proprietário, quem pode e quem não pode executar o processo em questão. Para lidar com os donos, o sistema usa os números UID e GID.

O Linux gerencia os usuários e os grupos através de números conhecidos como UID (User Identifier) e GID (Group Identifier). Como é possível perceber, UID são números de usuários e GID são números de grupos. Os nomes dos usuários e dos grupos servem apenas para facilitar o uso humano do computador.

Cada usuário precisa pertencer a um ou mais grupos. Como cada processo (e cada arquivo) pertence a um usuário, logo, esse processo pertence ao grupo de seu proprietário. Assim sendo, cada processo está associado a um UID e a um GID.

Os números UID e GID variam de 0 a 65536. Dependendo do sistema, o valor limite pode ser maior. No caso do usuário root, esses valores são sempre 0 (zero). Assim, para fazer com que um usuário tenha os mesmos privilégios que o root, é necessário que seu GID seja 0.

Sinais de processos

Os sinais são meios usados para que os processos possam se comunicar e para que o sistema possa interferir em seu funcionamento. Por exemplo, se o usuário executar o comando kill para interromper um processo, isso será feito por meio de um sinal.

Quando um processo recebe um determinado sinal e conta com instruções sobre o que fazer com ele, tal ação é colocada em prática. Se não houver instruções pré-programadas, o próprio Linux pode executar a ação de acordo com suas rotinas.

Entre os sinais existentes, tem-se os seguintes exemplos:

STOP - esse sinal tem a função de interromper a execução de um processo e só reativá-lo após o recebimento do sinal CONT;
CONT - esse sinal tem a função de instruir a execução de um processo após este ter sido interrompido;
SEGV - esse sinal informa erros de endereços de memória;
TERM - esse sinal tem a função de terminar completamente o processo, ou seja, este deixa de existir após a finalização;
ILL - esse sinal informa erros de instrução ilegal, por exemplo, quando ocorre divisão por zero;
KILL - esse sinal tem a função de "matar" um processo e é usado em momentos de criticidade.

O kill também é um comando que o usuário pode usar para enviar qualquer sinal, porém, se ele for usado de maneira isolada, ou seja, sem o parâmetro de um sinal, o kill por padrão executa o sinal TERM.

A sintaxe para a utilização do comando kill é a seguinte:

kill -SINAL PID

Como exemplo, vamos supor que você deseja interromper temporariamente a execução do processo de PID 4220. Para isso, pode-se usar o seguinte comando:

kill -STOP 4220

Para que o processo 4220 volte a ser executado, basta usar o comando:

kill -CONT 4220

Se o sinal precisa ser enviado a todos os processos, pode-se usar o número -1 no lugar do PID. Por exemplo:

kill -STOP -1

Como já dito, usar o comando kill isoladamente - por exemplo, kill 4220 - faz com que este use o sinal TERM por padrão. Esse sinal, no entanto, pode ser ignorado pelos processos. É por isso que é boa prática usar o comando "kill -9 PID" para "matar" um processo, pois o número nove representa o sinal kill e este não pode ser ignorado. Isso deixa claro que se você conhecer o número que é atribuído a um sinal, você pode usá-lo no lugar de seu nome. Com exceção de alguns sinais, a numeração de cada um pode mudar de acordo com a distribuição ou com a versão do kernel.

Também é comum usar o kill da seguinte forma: kill -l PID. A opção "-l" (letra L minúscula) é usada para listar os processos que aceitaram o kill.

Agora, imagine que você não saiba qual o PID de um processo e tenha se esquecido que o comando ps (visto mais à frente) descobre tal informação. Neste caso, pode-se usar o comando killall, desde que você saiba o nome do processo. A sintaxe é:

killall -SINAL processo

Por exemplo:

killall -STOP vi

Estado dos processos

Quando um processo é criado, isso não significa que ele será imediatamente executado. Além disso, determinados processos podem ser temporariamente paralisados para que o processador possa executar um processo prioritário. Isso quer dizer que os processos, em certos momentos, podem estar em situações de execução diferentes. O Linux trabalha, essencialmente, com quatro tipos de situação, isto é, estados:

Executável: o processo pode ser executado imediatamente;
Dormente: o processo precisa aguardar alguma coisa para ser executado. Só depois dessa "coisa" acontecer é que ele passa para o estado executável;
Zumbi: o processo é considerado "morto", mas, por alguma razão, ainda existe;
Parado: o processo está "congelado", ou seja, não pode ser executado.

Comandos nice e renice

Ao abordarmos os comandos nice e renice é necessário entender o conceito de gentileza. Um processo pode ter prioridade em relação a outros em sua execução. Quando um processo é gentil, significa que ele "oferece a gentileza" de permitir que um processo com prioridade maior que a sua seja executado antes dele. Os níveis de gentileza, também chamados de nice, são determinados através de números. Quanto mais alto for o valor nice, mais gentil é o processo. Geralmente, o intervalo de números usados no nice são os inteiros entre -19 e 19.

Embora determinar a prioridade de um processo não seja uma prática comum, afinal, o próprio Linux faz muito bem essa tarefa, isso pode ser necessário em alguma situação. Para isso, utiliza-se um comando que recebe o mesmo nome do conceito: nice. A sintaxe é:

nice -n prioridade processo

Por exemplo:

nice -n -5 ntpd

No exemplo, o ntpd recebe prioridade -5. Trata-se de uma prioridade alta, afinal, como já dito, quanto menor o número menor sua gentileza.

Se um determinado processo está em execução, isso acontece com uma prioridade já definida. Para alterar um processo nessa condição, usa-se o comando renice, cuja sintaxe é:

renice prioridade opção processo/destino

As opções do renice são:

-u - a alteração ocorrerá nos processos do usuário informado;
-g - a alteração ocorrerá nos processos do grupo indicado;
-p - a alteração ocorrerá no processo cujo PID for informado.

Um exemplo:

renice +19 1000 -u infowester

Neste caso, o comando renice alterou a prioridade do processo 1000, assim como a prioridade dos processos do usuário infowester.

Verificando processos com o ps

O ps é um comando de extrema importância para o gerenciamento de processos. Por ele, é possível saber quais os processos em execução atualmente, quais os UIDs e PIDs correspondentes, entre outros.

Se somente ps for digitado na linha de comando, geralmente o sistema mostra quais os processos do usuário. É preciso usar uma combinação de opções para obter mais detalhes.

As opções mais importantes são os seguintes:

a - mostra todos os processos existentes;
e - exibe as variáveis de ambiente relacionadas aos processos;
f - exibe a árvore de execução dos processos;
l - exibe mais campos no resultado;
m - mostra a quantidade de memória ocupada por cada processo;
u - exibe o nome do usuário que iniciou determinado processo e a hora em que isso ocorreu;
x - exibe os processos que não estão associados a terminais;
w - se o resultado de processo não couber em uma linha, essa opção faz com que o restante seja exibido na linha seguinte.

Das opções acima, a combinação mais usada (pelo menos aqui no InfoWester) é aux:

ps aux

Como exemplo, o resultado obtido com esse comando foi o seguinte:

Note que usando a combinação lax, o resultado mostra mais detalhes:

ps lax

A seguir, segue a descrição dos campos mostrados anteriormente e alguns que só são mostrados com a combinação lax:

USER - nome do usuário dono do processo;
UID - número de identificação do usuário dono do processo;
PID - número de identificação do processo;
PPID - número de identificação do processo pai;
%CPU - porcentagem do processamento usado;
%MEM - porcentagem da memória usada;
VSZ - indica o tamanho virtual do processo;
RSS - sigla de Resident Set Size, indica a quantidade de memória usada (em KB);
TTY - indica o identificador do terminal do processo;
START - hora em que o processo foi iniciado;
TIME - tempo de processamento já consumido pelo processo;
COMMAND - nome do comando que executa aquele processo;
PRI - valor da prioridade do processo;
NI - valor preciso da prioridade (geralmente igual aos valores de PRI);
WCHAN - mostra a função do kernel onde o processo se encontra em modo suspenso;
STAT - indica o estado atual do processo, sendo representado por uma letra: R - executável; D - em espera no disco; S - Suspenso; T - interrompido; Z - Zumbi. Essas letras podem ser combinadas e ainda acrescidas de: W - processo paginado em disco; < - processo com prioridade maior que o convencional; N - processo com prioridade menor que o convencional; L - processo com alguns recursos bloqueados no kernel.

Verificando processos com o top

O comando ps trabalha como se tirasse uma fotografia da situação dos processos naquele momento. O comando top, por sua vez, coleta as informações, mas as atualiza regularmente. Geralmente essa atualização ocorre a cada 10 segundos.

A sintaxe do comando top é a seguinte:

top -opção

Entre as opções, tem-se as que se seguem:

-d - atualiza o top após um determinado período de tempo (em segundos). Para isso, informe a quantidade de segundos após a letra d. Por exemplo: top -d 30;
-c - exibe a linha de comando ao invés do nome do processo;
-i - faz o top ignorar processos em estado zumbi;
-s - executa o top em modo seguro.

É possível manipular alguns recursos do comando top através das teclas do teclado. Por exemplo, para atualizar imediatamente o resultado exibido, basta pressionar a tecla de espaço. Se pressionar a tecla q, o top é finalizado. Pressione a tecla h enquanto estiver utilizando o top para ver a lista completa de opções e teclas de atalho.

Os recursos jobs, fg e bg, fuser, pstree, nohup

Para ter ainda mais controle sobre os processos executados no Linux, pode-se utilizar os seguintes comandos: jobs, fg e bg, fuser, pstree, nohup. Cada um é descrito a seguir:

jobs - serve para visualizar os processos que estão parados ou executando em segundo plano (background). Quando um processo está nessa condição, significa sua execução é feita pelo kernel sem que esteja vinculada a um terminal. Em outras palavras, um processo em segundo plano é aquele que é executado enquanto o usuário faz outra coisa no sistema. Uma dica para saber se o processo está em background é verificar a existência do caractere & no final da linha. Se o processo estiver parado, geralmente a palavra "stopped" aparece na linha, do contrário, a palavra "running" é exibida. A sintaxe do jobs é:

jobs -opção

As opções disponíveis são:

-l - lista os processos através do PID;
-r - lista apenas os processos em execução;
-s - lista apenas os processos parados.

Se na linha de um processo aparecer o sinal positivo (+), significa que este é o processo mais recente a ser paralisado ou a estar em segundo plano. Se o sinal for negativo (-), o processo foi o penúltimo. Note também que no início da linha um número é mostrado entre colchetes. Muitos confundem esse valor com o PID do processo, mas, na verdade, trata-se do número de ordem usado pelo jobs.

fg e bg: o fg é um comando que permite a um processo em segundo plano (ou parado) passar para o primeiro (foreground), enquanto que o bg passa um processo do primeiro plano para o segundo. Para usar o bg, deve-se paralisar o processo. Isso pode ser feito pressionando-se as teclas Ctrl + Z no teclado. Em seguida, digita-se o comando da seguinte forma:

bg +número

O número mencionado corresponde ao valor de ordem informado no início da linha quando o comando jobs é usado.

Quanto ao comando fg, a sintaxe é a mesma:

fg +número

fuser: o comando fuser mostra qual processo faz uso de um determinado arquivo ou diretório. Sua sintaxe é:

fuser -opção caminho (do arquivo ou diretório)

Entre as opções, tem-se:

-k - finaliza o processo que utiliza o arquivo/diretório em questão;
-i - deve ser usada em conjunto com a opção k e serve para perguntar se a finalização do processo deve ser feita;
-u - mostra o proprietário do processo;
-v - o resultado é mostrado em um padrão de exibição semelhante ao comando ps.

pstree: esse comando mostra processos relacionados em formato de árvore. Sua sintaxe é:

pstree -opção PID

Entre as opções, tem-se:

-u - mostra o proprietário do processo;
-p - exibe o PID após o nome do processo;
-c - mostra a relação de processos ativos;
-G - usa determinados caracteres para exibir o resultado em um formato gráfico.

Um detalhe importante: se ao digitar o comando pstree o PID não for informado, todos os processos serão listados.

nohup: o comando nohup possibilita ao processo ficar ativo mesmo quando o usuário faz logout. É da natureza dos sistemas baseados em Unix interromper processos caso seu proprietário não esteja mais ativo, por isso, o nohup pode ser muito útil. Sua sintaxe é: nohup comando