domingo, 9 de março de 2008

Permissões part 1

Esse assunto está dividido em duas partes:

Na primeira, conheceremos melhor o aspecto da permissão de um arquivo, em que ela se baseia, como checar as permissões de determinados objetos do sistema de arquivo e como as máscaras são formadas.

Na segunda, veremos os comandos fundamentais para alterar as permissões dos arquivos ou pastas (chmod, chown, chgrp, umask) e aspecto avançados sobre permissões.

Permissões, são conjuntos de direitos que são aplicados a arquivos ou diretórios do sistema de arquivo. Elas garantem que um usuário que não se enquadre nas permissão atribuídas a um arquivo, não tenha acesso ao mesmo, ou não possa executá-lo, ou ainda alterá-lo.

Desta forma pode-se garantir a integridade e/ou sigilosidade dos arquivos e pastas no sistema de arquivos.

Nos sistemas linux, o modelo de permissão, funciona em três níveis independentes:

  • Usuário;
  • Grupo;
  • Todos os outros usuários.

Para checarmos quis permissões um determinado arquivo ou diretório possuem, podemos usar o comando abaixo:

[fred@notebook tmp]$ ls -all
drwxrwxr-x 3 fred casa 4096 Fev 7 11:52 .
drwxr-xr-x 133 fred casa 8192 Fev 8 09:34 ..
-rw-rw-r-- 1 fred casa 49979 Fev 6 09:22 DSC07854.JPG
-rw-rw-r-- 1 fred casa 154913 Fev 7 11:52 DSC07855.JPG


Na primeira coluna temos o identificador do objeto e as permissões aplicadas a ele, na terceira coluna temos o dono do arquivo e na quarta coluna temos o grupo o qual o arquivo faz parte.
Identificador
Dono
Grupo
Objeto
drwxrwxr-x
fred
casa
.
drwxr-xr-x
fred
casa
..
-rw-rw-r--
fred
casa
DSC07854.JPG
-rw-rw-r--
fred
casa
DSC07855.JPG


Tomaremos como exemplo, o identificador do arquivo DSC07854.JPG.

Vamos separá-lo da seguinte forma:

-
Tipo do objeto
rw-
Permissão para o dono do arquivo (owner)
rw-
Permissão para o grupo do arquivo (group)
r--
Permissão para o outros (others)


O primeiro caractere '-' especifica o tipo do arquivo, no caso destacado acima, ele é um arquivo regular. É bom frisar que o linux trata os diretórios com arquivos, logo, o modelo aplica-se igualmente a eles. Os tipos possíveis para esse campo são:

Indicador
Significado
d
diretório
l
link
c
arquivo especial de caractere
b
arquivo de bloco
p
canal (fifo)
s
socket
-
arquivo normal


O resto do campo de permissão, é composto por três grupos de três caracteres, representando o usuário, o grupo e todos os outros, respectivamente.

Os valores convencionais para esses campos são:

r
Read (permissão de leitura)
w
Write (permissão de gravação/deleção)
x
Execution (permissão de execução)
-
Permissão desabilitada


Com isso, percebemos que o arquivo regular abaixo possui as seguintes permissões:

-rw-rw-r-- 1 fred casa 154913 Fev 7 11:52 DSC07855.JPG


rw-
O Dono possui permissão de leitura e escrita
rw-
O Grupo possui permissão de leitura e escrita
r--
Todos os outros possuem apenas permissão de leitura
fred
O Dono do arquivo é o usuário fred
casa
O grupo do arquivo é casa



Além da forma acima, podemos especificar as permissões de um arquivo, usando o modelo octal 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



Poderíamos especificar a permissão do arquivo das seguintes maneiras:

rw-rw-r--
110110100
664 – Mais comum

Com isso, podemos criar o quadro abaixo contendo as permissões em forma decimal:

Permissões
Decimal
--------
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


O conhecimento da tabela acima é fundamental a administrador de sistemas. No dia a dia é muito comum se depara com a necessidade de alterar as permissões de arquivos e pastas.

Permissões Especiais

Ainda existe três permissões que podem ser atribuídas a um objeto do sistema de arquivos:

Suid
Se o bit de SUID for ativo para um arquivo, sempre que esse arquivo for executado, ele rodará com as permissões do dono do arquivo. Para exemplificar, imaginemos o aplicativo teste.sh cujo dono seja o root. Se o usuário fred executar esse arquivo, ele será executado com as permissões do usuário root.

O bit SUID é representado pela letra s no local do bit de execução w no campo de permissão do usuário. Vejamos o exemplo abaixo:

[root@localhost fred_m]# ls -all /usr/bin/passwd
-rwsr-xr-x 1 root root 29016 2007-09-25 18:28 /usr/bin/passwd


Sgid
De forma semelhante, podemos atribuir o bit SGID no campo da permissão referente ao grupo. Em um diretório que possua o bit SGID setado, todos os arquivos criados dentro dele, pertencerão ao mesmo grupo do diretório corrente ao invés de pertencer ao grupo do usuário que o criou. Veja o exemplo abaixo:

[root@localhost Público]# ls -all
drwxrwsr-x 3 fred_m fred_m 4096 2008-01-11 22:25 teste


Esta permissão é útil quando queremos utilizar um diretório no qual várias pessoas do mesmo grupo compartilharão arquivos nele.

Obs: S = apenas suid ou sgid
s = suid/sgid + x(execução)‏

Stick
Ao se ativar esse permissão em um diretório, os arquivos criados/contidos nele só poderão ser apagados pelo seu dono. Imaginemos o diretório /tmp no qual todos os usuários possuem acesso total. Neste diretório os usuários só podem apagar os arquivos que eles criaram.
Essa permissão só é aplicada a diretórios e é expressão no bit de execução do campo de permissão de outros. Ela é expressa pela letra t.

[root@localhost /]# ls -all /
drwxrwxrwt 73 root root 20480 2008-01-11 22:11 tmp


Obs: T = apenas stick
t = stick + x(execução)‏

Da mesma forma que as permissões convencionais, as permissões especiais podem ser representadas pelo modelo octal conforme tabela abaixo:

Digito
SUID
SGID
Stick
0
-
-
-
1
-
-
sim
2
-
sim
-
3
-
sim
sim
4
sim
-
-
5
sim
-
sim
6
sim
sim
-
7
sim
sim
sim

Nenhum comentário: