Permissões de Arquivos GNU/Linux
Autor: Pablo Alexander | Publicado: 2012-05-30T19:59:00-03:00



 <!--
  @page { margin: 2cm }
  TD P { margin-bottom: 0cm }
  P { margin-bottom: 0.21cm }
 -->
 





Para quem é novo no
Linux é comum ter dificuldade para entender o sistema de permissões no
Linux, mas não se preocupe, isso não é um bicho de sete cabeças.
Para facilitar o entendimento vamos começar dividindo as permissões
em três níveis: Usuário, Grupo e Outros o famoso UGO. Para nosso estudo vamos
precisar de uma distribuição Linux instalada ou instanciada através
de LiveCD e de um terminal e pelo menos dois usuários.



Caso você queria usar
seus próprios usuários para fazer os teste ignore esse
procedimento.



$
su

#
useradd user01 -m -s /bin/bash -c “Usuário 01,,,” -p $(mkpasswd
“123456”)

#
useradd user02 -m -s /bin/bash -c “Usuário 02,,,” -p $(mkpasswd
“123456”)

#
exit

$
su - user01



Com isso criamos dois
usuário para teste e logamos no user01, agora vamos criar um arquivo
e um diretório e usar o comando ls -l para listar a saída do
comando.



$
touch arquivo.txt

$
mkdir diretorio

$
ls -l

-rw-r--r--
1 user01 user01    0 &nbsp;&nbsp; Mai 29 22:35 arquivo.txt

drwxr-xr-x
2 user01 user01 4096 Mai 29 22:35 diretorio



Com isso temos
informações como dono do arquivo ou pasta, grupo, tamanho, data de
modificação e nome do arquivo, mas no inicio da linha temos umas
letrinhas e traços, essa são as permissões. Para entender essas
permissões nós temos uma tabela apelidada de UGO.



  
  
  
  
  
  
  
  
  
  
  

   
-

   
r

   
w

   
-

   
r

   
-

   
-

   
r

   
-

   
-

  

   
T

y

p

e

   
U

s

e

r

   
G

r

o

u

p

   
O

t

h

e

r

s

  





  
  
  
  
  
  
  
  
  
  
  

   
d

   
r

   
w

   
x

   
r

   
-

   
x

   
r

   
-

   
x

  

   
T

y

p

e

   
U

s

e

r

   
G

r

o

u

p

   
O

t

h

e

r

s

  





  
  
  
  
  

   
4

   
r

   
read

   
leitura

  

   
2

   
w

   
write

   
escrita

  

   
1

   
x

   
execute

   
execução

  





Dessa forma
podemos entender que o arquivo.txt possui permissão de leitura e
escrita para o usuário (dono do arquivo) e de leitura para o grupo e
outros, o mesmo serve para o diretório que tem como única diferença
a permissão de execução para todos (*diretórios precisão de
permissão de execução para ser acessados pelo sistema). Da forma
que está configurada as permissões, qualquer usuário do sistema
pode acessar e ler os arquivos do user01, para vermos isso na prática
vamos inserir um conteúdo no arquivo.txt e logar como user02 e
tentar ler o arquivo.txt.



user01@servidor:~$
echo “Isso é um teste” &gt; arquivo.txt

user01@servidor:~$
cat arquivo.txt

Isso
é um teste

user01@servidor:~$
su user02

******

user02@servidor:/home/user01$
cat arquivo.txt

Isso
é um teste

user02@servidor:/home/user01$
echo “Linha dois” &gt;&gt; arquivo.txt

bash:
arquivo.txt: Permissão negada

user02@servidor:/home/user01$
exit



Conseguimos
perceber o user02 tem permissão para ler o arquivo.txt mas não para
escrever, para mudar essa situação existe o comando chmod.



user01@servidor:~$
chmod o+w arquivo.txt

user01@servidor:~$
ls -l

-rw-r--rw-
1 user01 user01   17 &nbsp; Mai 29 23:03 arquivo.txt

drwxr-xr-x
2 user01 user01 4096 Mai 29 22:35 diretorio

user01@servidor:~$
su user02

user02@servidor:/home/user01$
echo “Linha dois” &gt;&gt; arquivo.txt

user02@servidor:/home/user01$
cat arquivo.txt

Isso
é um teste

Linha
dois

user02@servidor:/home/user01$
ls -l

-rw-r--rw-
1 user01 user01   28 &nbsp; Mai 29 23:16 arquivo.txt

drwxr-xr-x
2 user01 user01 4096 Mai 29 22:35 diretorio

user02@servidor:/home/user01$
exit



Agora o
user02 pode escrever dados no arquivo.txt, vamos entender um pouco
'chmod o+w arquivo.txt',
assim podemos entender “o+w como others+write” (outros+escrever)
isso como uma soma, onde estou adicionando a permissão de escrever
para outros, a mesma coisa serve para usuário e grupos, veja algumas
possibilidades de uso do chmod.



$
ls -l arquivo.txt

-rw-r--rw-
1 user01 user01   28 Mai 29 23:16 arquivo.txt

$
chmod a+x arquivo.txt

-rwxr-xrwx
1 user01 user01   28 Mai 29 23:16 arquivo.txt

$
chmod g+w arquivo.txt

-rwxrwxrwx
1 user01 user01   28 Mai 29 23:16 arquivo.txt

$
chmod a=r arquivo.txt

-r--r--r--
1 user01 user01   28 Mai 29 23:16 arquivo.txt

$
chmod a=rwx,o-wx arquivo.txt

-rwxrwxr--
1 user01 user01   28 Mai 29 23:16 arquivo.txt

$
chmod a-x,g-w arquivo.txt

-rw-r--r--
1 user01 user01   28 Mai 29 23:16 arquivo.txt

$
chmod a-r,u+r arquivo.txt

-rw-------
1 user01 user01   28 Mai 29 23:16 arquivo.txt



Como
dito anteriormente os diretórios necessitam de permissão de
execução para serem acessados pelo sistema, já que em Linux tudo é
um arquivo.



user01@servidor:~$
mv arquivo.txt diretorio/

user01@servidor:~$
chmod g-x,o-x diretorio/

user01@servidor:~$
ls -l

drwxr--r--
2 user01 user01 4096 Mai 29 22:35 diretorio

user01@servidor:~$
su user02

user02@servidor:/home/user01$
cd diretorio/

bash:
cd: diretorio/: Permissão negada

user02@servidor:/home/user01$
ls -l diretorio/

ls:
impossível acessar -l: Arquivo ou diretório não encontrado

diretorio/:

ls:
impossível acessar diretorio/arquivo.txt: Permissão Negada

arquivo.txt

user02@servidor:/home/user01$
exit



Como
podemos ver nas saídas acima,  nós podemos listar os arquivos que
existem na pasta diretorio/ mas não podemos acessá-los nem mesmo
para ter informações sobre eles, mas agora imagine que o user01 não
quer que os outro usuários comuns nem saibam o que tem na pasta
diretorio/.



user01@servidor:~$
chmod o-r diretorio/

user01@servidor:~$
su user02

user02@servidor:/home/user01$
ls diretorio/

ls:
não foi possível abrir o diretório diretorio/: Permissão negada.

user02@servidor:/home/user01$
exit



Com
esses exemplos práticos nós podemos entender o mecanismo de
permissões do GNU/Linux, mas existe outra forma de determinar
permissões através do chmod que é a octal, também é
possível determinar qual vai ser as permissões padrão para novos
arquivos de um usuário ou do sistema todo através do comando umask,
mas isso fica para outra postagem.