Você está na página 1de 10

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 <pasta do fulano>

Para fazer com que só o fulano mexa nos seus arquivos:


# chmod u=rwx <pasta do fulano>

é 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

Você também pode gostar