sábado, 17 de julho de 2010

Gerenciamento de propriedades de arquivos e diretórios

Modificando as propriedades dos arquivos diretórios

Sistemas GNU/Linux nos permitem modificar as propriedades de arquivos e diretórios. Estas funções são importantes quando queremos modificar o dono e o grupo ao qual um determinado arquivo ou diretório pertence. Somente o usuário root pode fazer estas modificações. Os comandos utilizados são o chown e chgrp.

Chown

Este comando possibilita mudar o dono e o grupo ao qual um arquivo ou diretório pertence.

Sintaxe:

chown [opções] [dono.grupo] [diretório/arquivo]
adonde:
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 recursivamente.

O dono.grupo pode ser especificado usando o nome de grupo ou o código numérico correspondente ao grupo (GID).

Exemplos:

# chown jorge arq.txt - Muda o dono do arquivo arq.txt para jorge.
# chown jorge.users arq.txt - Muda o dono do arquivo arq.txt para jorge e seu grupo para users.
# chown -R jorge.jorge /tmp - Muda o dono e o grupo dos arquivos do diretório /tmp e sub-diretórios para jorge.jorge.

chgrp

Muda o grupo de um arquivo/diretório.

Sintaxe:

chgrp [opções] [grupo] [arquivo/diretório]
adonde:
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.

Exemplos:

# chgrp jorge meuarquivo.txt – este comando determina que o grupo do aqruivo meuarquivo.txt será o grupo jorge.

Referências:

SIQUEIRA, Luciano Antonio.
Certificação LPI-1: 101-102. São Paulo: Linux New Media, 2009.

PRITCHARD, Steven et al.
Certificação Linux LPI: Guia de referência nível 1: Exames 101 e 102. Rio de Janeiro: Alta Books, 2007.

FERREIRA, Rubem E.
LINUX: Guia do Administrador de Sistemas. São Paulo: Novatec, 2008.

Guia Foca Linux, 2010. Disponível em : http://focalinux.cipsga.org.br/ . Acesso em 26 de junho de 2010.

Aplicando permissões em arquivos e diretórios

Permissão de arquivos e diretórios.


As permissões em GNU/Linux aplicam-se aos arquivos e diretórios do sistema, com o intuito de proteger o sistema contra acessos indevidos, não autorizados; proteger arquivos de configuração e proteger arquivos de usuário contra modificações feitas por outros usuários. O esquema de permissionamento do linux é um pouco difícil de entender, por isso recomenda-se a leitura juntamente com a pratica.


Donos, grupos e outros usuários


Sistemas GNU/Linux dividem as permissões de acesso para três entidades: donos, grupos e outros usuários. Estas entidades para fins didáticos podem ser representados por letras: u=user(dono); g=grupo; o=outros usuários.


  • user – é o dono do arquivo/diretório. É o usuário que criou o arquivo; somente o dono ou então o user root poderão modificar as permissões de acesso ao arquivo; A identificação do user é chamada de id;

  • group – grupo que é proprietário do arquivo. Participam do grupo aqueles usuários que não são dono do arquivo mas tem permissão de acesso ao arquivo; Cada usuário pode fazer parte de um ou mais grupos e então acessar arquivos que pertençam ao mesmo grupo que o seu (mesmo que estes arquivos tenham outro dono). A identificação do grupo é chamada de gid;

  • others – são todos os outros usuário do sistema que não são o dono do arquivo e nem pertencem ao grupo do arquivo;


Tipos de permissão


As permissões concedidas serão permissões de leitura, escrita e execução de um determinado arquivo ou diretório.

r – permissão de leitura para arquivos; caso for um diretório terá permissão de listar;

w permissão de escrita/gravação para arquivos; caso for um diretório terá permissão de gravar em arquivos, criar e excluir arquivos e diretórios;

x – permissão de execução, caso seja um programa executável; para diretórios a permissão é de listar com o comando cd;


para melhor entender o esquema de funcionamento de permissões em linux será dado um exemplo, aplicando-se o comando ls -l em um arquivo qualquer. O resultado é o seguinte:

# ls -l linux.bmp

-rwxr-xr-x 1 professor root 881642 2010-03-30 08:54 linux.bmp


  • O primeiro caractere (-) me diz que “linux.bmp” é um arquivo; se for “d” é um diretório; caso for “l” é um link, etc;

  • Da segunda até o quarto caracteres (rwx) são as permissões do dono do arquivo, no caso o dono é o professor e tem permissão de leitura (r), escrita (w) e execução do arquivo (x);

  • Do quinto caractere até o sétimo (r-x) são as permissões do grupo ao qual o arquivo pertence. Essas informações me dizem que o grupo tem poder de ler (r) e executar (x) o arquivo; e é negada para este o direito de gravar (-);

  • Do oitavo até o décimo (r-x) são as permissões dos outros usuários. Essas informações me dizem que os outros usuários tem poder de ler (r) e executar (x) o arquivo; e é negada para este o direito de gravar (-);

  • professor – é o usuario dono do arquivo;

  • root – grupo ao qual o user professor pertence;

  • 8816 – tamanho do arquivo em mbyes;

  • 2010-03-30 08:54 – data e hora de criação do arquivo;

  • linux.bmp – nome do arquivo;

É importante ressaltar que o caractere “-” no inicio da linha de permissionamento (-rwxr-xr-x) me informa que estou diante de um arquivo; já na seqüência quando estamos vendo as permissões do grupo e outros usuário, este mesmo caractere “-” (-rwxr-xr-x) simboliza uma ausiência de permissão, ou negação de permissão para o grupo ou outros usuários.

O acesso a um arquivo/diretório é feito verificando primeiro se o usuário que acessará o arquivo é o seu dono, caso seja, as permissões de dono do arquivo são aplicadas. Caso não seja o dono do arquivo/diretório, é verificado se ele pertence ao grupo correspondente, caso pertença, as permissões do grupo são aplicadas. Caso não pertença ao grupo, são verificadas as permissões de acesso para os outros usuários que não são donos e não pertencem ao grupo correspondente ao arquivo/diretório” (Guia foca linux).

As permissões de arquivos são completamente manipuladas e, dependendo da necessidade posso estar dando ou negando permissão de leitura, gravação e execução dos arquivos/diretórios para determinados usuários. A seguir serão listados alguns comandos que permitem a modificação das permissões de acesso para arquivos e diretórios.


Chmod


Muda a permissão de acesso a um arquivo ou diretório. Com este comando é possível escolher se usuário ou grupo terá permissões para ler, gravar, executar um arquivo ou arquivos.


chmod [opções] [permissões] [diretório/arquivo]

Onde:

diretório/arquivo
Diretório ou arquivo que terá sua permissão mudada.
opções
v --verbose - Mostra todos os arquivos que estão sendo processados.
f --silent - Não mostra a maior parte das mensagens de erro.
c --change - Semelhante a opção -v, mas só mostra os arquivos que tiveram as permissões alteradas.
R --recursive - Muda permissões de acesso do diretório/arquivo no diretório atual e sub-diretórios.


DICA: É possível copiar permissões de acesso do arquivo/diretório, por exemplo, se o arquivo teste.txt tiver a permissão de acesso r-xr----- e você digitar chmod o=u, as permissões de acesso dos outros usuários (o) serão idênticas ao do dono (u). Então a nova permissão de acesso do arquivo teste.txt será r-xr--r-x

Exemplos de permissões de acesso:

Tomamos como exemplo o arquivo acima:

ls -l linux.bmp

-rwxr-xr-x 1 professor root 881642 2010-03-30 08:54 linux.bmp

podemos modificar as permissões de acesso deste arquivo da seguite maneira:

chmod u=rwx,g=rw,o=r linux.bmp – com este comando eu estou dizendo que:

O dono do arquivo (u) terá permissão total; leitura, gravação e execução (rwx).

Os usuários que pertencem ao grupo do arquivo (g) terão permissão de leitura e escrita (rw).

Os outros usuários (o) terão somente permissão de leitura do arquivo (r).

Depois de aplicado este comando as permissões ficariam assim:

$ ls -l linux.bmp

-rwx rw- r-- 1 professor root 881642 2010-03-30 08:54 linux.bmp

Este sinais aplicam-se ao esquema de permissionamento;

= Aplique as permissões exatamente assim.

+ Adicionar mais essa permissão.

- Tirar essa permissão.

Outros exemplos:

chmod g+r * - Permite que todos (*) os usuários que pertençam ao grupo dos arquivos (g) tenham (+) permissões de leitura (r) em todos os arquivos do diretório atual.
chmod o-r teste.txt - Retira (-) a permissão de leitura (r) do arquivo teste.txt para os outros usuários (usuários que não são donos e não pertencem ao grupo do arquivo teste.txt).
chmod uo+x teste.txt - Inclui (+) a permissão de execução do arquivo teste.txt para o dono e outros usuários do arquivo.
chmod a+x teste.txt - Inclui (+) a permissão de execução do arquivo teste.txt para o dono, grupo e outros usuários.
chmod a=rw teste.txt - Define a permissão de todos os usuários exatamente (=) para leitura e gravação do arquivo teste.txt.

chmod u=rwx,g=rw,o=g linux.bmp – desta maneira estou dizendo que o outros usuários (o) deverão ter permissão exatamente igual a permissão do grupo (o=g);

Obs.: as permissões de acesso a arquivo/diretório são aplicados ao dono (u), grupo (g) e outros usuários (o). Mas, conforme alguém deve ter observado, existe algum momento que a sintaxe ficou da seguinte maneira "chmod a=rw teste.txt" o "a", significa all; quer dizer, desta maneira apliquei permissão de leitura (r) e gravação (w) para todos os usuários, ou seja, para o dono, o grupo e os outros usuários do sistema. "a" quer dizer - todos os usuários do sistema.

Permissão octal para arquivos/diretórios


Uma outra maneira de aplicar permissão para aquivos e diretórios é usar o modo octal. O modo octal utiliza números ao invés de letras para dar ou negar permissão em um arquivo/diretório.


1 – permissão de execução (x)

2 - permissão de gravação (w)

4 - permissão de leitura (r).


As permissões serão dadas ou negadas somando-se ou subtraindo-se os números. Por exemplo:


#chmod u=rwx,g=rw,o=r linux.bmp

Em modo octal ficaria assim:

#chmod 764 linux.bmp


Estes comandos são equivalentes; usando o formato octal o “7” denota a permissão do dono do arquivo; o “6” representa a permissão do grupo do arquivo e o “4” representa as permissões dos outros usuários; no caso, somente permissão de leitura.


Para um completo entendimento do esquema de permissionamento usado para arquivos e diretórios em GNU/Linux, ainda é necessário estudar "permissões especiais" e "valor padrão das permissões - valor da umask" assuntos estes negligenciados neste post. Quem sabe em um próximo post poderei estar escrevendo sobre isso.


Referências:

SIQUEIRA, Luciano Antonio.
Certificação LPI-1: 101-102. São Paulo: Linux New Media, 2009.

PRITCHARD, Steven et al.
Certificação Linux LPI: Guia de referência nível 1: Exames 101 e 102. Rio de Janeiro: Alta Books, 2007.

FERREIRA, Rubem E.
LINUX: Guia do Administrador de Sistemas. São Paulo: Novatec, 2008.

Guia Foca Linux, 2010. Disponível em : http://focalinux.cipsga.org.br/ . Acesso em 13 de julho de 2010.








domingo, 11 de julho de 2010

Manter a integridade de um sistema de arquivos


Um Sistemas de arquivos usado continuamente pode, com o decorrer do tempo apresentar alguns problemas. Os problemas mais comuns em um sistema de arquivos são descritos abaixo:

  • Saturação do disco, causada pela utilização máxima de sua capacidade, ficando lotado e impedindo inserção de outros arquivos;
  • Uma queda de energia pode causar inconsistência de dados e corromper o sistema de arquivos;
Os comandos para monitorar o espaço de ocupação de partições e discos, bem como manter a integridade de um sistema de arquivos serão exibidos abaixo.

Monitorando espaço livre em disco

df

O comando df exibe informações gerais sobre a utilização de discos e partições. Mostra o espaço livre e ocupado em cada partição do disco.

Sintaxe:
df [opções] [partição/arquivo]
opções:

a - Inclui sistemas de arquivos com 0 blocos;
h, --human-readable - Mostra o espaço livre/ocupado em MB, KB, GB ao invés de blocos;
K - Lista em Kbytes;
l - Somente lista sistema de arquivos locais;
M - Lista em Mbytes (equivalente a –block-size=1048576);
T - Lista o tipo de sistema de arquivos de cada partição;
t tipo - Lista somente sistema de arquivos do tipo tipo;
x tipo - Não lista sistemas de arquivos do tipo tipo;

Exemplos: df, df -h, df -t vfat.

$ df -h /dev/sda6 - exibe os resultados em um formato legivel de utilização da partição /dev/sda6 incluindo percentual de uso, percentual livre, tamanho total, etc;

Monitorando o uso de discos

du

Este comando exibe informações de utilização de discos por diretórios. Se o diretório for omitido, a busca é feita no diretório atual. Este comano exibe o tamanho de um diretório qualquer.

Sintaxe
du [opções][diretório]
Opções

c - Faz uma totalização de todo espaço listado;
s - Não calcula o espaço ocupado por sub-diretórios;
h - Mostra o espaço ocupado em formato legível por humanos (Kb, Mb) ao invés de usar blocos;
k - Mostra o espaço ocupado em Kbytes.
M - Mostra o espaço ocupado em Mbytes.

Exemplos – du -h; du -hc;

$ du -s /etc – exibe a utilização por arquivo em /etc incluindo seus subdiretórios;
$ du -csh /home/* - exibe o resumo de todos os subdiretórios de /home, com uma saída legivel;
$ du – cs /home/* | sort -nr – exibe o mesmo resumo que o comando anterior e o comando sort ordena do maior para o menor;

Verificar e consertar sistemas de arquivos

“A checagem do sistema de arquivos permite verificar se toda a estrutura para armazenamento de arquivos, diretórios, permissões, conectividade e superfície do disco estão funcionando corretamente. Caso algum problema exista, ele poderá ser corrigido com o uso da ferramenta de checagem apropriada. As ferramentas de checagem de sistemas de arquivos costumam ter seu nome iniciado por fsck e terminados com o nome do sistema de arquivos que verifica, separados por um ponto. Para verificar um sistema de arquivos é necessário que ele esteja desmontado caso contrário poderá ocorrer danos em sua estrutura.” (Guia foca Linux).

fsck

Sintaxe
fsck.ext3 [opções] [dispositivo]
opções

c - Faz o fsck.ext3 verificar se existem agrupamentos danificados na unidade de disco durante a checagem, checa os bad blocs.
f - Força a checagem mesmo se o sistema de arquivos aparenta estar em bom estado. Por padrão, um sistema de arquivos que aparentar estar em bom estado não são verificados.
p - Corrige automaticamente o sistema de arquivos sem perguntar. É recomendável fazer isto manualmente para entender o que aconteceu, em caso de problemas com o sistema de arquivos.
v - Ativa o modo verbose (mais mensagens são mostradas durante a execução do programa).
y - Assume sim para todas as questões.

Exemplos:

#fsck.ext2 /dev/hda2,
#fsck.ext3 -f /dev/hda2,
#fsck.ext2 -vrf /dev/hda1;

badblocks

Faz uma procura por blocos defeituosos em um dispositivo. Este comando apenas pesquisa por blocos defeituosos, sem alterar a configuração do disco. Para marcar os blocos defeituosos para não serem mais usados, utilize a opção -l do fsck;

sintaxe:
badblocks [opções] [dispositivo]
opções

o - [arquivo] Gera uma lista dos blocos defeituosos do disco no [arquivo]. Este lista pode ser usada com o programa fsck.ext2 junto com a opção -l.
s - Mostra o número de blocos checados durante a execução do badblocks.
V - Modo verbose - São mostrados mais detalhes.
w - Usa o modo leitura/gravação. Usando esta opção o badblocks procura por blocos defeituosos gravando alguns padrões (0xaa, 0x55, 0xff, 0x00) em cada bloco do dispositivo e comparando seu conteúdo. Nunca use a opção -w em um dispositivo que contém arquivos pois eles serão apagados!

Exemplo:

# badblocks -s /dev/hda6 – a opção -s mostra o número de blocos checados durante a execução do comando;
# badblocks -s -o bad /dev/hda6 – mostra o numero de blocos checados e uma lista de blocos defeituosos;

defrag

Permite desfragmentar uma unidade de disco. A fragmentação é o armazenamento de arquivos em áreas não seqüenciais, ou seja, uma parte do arquivo é armazenada no inicio do disco, outra parte no final, etc. Fatos como este levam a uma perda de desempenho do disco e do tempo de resposta.
Sistema GNU/Linux possuem um sistema de armazenamento bastante eficiente; mas mesmo assim é conveniente desfragmentar o disco cada vez que a taxa de fragmentação atinga 10%. O sistema de arquivos deve estar desmontado para fazer a desfragmentação. É importante fazer cópias de segurança de sua unidade antes de fazer a desfragmentação. Se por qualquer motivo o programa de desfragmentação não poder ser concluído, dados poderão ser perdidos. A ferramenta para fazer a desfragmentação em um sistema de arquivos ext2 é a e2defrag.

Sintaxe
e2defrag [opções] [dispositivo
dispositivo - Partição, arquivo, disquete que contém o sistema de arquivos que será desfragmentado.
opções

r - Modo somente leitura. O defrag simulará sua execução no sistema de arquivos mas não fará nenhuma gravação. Esta opção permite que o defrag seja usado com sistema de arquivos montado.
S - Cria um sumário da fragmentação do sistema de arquivos e performance do desfragmentador.
V - Mostra detalhes durante a desfragmentação do sistema de arquivos. Caso mais de uma opção -v seja usada, o nível de detalhes será maior.
i - [arquivo] Permite definir uma lista de prioridades em que um arquivo será gravado no disco, com isto é possível determinar se um arquivo será gravado no começo ou final da unidade de disco. Esta lista é lida do [arquivo] e deve conter uma lista de prioridades de -100 a 100 para cada inodo do sistema de arquivos. Arquivos com prioridade alta serão gravados no começo do disco.
p - [numero] Define o [numero] de buffers que serão usados pela ferramenta de desfragmentação na realocação de dados, quanto mais buffers mais eficiente será o processo de realocação. O número depende de quantidade memória RAM e Swap você possui. Por padrão 512 buffers são usados correspondendo a 512Kb de buffer (em um sistema de arquivos de blocos com 1Kb).

Exemplo:

# e2defrag -n -v /dev/hdb4;
# e2defrag -r /dev/hda1;


Referências:


SIQUEIRA, Luciano Antonio.
Certificação LPI-1: 101-102. São Paulo: Linux New Media, 2009.

PRITCHARD, Steven et al.
Certificação Linux LPI: Guia de referência nível 1: Exames 101 e 102. Rio de Janeiro: Alta Books, 2007.

FERREIRA, Rubem E.
LINUX: Guia do Administrador de Sistemas. São Paulo: Novatec, 2008.

Guia Foca Linux, 2010. Disponível em : http://focalinux.cipsga.org.br/ . Acesso em 26 de junho de 2010.