Desde o seu lançamento no início dos anos 90, o Linux foi desenvolvido como um sistema multiusuário. Um número ilimitado de usuários pode trabalhar no Linux simultaneamente. Os usuários precisam efetuar login no sistema antes de iniciar uma sessão na estação de trabalho. Cada usuário possui um nome de usuário com uma senha correspondente. Essa diferenciação entre usuários garante que aqueles não autorizados não possam ver os arquivos aos quais não têm permissão. Mudanças maiores no sistema, como instalações de novos programas, geralmente também são inviáveis ou restritas para usuários normais. Somente o usuário, ou superusuário, possui capacidade irrestrita de efetuar mudanças no sistema e tem acesso ilimitado a todos esses arquivos. Aqueles que usam esse conceito com discernimento, apenas efetuando login com acesso total de root quando necessário, podem evitar a perda não intencional de dados. Em circunstâncias normais, somente o root pode apagar arquivos de sistema ou formatar discos rígidos. Portanto, a ameaça do efeito do Cavalo de Tróia ou da digitação acidental de comandos destrutivos pode ser consideravelmente reduzida.
Basicamente, todo arquivo em um sistema de arquivos do Linux pertence a um usuário e a um grupo. Os grupos proprietários e todos os outros podem ser autorizados a gravar, ler ou executar esses arquivos.
Nesse caso, um grupo pode ser definido como um conjunto de usuários conectados que têm determinados direitos coletivos. Por exemplo, chame um grupo que trabalhe em determinado projeto de project3. Cada usuário de um sistema Linux é um membro de pelo menos um grupo proprietário, normalmente users. Podem existir quantos grupos forem necessários no sistema, mas somente o root é capaz de adicionar grupos. Com o comando groups, todo usuário pode descobrir de quais grupos ele faz parte.
A organização das permissões em sistemas de arquivos pode ser diferente para arquivos e diretórios. As informações sobre permissões de arquivos podem ser exibidas com o comando ls -l. A saída pode aparecer como no Exemplo 27.1, “Exemplo de saída com permissões de arquivos”.
Exemplo 27.1. Exemplo de saída com permissões de arquivos
-rw-r----- 1 tux project3 14197 Jun 21 15:03 Roadmap
Como indica a terceira coluna, esse arquivo pertence ao usuário tux. Ele está atribuído ao grupo project3. Para descobrir as permissões de usuário do arquivo Roadmap, a primeira coluna deve ser examinada com mais cuidado.
- | rw- | r-- | --- |
Tipo | Permissões de usuários | Permissões de grupo | Permissões para outros usuários |
Essa coluna contém um caractere inicial seguido de nove caracteres agrupados em três. A primeira das dez letras representa o tipo de componente do sistema de arquivos. O travessão (–) mostra que este é um arquivo. Um diretório (d), um link (l), um dispositivo de bloco (b) ou um dispositivo de caractere também poderia ser indicado.
Os três próximos blocos seguem um padrão. Os três primeiros caracteres indicam se o arquivo é legível (r) ou não (–). Um w na posição central significa que o objeto correspondente pode ser editado, e um travessão (–) significa que não é possível gravá-lo no arquivo. Um x na terceira posição significa que o objeto pode ser executado. Como o arquivo do exemplo é um arquivo de texto, e não um executável, o acesso executável a esse arquivo específico não é necessário.
Neste exemplo, tux possui, como proprietário do arquivo Roadmap, acesso de leitura (r) e gravação (w), mas não pode executá-lo (x). Os membros do grupo project3 podem ler o arquivo, mas não podem modificá-lo ou executá-lo. Outros usuários não têm qualquer tipo de acesso a esse arquivo. Outras permissões podem ser atribuídas por meio de ACLs (Access Control Lists). Consulte a Seção 27.2.6, “Listas de controle de acesso” para obter mais informações.
As permissões de acesso a diretórios são do tipo d. O significado das permissões individuais para diretórios é ligeiramente diferente.
Exemplo 27.2. Exemplo de saída com permissões de diretórios
drwxrwxr-x 1 tux project3 35 Jun 21 15:15 ProjectData
No Exemplo 27.2, “Exemplo de saída com permissões de diretórios”, o proprietário (tux) e o grupo proprietário (project3) do diretório ProjectData são fáceis de reconhecer. Ao contrário das permissões de acesso do arquivo em Acesso a arquivos, o conjunto de permissões de leitura (r) significa que o conteúdo do diretório pode ser mostrado. A permissão de gravação (w) significa que novos arquivos podem ser criados. A permissão executável (x) significa que o usuário pode mudar para esse diretório. No exemplo acima, o usuário tux e os membros do grupo project3 podem mudar para o diretório ProjectData (x), exibir o seu conteúdo (r) e adicionar ou apagar arquivos (w). Por outro lado, os outros usuários recebem menos permissões de acesso. Eles podem digitar o diretório (x) e pesquisá-lo (r), mas não podem digitar novos arquivos (w).
As permissões de acesso de um arquivo ou diretório podem ser mudadas pelo proprietário e, obviamente, pelo root com o comando chmod seguido dos parâmetros que mudam as permissões e os nomes de um ou mais arquivos. Os parâmetros formam categorias diferentes:
usuários interessados
u (usuário) – proprietário do arquivo
g (grupo) – grupo que possui o arquivo
o (outros) – usuários adicionais (se nenhum parâmetro for informado, as mudanças se aplicarão a todas as categorias)
um caractere para apagamento (-), configuração (=) ou inserção (+)
as abreviações
r - ler
w - gravar
x - executar
nome ou nomes de arquivos separados por espaços
Se, por exemplo, o usuário tux em Exemplo 27.2, “Exemplo de saída com permissões de diretórios” também deseja conceder a outros usuários acesso de gravação (w) ao diretório ProjectData, ele pode fazer isso usando o comando chmod o+w ProjectData.
Entretanto, se ele quiser negar a todos os usuários, exceto a si mesmo, permissões de gravação, é possível fazer isso digitando o comando chmod go-w ProjectData. Para proibir todos os usuários de adicionarem um novo arquivo à pasta ProjectData, digite chmod -w ProjectData. Assim, nem mesmo o proprietário pode gravar o arquivo sem primeiro restabelecer as permissões de gravação.
Outros comandos importantes para controlar a propriedade e as permissões dos componentes do sistema de arquivos são chown (mudar usuário) e chgrp (mudar grupo). O comando chown pode ser usado para transferir a propriedade de um arquivo para outro usuário. Entretanto, somente o root tem permissão para efetuar essa mudança.
Suponha que o arquivo Roadmap do Exemplo 27.2, “Exemplo de saída com permissões de diretórios” não deva mais pertencer a tux, e sim ao usuário geeko. O root deverá digitar chown geeko Roadmap.
chgrp muda a propriedade do grupo do arquivo. Contudo, o proprietário do arquivo deve ser um membro do novo grupo. Dessa forma, o usuário tux do Exemplo 27.1, “Exemplo de saída com permissões de arquivos” pode alternar o grupo que possui o arquivo ProjectData para project4 com o comando chgrp project4 ProjectData, desde que ele seja membro desse novo grupo.
Em determinadas situações, as permissões de acesso podem ser muito restritivas. No entanto, o Linux possui configurações adicionais para permitir a mudança temporária do usuário atual e da identidade do grupo para uma ação específica. Por exemplo, o programa passwd normalmente requer permissões de root para acessar /etc/passwd. Este arquivo contém algumas informações importantes, como os diretórios pessoais de usuários e IDs de usuário e grupo. Sendo assim, um usuário normal não poderia mudar passwd, já que seria muito arriscado conceder a todos os usuários acesso direto a este arquivo. Uma possível solução para esse problema é o mecanismo setuid. O setuid (definir ID do usuário) é um atributo de arquivo especial que instrui o sistema a executar programas marcados adequadamente com um ID de usuário específico. Considere o comando passwd:
-rwsr-xr-x 1 root shadow 80036 2004-10-02 11:08 /usr/bin/passwd
Você pode ver o s que denota que setuid bit está definido para a permissão do usuário. Por meio do setuid bit, todos os usuários iniciando o comando passwd o executam como root.
O setuid bit se aplica a usuários. Entretanto, existe também uma propriedade equivalente para grupos: o setgid bit. Um programa para o qual esse bit foi definido é executado com o ID do grupo no qual ele foi gravado, independentemente do usuário que iniciou o programa. No entanto, em um diretório com o setgid bit, todos os arquivos e diretórios criados recentemente são atribuídos ao grupo ao qual o diretório pertence. Considere o seguinte diretório de exemplo:
drwxrws--- 2 tux archive 48 Nov 19 17:12 backup
Você pode ver o s que denota que o setuid bit está definido para a permissão do usuário. O proprietário do diretório e membros do grupo archive poderão acessar este diretório. Os usuários que não são membros deste grupo são “mapeados” para o grupo respectivo. O ID de grupo efetivo de todos os arquivos gravados será archive. Por exemplo, um programa de backup que é executado com o ID de grupo archive é capaz de acessar este diretório mesmo sem privilégios de root.
Também existe o sticky bit. Existe uma diferença caso ele pertença a um programa executável ou a um diretório. Se ele pertencer a um programa, qualquer arquivo marcado dessa forma será carregado na memória RAM a fim de evitar a necessidade de obtê-lo no disco rígido toda vez que for usado. Esse atributo é usado raramente, pois os discos rígidos modernos são muito rápidos. Se este bit estiver designado a um diretório, ele impedirá que usuários apaguem arquivos de outros usuários. Exemplos típicos incluem os diretórios /tmp e /var/tmp:
drwxrwxrwt 2 root root 1160 2002-11-19 17:15 /tmp
O conceito de permissão tradicional para objetos do sistema de arquivos do Linux, como arquivos ou diretórios, pode ser expandido com o uso de ACLs. Elas admitem a atribuição de permissões a usuários individuais ou a grupos que não sejam o proprietário original ou a um grupo proprietário de um objeto do sistema de arquivos.
Arquivos ou diretórios com permissões de acesso estendidas podem ser detectados com um simples comando ls -l:
-rw-r--r--+ 1 tux project3 14197 Jun 21 15:03 Roadmap
O proprietário do Roadmap é o tux que pertence ao grupo project3. O tux contém acesso de gravação e leitura a este arquivo. O grupo e todos os usuários têm acesso de leitura. A única diferença que diferencia esse arquivo de um arquivo sem uma ACL é o + extra na primeira coluna com os bits de permissão.
Obtenha detalhes sobre a ACL executando getfacl Roadmap:
# file: Roadmap # owner: tux # group: project3 user::rw- user:jane:rw- effective: r-- group::r-- group:djungle:rw- effective: r-- mask::r-- other::---
As três primeiras linhas da saída não retêm informações que não estejam disponíveis com ls -l. Essas linhas informam somente o nome do arquivo, o proprietário e o grupo proprietário. As linhas de 4 a 9 contêm as entradas de ACL. As permissões de acesso convencional representam um subconjunto das possíveis permissões quando se usa ACLs. A ACL do exemplo concede acesso de leitura e gravação ao proprietário do arquivo, assim como ao usuário jane (linhas 4 e 5). O conceito convencional foi expandido permitindo o acesso a um usuário extra. O mesmo se aplica ao acesso de grupo. O grupo proprietário possui permissões de leitura (linha 6) e o grupo djungle possui permissões de leitura e gravação. A entrada mask na linha 8 reduz as permissões efetivas para o usuário jane e o grupo djungle para acesso de leitura. Outros usuários e grupos não recebem nenhum tipo de acesso ao arquivo (linha 9).
Foram fornecidas apenas informações básicas. Encontre mais informações detalhadas sobre ACLs no Capítulo 24, Listas de controle de acesso no Linux.