No Linux, o acesso aos ficheiros é gerido através das permissões, atributos e propriedade dos ficheiros. Isto assegura que somente usuários e processos autorizados podem acessar arquivos e diretórios.
Este tutorial cobre como usar o comando chmod
para alterar as permissões de acesso de arquivos e diretórios.
Permissões de Arquivos do Linux #
Antes de ir mais longe, vamos explicar o modelo básico de permissões do Linux.
No Linux, cada ficheiro é associado a um dono e a um grupo e atribuído com direitos de acesso de permissão para três classes diferentes de utilizadores:
- O dono do ficheiro.
- Os membros do grupo.
- Outros (todos os outros).
A propriedade do ficheiro pode ser alterada utilizando os ficheiros chown
e chgrp
commands.
Existem três tipos de permissão de ficheiros que se aplicam a cada classe:
- A permissão de leitura.
- A permissão de escrita.
- A permissão de execução.
Este conceito permite especificar quais usuários têm permissão para ler o arquivo, escrever no arquivo, ou executar o arquivo.
Permissões de arquivo podem ser visualizadas usando o comando:ls
command:
ls -l filename.txt
-rw-r--r-- 12 linuxize users 12.0K Apr 8 20:51 filename.txt|- | | | | | | || | | | | | +-----------> 7. Group| | | | | +-------------------> 6. Owner| | | | +--------------------------> 5. Alternate Access Method| | | +----------------------------> 4. Others Permissions| | +-------------------------------> 3. Group Permissions| +----------------------------------> 2. Owner Permissions+------------------------------------> 1. File Type
O primeiro caractere mostra o tipo de arquivo. Pode ser um ficheiro normal (-
), directório (d
), um link simbólico(l
), ou qualquer outro tipo especial de ficheiro.
Os nove caracteres seguintes representam as permissões do ficheiro, três trigémeos de três caracteres cada. O primeiro trigêmeo mostra as permissões do proprietário, o segundo grupo de permissões, e o último trigêmeo mostra as permissões de todos os outros. As permissões podem ter um significado diferente dependendo do tipo de ficheiro.
No exemplo acima (rw-r--r--
) significa que o dono do ficheiro tem permissões de leitura e escrita (rw-
), o grupo e os outros só têm permissões de leitura (r--
).
Cada um dos três trigêmeos de permissão pode ser construído com os seguintes caracteres e ter um efeito diferente, dependendo se eles estão definidos para um arquivo ou para um diretório:
Efeito das permissões em arquivos
Permitir | Caracter | Medição em arquivo | |
---|---|---|---|
Ler |
- |
O arquivo não é legível. Você não pode ver o conteúdo do arquivo. | |
r |
O arquivo é legível. | ||
>Escrever | - |
O ficheiro não pode ser alterado ou modificado. | |
w |
O ficheiro pode ser alterado ou modificado. | ||
Executar | - |
O ficheiro não pode ser executado. | |
x |
O ficheiro pode ser executado. | ||
s |
Se encontrado no arquivo user triplot, define o bit setuid . Se encontrado no group triplet, define o bit setgid . Também significa que x flag está definido.Quando as bandeiras setuid ou setgid estão definidas num ficheiro executável, o ficheiro é executado com o dono do ficheiro e/ou privilégios do grupo. |
||
S |
O mesmo que s mas a bandeira x não está definida. Esta bandeira é raramente usada em arquivos. |
||
t |
Se encontrada no others triplet ela define o sticky bit.Também significa que x bandeira está definida. Esta bandeira é inútil em ficheiros. |
||
T |
O mesmo que t mas a bandeira x não está configurada. Esta bandeira é inútil em ficheiros. |
Efeito de Permissões em Directórios (Pastas)
No Linux, Directórios são tipos especiais de ficheiros que contêm outros ficheiros e directórios.
Permissões | Caracter | Medição sobre Diretório | |
---|---|---|---|
Ler |
- |
O conteúdo do diretório não pode ser mostrado. | |
r |
O conteúdo do directório pode ser mostrado. (por exemplo, pode listar ficheiros dentro do directório com ls .) |
||
Escrever | - |
O conteúdo do directório não pode ser alterado. | |
w |
O conteúdo do directório pode ser alterado. (e.g. Pode criar novos ficheiros, apagar ficheiros ..etc.) |
||
Executar | - |
O directório não pode ser alterado para. | |
x |
O directório pode ser navegado usando cd . |
||
s |
Se encontrado no user triplet, ele define o bit setuid . Se encontrado no group triplet, define o bit setgid . Isso também significa que x flag está definido. Quando o flag setgid é definido em um diretório os novos arquivos criados dentro dele herdam o ID do grupo de diretório (GID), ao invés do ID do grupo primário do usuário que criou o arquivo.setuid não tem efeito em diretórios. |
||
S |
O mesmo que s mas o flag x não está definido. Esta bandeira é inútil em diretórios. |
||
t |
Se encontrada no others triplet ela define o sticky bit.Também significa que x bandeira está definida. Quando o bit sticky é definido em um diretório, apenas o dono do arquivo, o dono do diretório ou o usuário administrativo pode apagar ou renomear os arquivos dentro do diretório. |
||
T |
O mesmo que t mas o flag x não está definido. Esta bandeira é inútil nos directórios. |
Utilizar chmod #
O comando chmod
toma a seguinte forma geral:
chmod MODE FILE...
O comando chmod
permite alterar as permissões num ficheiro utilizando um modo simbólico ou numérico ou um ficheiro de referência. Explicaremos os modos com mais detalhes mais adiante neste artigo. O comando pode aceitar um ou mais ficheiros e/ou directórios separados por espaço como argumentos.
Apenas root, o dono do ficheiro ou utilizador com privilégios sudo pode alterar as permissões de um ficheiro. Tenha cuidado extra quando usar chmod
, especialmente quando alterar recursivamente as permissões.
Método de Símbolos (Texto) #
A sintaxe do comando chmod
quando usar o modo simbólico tem o seguinte formato:
chmod perms… FILE...
O primeiro conjunto de flags (), flags de utilizadores, define quais os utilizadores que classificam as permissões do ficheiro que são alteradas.
-
u
– O dono do arquivo. -
g
– Os usuários que são membros do grupo. -
o
– Todos os outros usuários. -
a
– Todos os usuários, idênticos augo
.
Se a bandeira de usuários for omitida, a bandeira padrão é a
e as permissões que são definidas pelo umaskare não são afetadas.
O segundo conjunto de flags (), os flags de operação, define se as permissões devem ser removidas, adicionadas ou definidas:
-
-
Remove as permissões especificadas. -
+
Adiciona as permissões especificadas. -
=
Altera as permissões atuais para as permissões especificadas. Se nenhuma permissão for especificada após o símbolo=
, todas as permissões da classe de usuário especificada são removidas.
As permissões (perms...
) podem ser explicitamente definidas usando zero ou uma ou mais das seguintes letras: r
, w
, x
, X
, s
, e t
. Use uma única letra do conjunto u
, g
, e o
quando copiar permissões de uma para outra classe de usuário.
Quando definir permissões para mais de uma classe de usuário (), use vírgulas (sem espaços) para separar os modos simbólicos.
Below são alguns exemplos de como usar o comando chmod
no modo simbólico:
-
Dê aos membros do grupo permissão para ler o arquivo, mas não para escrever e executá-lo:
chmod g=r filename
-
Remover a permissão de execução para todos os usuários:
chmod a-x filename
-
Remover novamente a permissão de escrita para outros usuários:
chmod -R o-w dirname
-
Remover a permissão de leitura, escrita e execução para todos os usuários exceto o dono do arquivo:
chmod og-rwx filename
A mesma coisa também pode ser feita usando o seguinte formulário:
chmod og= filename
-
Dê permissão de leitura, escrita e execução para o dono do arquivo, permissões de leitura para o grupo do arquivo e sem permissões para todos os outros usuários:
chmod u=rwx,g=r,o= filename
-
Adicionar as permissões do dono do ficheiro às permissões que os membros do grupo do ficheiro têm:
chmod g+u filename
-
Adicionar um bit pegajoso a um determinado directório:
chmod o+t dirname
Método numérico #
A sintaxe do comando chmod
quando se usa o método numérico tem o seguinte formato:
chmod NUMBER FILE...
Quando se usa o modo numérico, pode-se definir as permissões para as três classes de usuários (dono, grupo, e todas as outras) ao mesmo tempo.
O NUMBER
pode ser um número de 3 ou 4 dígitos.
Quando se utiliza o número de 3 dígitos, o primeiro dígito representa as permissões do dono do ficheiro, o segundo o grupo do ficheiro, e o último todos os outros utilizadores.
Cada permissão de escrita, leitura e execução tem o seguinte valor de número:
-
r
(ler) = 4 -
w
(escrever) = 2 -
x
(executar) = 1 - sem permissões = 0
O número de permissões de uma classe específica do usuário é representado pela soma dos valores das permissões para aquele grupo.
Para descobrir as permissões do arquivo em modo numérico basta calcular os totais para todas as classes de usuários. Por exemplo, para dar permissão de leitura, escrita e execução ao dono do arquivo, ler e executar permissões para o grupo do arquivo e somente ler permissões para todos os outros usuários você faria o seguinte:
- Proprietário: rwx=4+2+1=7
- Grupo: r-x=4+0+1=5
- Outros: r-x=4+0+0=4
Usando o método acima chegamos ao número 754
, que representa as permissões desejadas.
Para configurar o número setuid
, setgid
, e sticky bit
as bandeiras usam o número de quatro dígitos.
Quando o número de 4 dígitos é usado, o primeiro dígito tem o seguinte significado:
- setuid=4
- setgid=2
- sticky=1
- sem alterações = 0
Os três dígitos seguintes têm o mesmo significado que quando se usa o número de 3 dígitos.
Se o primeiro dígito for 0, pode ser omitido, e o modo pode ser representado com 3 dígitos. O modo numérico 0755
é o mesmo que 755
.
Para calcular o modo numérico você também pode usar outro método (método binário), mas é um pouco mais complicado. Saber como calcular o modo numérico usando 4, 2, e 1 é suficiente para a maioria dos usuários.
Pode verificar as permissões do ficheiro na notação numérica usando o comando stat
command:
stat -c "%a" filename
644
Aqui estão alguns exemplos de como usar o comando chmod
no modo numérico:
-
Dê ao dono do ficheiro permissões de leitura e escrita e apenas permissões de leitura aos membros do grupo e a todos os outros utilizadores:
chmod 644 dirname
-
Dê ao dono do ficheiro permissões de leitura, escrita e execução, permissões de leitura e execução aos membros do grupo e sem permissões a todos os outros utilizadores:
chmod 750 dirname
-
Dar permissões de leitura, escrita e execução, e um bit pegajoso para um determinado diretório:
chmod 1777 dirname
-
Recursivamente definir permissões de leitura, escrita e execução para o dono do arquivo e sem permissões para todos os outros usuários em um determinado diretório:
chmod -R 700 dirname
Usar um ficheiro de referência #
A opção --reference=ref_file
permite-lhe definir as permissões do ficheiro para serem as mesmas do ficheiro de referência especificado (ref_file
).
chmod --reference=REF_FILE FILE
Por exemplo, o seguinte comando irá atribuir as permissões do ficheiro file1
a file2
>
chmod --reference=file1 file2
Alterar novamente as permissões do ficheiro #
Para operar recursivamente em todos os ficheiros e directórios sob o directório especificado, use a opção -R
(--recursive
):
chmod -R MODE DIRECTORY
Por exemplo, para alterar as permissões de todos os arquivos e subdiretórios sob o diretório /var/www
para 755
você usaria:
chmod -R 755 /var/www
Operating on Symbolic Links #
Symbolic linksalways have 777
permissions.
Por defeito, ao alterar as permissões do symlink, chmod
irá alterar as permissões no ficheiro para o qual o link está a apontar.
chmod 755 symlink
Chances são que, em vez de alterar a propriedade do alvo, irá obter um “cannot access ‘symlink’: Permission denied” error.
O erro ocorre porque por padrão na maioria das distribuições Linux os links simbólicos estão protegidos, e você não pode operar nos arquivos de destino. Esta opção é especificada em /proc/sys/fs/protected_symlinks
. 1
significa habilitado e 0
desabilitado. É recomendado não desabilitar a proteção symlink.
Mudando as permissões de arquivos em massa #
Algumas vezes há situações em que você precisaria alterar em massa arquivos e diretórios permissões.
O cenário mais comum é alterar recursivamente as permissões do arquivo do site para 644
e as permissões do diretório para 755
.
Usando o método numérico:
find /var/www/my_website -type d -exec chmod 755 {} \;
find /var/www/my_website -type f -exec chmod 644 {} \;
Usando o método simbólico:
find /var/www/my_website -type d -exec chmod u=rwx,go=rx {} \;
find /var/www/my_website -type f -exec chmod u=rw,go=r {} \;
O comando find
procurará por ficheiros e directórios em /var/www/my_website
e passará cada ficheiro e directório encontrado para o comando chmod
para definir as permissões.
Conclusão #
O comando chmod
altera as permissões do ficheiro. As permissões podem ser definidas usando o modo simbólico ou numérico.
Para saber mais sobre chmod
visite o chmod manpage.