terça-feira, 19 de novembro de 2013

PERMISSÕES EM LINUX / UNIX


Permissões em Linux

O sistema operacional Unix (e também, Linux) difere dos ambientes computacionais em que não é somente um sistema multitarefa mas também um sistema multiusuário.

Isto significa que enquanto seu computador terá apenas um teclado e monitor, este pode continuar sendo usado por outro usuário. Se o computador estiver conectado a uma rede, ou Internet, usuários remotos podem fazer login utilizando telnet ou ssh (secure shell) e operar o sistema de arquivo da máquina.

Na verdade, usuários remotos podem executar aplicações X e ter saídas gráficas exibidas em PCs remotos. O sistema Windows X suporta isto.

A capacidade de multi usuário do Unix não é uma inovação recente, mas sim um recurso que está profundamente enraizada na concepção do sistema operacional. Se você se lembra do ambiente em que foi criado Unix, isso faz todo o sentido. Anos atrás, antes dos computadores serem "pessoais", eles eram enormes, caros e centralizados.

Um típico sistema de computador da universidade consistia em um enorme computador central (mainframe) localizado em um prédio no campus e terminais conectados a este eram distribuídos por todo o campus. O computador central deveria suportar diversos usuários ao mesmo tempo. De maneira a tornar isto prático, um método teve que ser concebido para proteger os uns usuários de outros.

Afinal, você não pode permitir que as ações de um usuário possam adulterar o computador, nem você poderia permitir que um usuário possa interferir nos arquivos pertencentes a outro usuário.

Este artigo abrangerá os seguintes comandos:
  • chmod - modifica os direitos de acesso ao arquivo.
  • su - torna-se temporariamente o super-usuário.
  • chown - substitui o proprietário do arquivo.
  • chgrp - substitui o grupo proprietário do arquivo.

Aviso:

Lembre-se que permissão de arquivo é um recurso de segurança. Sempre que permitir que alguém mais leia, escreva ou execute seus arquivos, está aumentando o risco do arquivo ser adulterado, alterado, ou deletado.
Como uma regra, você deve conceder a permissão de leitura e escrita somente para aqueles que realmente necessitam dela.

Esquema de Permissões de Arquivos

Linux usa o mesmo esquema de permissões que o Unix. Cada arquivo ou diretório em seu sistema é atribuído com os direitos de acesso pelo proprietário do arquivo, os membros de um grupo de usuários relacionados, e todos os outros.
Direitos podem ser atribuídos para ler, escrever e para executar o arquivo Rights (isto é, executar o arquivo com um programa).
Para ver as configurações de permissões para o arquivo, usar o comando ls:

[alex@linux alex]$ ls -l algum_arquivo
 
-rw-rw-r-- 1 alex   alex   1097374 Sep 26 18:48 algum_arquivo


Podemos determinar muitas informações sobre o arquivo examinando os resultados de saída deste comando:
  • O arquivo "algum_arquivo" pertence ao usuário "alex"
  • Usuário "alex" tem direito ler e escrever este arquivo
  • O arquivo é propriedade do grupo "alex"
  • Membros do grupo "alex" pode também ler e escrever este arquivo
  • Qualquer um pode ler este arquivo
Tentemos outro exemplo. Olhemos o programa bash que está localizado no diretório /bin:
[alex@linux alex]$ ls -l /bin/bash
 
-rwxr-xr-x 1 root root  316848 Feb 27  2000 /bin/bash

Aqui nós vemos:
  • O arquivo "/bin/bash" é propriedade do usuário "root"
  • O superusuário tem direitos de ler, escrever e executar este arquivo
  • O arquivo é propriedade do grupo "root"
  • Membros do grupo "root" pode também ler e executar este arquivo
  • Qualquer pessoa também pode ler e executar este arquivo
Na figura abaixo, vemos como a primeira parte da lista é interpretada. Isto consiste de um caractere indicando o tipo de arquivo ("-" para arquivos, "dir" para diretórios), seguido de três conjunto de três caracteres ( read, write & execute ou "-" sem permissão) que significam as permissões de ler, escrever e execução para o proprietário, grupo e público.

permissions diagram
Estes três conjunto de caracteres são na sequência: o proprietário do arquivo, proprietário do grupo, e outros usuários do sistema.

-rw-rw-r-- 1 usuario usuario


O primeiro dígito especifica o tipo de arquivo, que pode ser:
·         d —  um diretório
   ·         - (traço) — um arquivo comum (ao invés de diretório ou link)
   ·         l — uma conexão(link) simbólica a  outro programa ou arquivo onde quer que seja do sistema.
Há outras possibilidades, que estão no escopo da Referência do Red Hat Enterprise Linux System Administration Guide.
Além do primeiro item, em cada um dos seguinte conjunto de caracteres, você pode ver algo como:
   ·         r    —   o arquivo pode ser lido
   ·         w    —   o arquivo pode ser escrito
   ·         x  —  o arquivo pode ser executado (se for um programa)
   ·         - (traço)  — um permissão específica não foi atribuída
Quando você ver um traço no proprietário, no grupo, ou em outros usuários, significa que a permissão específica não foi concedida. Olhe para a primeira coluna de algo.txt e identifique suas permissões.

ls -1 algo.txt -rw-rw-r-- 1 user user 150 Mar 19 08:08 algo.txt

O proprietário do arquivo (neste caso o próprio usuário) tem permissão para ler e escrever o arquivo. No grupo, o usuário também tem permissão para ler e escrever em algo.txt. Como o arquivo não é um programa, nem o proprietário nem o grupo tem permissão para executar.

 chmod

O comando chmod é usado para alterar (change mode) as permissões de um arquivo ou diretório. Para usar, especifique as configurações de permissão desejada, e o arquivo ou arquivos ao qual deseja-se modificar. Há duas maneiras de especificar as permissões.

Alterar Permissões Através de Símbolos ou Letras:


Pense nestas configurações como um tipo de atalho quando você deseja alterar as permissões com chmod, porque tudo que você realmente precisa fazer é se lembrar de alguns símbolos e letras com o comando chmod.
Eis uma lista do que estes atalhos representam:
Identificadores
 —  o usuário a quem pertence o arquivo (isto é, o proprietário)
 —  o grupo ao qual o usuário pertence
—   outros usuários (que não seja o proprietário ou o grupo do proprietário)
—   quaisquer outros ou todos (uge o)
Permissions
r  —  acesso para leitura
w  —  acesso para escrita
x  —  acesso para execução
Actions
+  —  adiciona a permissão
-  —  remove a permissão
 —  faz disto a única permissão

Testando a habilidade em Permissões:

Deseja testar sua habilidade em manipular permissões? Remova todas as permissões do arquivo  algum.txt — de todos os usuários.


[alex@linux alex]$ chmod a-rwx algum.txt


 Agora, verifique se você pode ler o arquivo utilizando o comando cat algum.txt, que deverá retornar o seguinte:

[alex@linux alex]$ chmod a-rwx algum.txt 
cat: algum.txt: Permission denied

[alex@linux alex]$ 

Removendo todas as permissões, incluindo suas próprias,o arquivo foi bloqueado com sucesso. Mas desde ele pertença a você, então sempre poderá alterar suas permissões de volta com os comandos:

[alex@linux alex]$ chmod u+rw algum.txt 


 Utilize o comando cat foo.txt para verificar que você, o proprietário de arquivo, pode ler o arquivo novamente.
Aqui estão alguns exemplos comuns de configurações que podem ser utilizado com chmod:
·         g+w      —  adiciona acesso de escrita para o grupo
·         o-rwx —  retira todas as permissões de outros usuários
·         u+x        —  permite ao proprietário a execução do arquivo
·         a+rw     —  permite a todos a ler e escrever o arquivo
·         ug+r     —  permite ao proprietário e ao grupo ler o arquivo
·         g=rx     —  permite somente ao grupo ler e executar o arquivo (não escrever)

Em adicionando a opção -R , você pode alterar as permissões para as árvores de diretório inteira.
Devido ao fato de não de poder realmente "executar" um diretório como o faria a uma aplicação, quando adicionar (ou remover) a permissão de execução para um diretório, realmente está permitindo ( ou negando) acesso para pesquisa através deste diretório.
Verifique o algum diretório que você tenha criado, listando todos os arquivos em seu diretório home.
 
[alex@linux alex]$ ls -l /home/>user_alex</                           
As permissões para o diretório serão:


[alex@linux alex]$ ls -l /home/>user_alex</
drwxrwxr-x 2 user_alex user_alex 4996 Jan 6 15:05 diretorio_qualquer 

Se não for permitido a outros ter acesso de execução sobre o diretório_qualquer, não importa quem tenha o acesso para ler ou escrever. Ninguém pode acessar o diretório_qualquer a menos que eles saibam exatamente o nome do arquivo.
Por exemplo, digite a linha abaixo para remover as permissões de todos os usuários:
[alex@linux alex]$ chmod a-x diretorio_qualquer                          
Aqui está o que acontecerá quando tentar alterar o diretório usando o comando cd diretorio_qualquer/  após remover a permissão de todos:

[alex@linux alex]$ chmod a-x diretorio_qualquer                          
bash: diretorio_qualquer/: Permission denied
[alex@linux alex]$

Agora, restorar a permissão do proprietário e do grupo:
[alex@linux alex]$ chmod ug+x diretorio_qualquer                          

Se verificar o resultado com ls -l, pode-se ver que somente a outros usuários será negado o acesso ao diretório_qualquer.

[alex@linux alex]$ ls -l /home/>user_alex</
drwxrwxr-- 2 user_alex user_alex 4996 Jan 6 15:05 diretorio_qualquer  


Alterar Permissões Através de Números:

Outra maneira de alterar permissões é pelo uso de representações numéricas.
Verificar a permissão original de um_arquivo_qualquer.txt:

[alex@linux alx]$ ls -l um_arquivo_qualquer.txt
-rw-rw-r-- 1 user_alx user_alx 150 Nov 6 15:05 um_arquivo_qualquer.txt 

Cada configuração de permissão pode ser representado por um valor numérico:
  • r    =  4
  • w   =  2
  • x    =  1
  • -    =  0

Quando este valores são somados uns ao outros, o total é usado para configurar uma permissão especifica. Por exemplo, se desejar ajustar uma permissão de ler e escrever, deve-se ter um valor 6; 
  • 4 (leitura) + 2 (escrita) = 6

Para um_texto_qualquer.txt, é exibido o ajuste de permissão numérica:

- (rw-) (rw-) (r--)

O total para o usuário é seis (4+2+0), o total para o grupp é seis(4+2+0), e o total para outros usuários é quatro (4+0+0). A configuração da permissão é exibido como 664.

Se desejar alterar um_arquivo_qualquer.txt, assim como aqueles em seu grupo não tem acesso de gravação, mas ainda podem ler o arquivo, remova o acesso ao subtrair dois (2) a partir desse conjunto de números.
O valor numérico então se tornará em seis, quatro, quatro (644).
Para implementar esta configuração, digite:


[alex@linux alex]$ chmod 644 um_arquivo_qualquer.txt             
  

Agora verificar as alterações listando o arquivo, e terá uma saída assim:

[alex@linux alx]$ ls -l um_arquivo_qualquer.txt
-rw-r--r-- 1 user_alx user_alx 150 Jan 6 15:05 um_arquivo_qualquer.txt  


Agora, nem o grupo nem outros usuários públicos têm permissão de escrever em um_arquivo_qualquer.txt. Para retornar o direito de acesso de escrever do grupo, adicione o valor de  w (2) ao segundo conjunto da permissão.


[alex@linux alex]$ chmod 664 um_arquivo_qualquer.txt             
  




AVISO:
Configurar o acesso para 666 permite a qualquer um ler e escrever em um arquivo ou diretório. 
Configurar o acesso para 777 permite a qualquer um ler, escrever e executar o arquivo.
Esta configuração pode permitir a ocorrência de adulteração de arquivos confidenciais ou sensíveis ao sistema, por este motivo, normalmente não é um bom procedimento utilizá-la.



Pode-se ainda, pensar em permissão como uma série de bits (que é o que o PC pensa sobre eles). Eis como funciona:

rwx rwx rwx = 111 111 111
rw- rw- rw- = 110 110 110
rwx --- --- = 111 000 000
 
e assim por diante...
 
rwx = 111 in binary = 7
rw- = 110 in binary = 6
r-x = 101 in binary = 5
r-- = 100 in binary = 4
 
Agora, se você representa cada um dos três conjuntos de permissões (proprietário, grupo e público) como um simples dígito, você tem uma maneira muito conveniente de expressar a configuração de permissão possível. Por exemplo, se desejamos configurar algum_arquivo para ter permissão de ler e escrever pelo usuário, mas desejamos manter o arquivo confidencial para os usuários públicos, devemos:

[alex@linux alex]$ chmod 600 algum_arquivo

Aqui está um tabela de números que cobrem todas as configuração comuns. O que iniciam com "7" são usados para programas (já que eles permitem as execuções dos arquivos) e o restante para outros tipos de arquivos.

Valor
Significado
777
(rwxrwxrwx) Sem restrição de permissão. Qualquer usuário pode fazer qualquer coisa com o arquivo. Normalmente não é uma configuração desejável.
755
(rwxr-xr-x) O proprietário pode ler, escrever e executar o arquivo. O demais usuários podem ler e executar o arquivo. A configuração é comum para programas que são utilizados por todos os usuários.
700
(rwx------) O proprietário pode ler, escrever e executar o arquivo. Ninguém mais tem quaisquer direitos. A configuração é útil para programas que somente o proprietário pode utilizar e tem que manter-lo restrito a outros usuários.
666
(rw-rw-rw-) Todos os usuários podem ler e escrever o arquivo.
644
(rw-r--r--)  O proprietário pode ler e, escrever o arquivo, enquanto outros podem somente ler o arquivo. Uma configuração comum para arquivos de dados que todos podem ler, mas somente o proprietário pode fazer alterações.
600
(rw-------)  O proprietário pode ler e, escrever o arquivo. Outros não têm quaisquer diretos. Uma configuração comum para arquivos de dados que o proprietário deseja manter restritos.

Permissões de Diretórios


O comando chmod pode também ser usado para controle de permissões de acesso para diretórios. Geralmente, o esquema de permissões para diretórios funciona da mesma maneira que ele funcionam para arquivos. Porém, a execução da  permissão é usada de maneira diferente. Este permite controle para acessar, relaciona os arquivos e outras coisas. Aqui estão algumas configurações úteis para diretórios:

Valor
Significados
777
(rwxrwxrwx) Sem restrições em permissões de acesso. Qualquer usuário pode listar arquivos, criar novos arquivos no diretório e apagar arquivos no diretório. Geralmente não é uma boa configuração.
755
(rwxr-xr-x) O proprietário do diretório tem acesso total. Os demais usuários podem listar o diretório, mas não podem criar arquivos nem apagá-los. Esta configuração é comum para diretórios os quais se deseja compartilhar com outros usuários.
700
(rwx------) O proprietário do diretório tem acesso total. Ninguém mais tem quaisquer direitos. A configuração é útil para diretórios os quais somente o proprietário pode utilizar e deve ser restrito a outros usuários.

 Tornando-se Um Superusuário Por Alguns Instantes:

É frequentemente útil se tornar o superusuário para executar tarefas importantes para a administração do sistema, mas como você foi avisado (e não somente por mim!), você deverá não estar logado como superusuário. Em muitas versões do Linux, há um programa que pode dar um acesso temporário com privilégios de superusuário. Este programa é chamado su (abreviação para substitute user - usuário substituto) e pode ser usado naquele caso quando você necessitar ser o superusuário em algumas poucas tarefas. Para se tornar um superusuário, simplesmente digite o comando su. Será solicitado a você que digite a senha do superusuário:

[alex@linux alex]$ su
Password:
[root@linux alex]#

Depois de executar o comando su, você terá uma nova sessão shell como superusuário. Para sair da sessão como superusuário, digite exit e você retornará para sua sessão anterior.
Em algumas distribuições, mais notavelmente no Ubuntu, um método alternativo é utilizado. Ao invés de usar su,  estes sistemas empregam no lugar o comando sudo. Com sudo, são concedidos privilégios de superusuário para um ou mais usuários em suas necessidades básicas. Para executar um comando como superusuário, o comando desejado é simplesmente precedido com o comando sudo. Depois da execução do comando, é solicitado a senha de usuário de usuário ao invés da senha de superusuário:

[alex@linux alex]$ sudo algum_comando
Password:
[alex@linux alex]$

Alterando O Propriedade Do Arquivo

Você pode alterar o proprietário de um arquivo utilizando o comando chown. Aqui está um exemplo: suponha que eu desejo alterar o proprietário de algum_arquivo de "eu" para "voce". Eu poderia:

[alex@linux alex]$ su
Password:
[root@linux alex]# chown voce algum_arquivo
[root@linux alex]# exit
[alex@linux alex]$

Perceba que para alterar o proprietário de um arquivo, você deve ser o superusuário. Para fazer isto, nosso exemplo emprega do comando su, então ele executa o chown, e finalmente nós digitamos exit para retornar a nossa sessão anterior.
chown funciona da mesma maneira nos diretórios assim como eles o fazem nos arquivos.

Alterando A Propriedade do Grupo

O proprietário do grupo de um arquivo ou diretório pode ser alterados com chgrp. This command is used like this:

[alex@linux alex]$ chgrp novo_grupo algum_arquivo

No exemplo acima, nós mudamos o proprietário do grupo de algum_arquivo de seu grupo anterior para "novo_grupo". Você deve ser o proprietário do arquivo ou diretório para executar um chgrp.

Nenhum comentário:

Postar um comentário