Permissões no Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Olá a todos. Esta é uma tradução de um artigo do livro RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 e EX300.

De mim mesmo: Espero que o artigo seja útil não apenas para iniciantes, mas também ajude administradores mais experientes a otimizar seus conhecimentos.

Então, vamos.

Permissões no Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Para acessar arquivos no Linux, são usadas permissões. Essas permissões são atribuídas a três objetos: o proprietário do arquivo, o proprietário do grupo e outro objeto (ou seja, todos os demais). Neste artigo, você aprenderá como aplicar permissões.

Este artigo começa com uma visão geral dos conceitos básicos, seguida por uma discussão sobre permissões especiais e listas de controle de acesso (ACLs). No final deste artigo, abordamos a configuração de permissões padrão via umask, bem como o gerenciamento de atributos estendidos do usuário.

Gerenciamento de propriedade de arquivos

Antes de discutir permissões, você deve estar ciente da função do proprietário do arquivo e do diretório. A propriedade de arquivos e diretórios é vital para lidar com permissões. Nesta seção, você aprenderá primeiro como pode ver o proprietário. Você aprenderá então como alterar o proprietário e o usuário do grupo para arquivos e diretórios.

Exibindo o proprietário de um arquivo ou diretório

No Linux, todo arquivo e todo diretório tem dois proprietários: um usuário e um proprietário de grupo.

Esses proprietários são definidos quando um arquivo ou diretório é criado. O usuário que cria o arquivo torna-se o proprietário desse arquivo, e o grupo principal ao qual o mesmo usuário pertence também se torna o proprietário desse arquivo. Para determinar se você, como usuário, tem permissão para acessar um arquivo ou diretório, o shell verifica a propriedade.

Isso acontece na seguinte ordem:

  1. O shell verifica se você é o proprietário do arquivo que deseja acessar. Se você for o proprietário, obterá permissões e o shell interromperá a verificação.
  2. Se você não for o proprietário do arquivo, o shell verificará se você é membro de um grupo que possui permissões no arquivo. Se você for membro deste grupo, acessará o arquivo com as permissões definidas pelo grupo e o shell interromperá a verificação.
  3. Se você não for usuário nem proprietário de um grupo, receberá os direitos de outros usuários (Outro).

Para ver as atribuições atuais do proprietário, você pode usar o comando ls -l. Este comando mostra o usuário e proprietário do grupo. Abaixo você pode ver as configurações do proprietário dos diretórios no diretório /home.

[root@server1 home]# ls -l
total 8
drwx------. 3  bob            bob            74     Feb   6   10:13 bob
drwx------. 3  caroline       caroline       74     Feb   6   10:13 caroline
drwx------. 3  fozia          fozia          74     Feb   6   10:13 fozia
drwx------. 3  lara           lara           74     Feb   6   10:13 lara
drwx------. 5  lisa           lisa           4096   Feb   6   10:12 lisa
drwx------. 14 user           user           4096   Feb   5   10:35 user

Com o comando ls você pode exibir o proprietário dos arquivos em um determinado diretório. Às vezes, pode ser útil obter uma lista de todos os arquivos do sistema que possuem um determinado usuário ou grupo como proprietário. Para isso você pode usar find. Argumento encontrar usuário pode ser usado para esse fim. Por exemplo, o comando a seguir lista todos os arquivos que pertencem ao usuário linda:

find / -user linda

Você também pode usar find para procurar arquivos que tenham um determinado grupo como proprietário.

Por exemplo, o comando a seguir procura todos os arquivos pertencentes ao grupo usuários:

find / -group users

Alterar proprietário

Para aplicar as permissões apropriadas, a primeira coisa a considerar é a propriedade. Existe um comando para isso chown. A sintaxe deste comando é fácil de entender:

chown кто что

Por exemplo, o comando a seguir altera o proprietário do diretório /home/account para o usuário linda:

chown linda /home/account

Equipe chown tem várias opções, uma das quais é particularmente útil: -R. Você pode adivinhar o que faz porque esta opção também está disponível para muitos outros comandos. Isso permite definir recursivamente o proprietário, o que permite definir o proprietário do diretório atual e tudo abaixo. O comando a seguir altera a propriedade do diretório /home e de tudo abaixo dele para o usuário linda:

Agora os proprietários estão assim:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 account account 62 Sep 25 21:41 account
drwx------. 2 lisa    lisa    62 Sep 25 21:42 lisa

Vamos fazer:

[root@localhost ~]# chown -R lisa /home/account
[root@localhost ~]#

Agora o usuário lisa se tornou o proprietário do diretório da conta:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 lisa account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa    62 Sep 25 21:42 lisa

Alterar o proprietário de um grupo

Existem duas maneiras de alterar a propriedade de um grupo. Você pode fazer isso usando chown, mas há um comando especial chamado chgrpisso faz o trabalho. Se você quiser usar o comando chown, usar . ou : na frente do nome do grupo.

O comando a seguir altera qualquer proprietário do grupo /home/account para o grupo de contas:

chown .account /home/account

você pode usar chown para alterar o proprietário de um usuário e/ou grupo de diversas maneiras. aqui estão alguns exemplos:

  • chown lisa meuarquivo1 define o usuário lisa como proprietário de myfile1.
  • chown lisa.sales meuarquivo define o usuário lisa como proprietário do arquivo myfile e também define o grupo de vendas como proprietário do mesmo arquivo.
  • chown lisa:vendas meuarquivo o mesmo que o comando anterior.
  • chown .sales meuarquivo define o grupo de vendas como proprietário de myfile sem alterar o proprietário do usuário.
  • chown :vendas meuarquivo o mesmo que o comando anterior.

Você pode usar o comando chgrppara alterar o proprietário do grupo. Considere o exemplo a seguir, onde você pode usar chgrp defina o proprietário do diretório de contas para o grupo de vendas:

chgrp .sales /home/account

Como no caso de chown, você pode usar a opção -R с chgrp, bem como alterar recursivamente o proprietário do grupo.

Compreendendo o proprietário padrão

Você deve ter notado que quando um usuário cria um arquivo, a propriedade padrão é aplicada.
O usuário que cria o arquivo torna-se automaticamente o proprietário desse arquivo, e o grupo principal desse usuário torna-se automaticamente o proprietário desse arquivo. Geralmente esse é o grupo listado no arquivo /etc/passwd como o grupo principal do usuário. No entanto, se o usuário for membro de mais de um grupo, ele poderá alterar o grupo primário efetivo.

Para mostrar o grupo primário efetivo atual, o usuário pode usar o comando grupos:

[root@server1 ~]# groups lisa
lisa : lisa account sales

Se o usuário atual do linda quiser alterar o grupo primário efetivo, ele usará o comando novogrpseguido pelo nome do grupo que ele deseja definir como o novo grupo primário efetivo. Depois de usar o comando novogrp o grupo primário ficará ativo até que o usuário insira um comando saída ou não sair.

Veja a seguir como a usuária linda usa esse comando, com vendas como grupo principal:

lisa@server1 ~]$ groups
lisa account sales
[lisa@server1 ~]$ newgrp sales
[lisa@server1 ~]$ groups
sales lisa account
[lisa@server1 ~]$ touch file1
[lisa@server1 ~]$ ls -l
total 0
-rw-r--r--. 1 lisa sales 0 Feb 6 10:06 file1

Depois de alterar o grupo principal efetivo, todos os novos arquivos criados pelo usuário terão esse grupo como proprietário do grupo. Para reverter para a configuração original do grupo principal, use saída.

Para poder usar o comando novogrp, o usuário deverá ser membro do grupo que deseja usar como grupo principal. Além disso, uma senha de grupo pode ser usada para um grupo usando o comando gpasswd. Se o usuário usar o comando novogrpmas não for membro do grupo de destino, o shell solicitará a senha do grupo. Depois de inserir a senha correta do grupo, um novo grupo primário efetivo será estabelecido.

Gestão dos direitos fundamentais

O sistema de permissão Linux foi inventado na década de 1970. Como as necessidades de computação eram limitadas naqueles anos, o sistema básico de permissão era bastante limitado. Este sistema de permissões usa três permissões que podem ser aplicadas a arquivos e diretórios. Nesta seção, você aprenderá como usar e alterar essas permissões.

Noções básicas sobre permissões de leitura, gravação e execução

Três permissões básicas permitem ler, gravar e executar arquivos. O efeito dessas permissões difere quando aplicadas a arquivos ou diretórios. Para um arquivo, a permissão de leitura lhe dá o direito de abrir o arquivo para leitura. Portanto, você pode ler seu conteúdo, mas isso significa que seu computador pode abrir o arquivo para fazer algo com ele.

Um arquivo de programa que precisa de acesso a uma biblioteca deve, por exemplo, ter acesso de leitura a essa biblioteca. Conclui-se que a permissão de leitura é a permissão mais básica necessária para trabalhar com arquivos.

Quando aplicada a um diretório, a leitura permite exibir o conteúdo desse diretório. Você deve estar ciente de que esta permissão não permite a leitura dos arquivos no diretório. O sistema de permissões do Linux não conhece herança e a única maneira de ler um arquivo é usar permissões de leitura nesse arquivo.

Como você provavelmente pode imaginar, a permissão de gravação, se aplicada a um arquivo, permite gravar no arquivo. Em outras palavras, permite alterar o conteúdo dos arquivos existentes. No entanto, não permite criar ou excluir novos arquivos ou alterar as permissões dos arquivos. Para fazer isso, você precisa dar permissão de gravação no diretório onde deseja criar o arquivo. Em diretórios, essa permissão também permite criar e excluir novos subdiretórios.

Permissão de execução é o que você precisa para executar o arquivo. Ele nunca será instalado por padrão, o que torna o Linux quase completamente imune a vírus. Somente alguém com permissão de gravação no diretório pode aplicar permissão de execução.

O seguinte resume o uso de permissões básicas:

Permissões no Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Usando chmod

O comando é usado para gerenciar permissões. chmod... Usando chmod você pode definir permissões para o usuário (usuário), grupos (grupo) e outros (outros). Você pode usar este comando em dois modos: modo relativo e modo absoluto. No modo absoluto, três dígitos são usados ​​para definir permissões básicas.

Permissões no Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Ao definir permissões, calcule o valor necessário. Se você deseja definir leitura/gravação/execução para usuário, leitura/execução para grupo e leitura/execução para outros em /somefile, use o seguinte comando chmod:

chmod 755 /somefile

Quando você usa chmod desta forma, todas as permissões atuais são substituídas pelas permissões que você definiu.

Se quiser alterar as permissões relativas às permissões atuais, você pode usar chmod em modo relativo. Usando chmod no modo relativo você trabalha com três indicadores para indicar o que deseja fazer:

  1. Primeiro você especifica para quem deseja alterar as permissões. Para fazer isso, você pode escolher entre usuário (u), grupo (g) e outros (o).
  2. Em seguida, você usa uma instrução para adicionar ou remover permissões do modo atual ou defini-las de forma absoluta.
  3. No final você usa r, w и xpara especificar quais permissões você deseja definir.

Ao alterar as permissões no modo relativo, você pode pular a parte "para" para adicionar ou remover a permissão para todos os objetos. Por exemplo, este comando adiciona permissão de execução para todos os usuários:

chmod +x somefile

Ao trabalhar no modo relativo, você também pode usar comandos mais complexos. Por exemplo, este comando adiciona permissão de gravação a um grupo e remove permissão de leitura para outros:

chmod g+w,o-r somefile

Quando se utiliza o chmod -R o+rx /dados você define a permissão de execução para todos os diretórios, bem como para os arquivos no diretório /data. Para definir permissão de execução apenas para diretórios e não para arquivos, use chmod -R o+ rX /dados.

O X maiúsculo garante que os arquivos não obtenham permissão de execução, a menos que o arquivo já tenha definido permissão de execução para alguns objetos. Isso torna o X uma maneira mais inteligente de lidar com permissões de execução; isso evitará definir essa permissão em arquivos onde ela não é necessária.

Direitos estendidos

Além das permissões básicas sobre as quais você acabou de ler, o Linux também possui um conjunto de permissões avançadas. Estas não são as permissões que você define por padrão, mas às vezes fornecem uma adição útil. Nesta seção, você aprenderá o que são e como configurá-los.

Noções básicas sobre permissões estendidas SUID, GUID e Sticky Bit

Existem três permissões avançadas. A primeira delas é a permissão para definir um identificador de usuário (SUID). Em alguns casos especiais, você pode aplicar essa permissão a arquivos executáveis. Por padrão, um usuário que executa um executável executa esse arquivo com suas próprias permissões.

Para usuários comuns, isso geralmente significa que o uso do programa é limitado. Porém, em alguns casos, o usuário precisa de permissões especiais, apenas para realizar uma tarefa específica.

Considere, por exemplo, uma situação em que um usuário precise alterar sua senha. Para fazer isso, o usuário deve escrever sua nova senha no arquivo /etc/shadow. No entanto, este arquivo não pode ser gravado por usuários não-root:

root@hnl ~]# ls -l /etc/shadow
----------. 1 root root 1184 Apr 30 16:54 /etc/shadow

A permissão SUID oferece uma solução para este problema. O utilitário /usr/bin/passwd usa essa permissão por padrão. Isso significa que ao alterar a senha, o usuário se torna root temporariamente, o que lhe permite gravar no arquivo /etc/shadow. Você pode ver a permissão SUID com ls -l como s em uma posição onde você normalmente esperaria ver x para permissões personalizadas:

[root@hnl ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32680 Jan 28 2010 /usr/bin/passwd

A permissão SUID pode parecer útil (e em alguns casos é), mas ao mesmo tempo é potencialmente perigosa. Se não for aplicado corretamente, você pode conceder acidentalmente permissões de root. Portanto, recomendo usá-lo apenas com o máximo cuidado.

A maioria dos administradores nunca precisará usá-lo; você só o verá em alguns arquivos onde o sistema operacional deve configurá-lo por padrão.

A segunda permissão especial é o identificador de grupo (SGID). Esta permissão tem dois efeitos. Quando aplicado a um arquivo executável, concede ao usuário que executa o arquivo as permissões do proprietário do grupo do arquivo. Portanto, o SGID pode fazer mais ou menos a mesma coisa que o SUID. Porém, o SGID praticamente não é utilizado para esse fim.

Tal como acontece com a permissão SUID, o SGID é aplicado a alguns arquivos do sistema como configuração padrão.

Quando aplicado a um diretório, o SGID pode ser útil porque você pode usá-lo para definir o proprietário do grupo padrão para arquivos e subdiretórios criados nesse diretório. Por padrão, quando um usuário cria um arquivo, seu grupo primário efetivo é definido como o proprietário do grupo desse arquivo.

Isso nem sempre é muito útil, especialmente porque os usuários do Red Hat/CentOS têm seu grupo primário definido como um grupo com o mesmo nome do usuário e do qual o usuário é o único membro. Assim, por padrão, os arquivos criados pelo usuário serão compartilhados em massa.

Imagine uma situação em que as usuárias linda e lori trabalham na área de contabilidade e são integrantes de um grupo conta. Por padrão, esses usuários são membros de um grupo privado do qual são o único membro. No entanto, ambos os usuários são membros do grupo de contas, mas também como parâmetro de grupo secundário.

A situação padrão é que quando qualquer um desses usuários cria um arquivo, o grupo principal se torna o proprietário. Portanto, por padrão, linda não pode acessar arquivos criados por lori e vice-versa. No entanto, se você criar um diretório de grupo compartilhado (por exemplo, /groups/account) e garantir que a permissão SGID seja aplicada a esse diretório e que a conta do grupo esteja definida como proprietária do grupo para esse diretório, todos os arquivos criados nesse diretório e todos de seus subdiretórios, obtenha também a conta do grupo como proprietário do grupo por padrão.

Por esse motivo, a permissão SGID é uma permissão muito útil para definir diretórios de grupos públicos.

Permissão SGID mostrada na saída ls -l como s na posição onde você normalmente encontraria permissão para executar um grupo:

[root@hnl data]# ls -ld account
drwxr-sr-x. 2 root account 4096 Apr 30 21:28 account

A terceira das permissões especiais é a parte fixa. Essa permissão é útil para proteger arquivos contra exclusão acidental em um ambiente onde vários usuários têm acesso de gravação no mesmo diretório. Se um sticky bit for usado, um usuário só poderá excluir um arquivo se for o usuário proprietário do arquivo ou diretório que contém o arquivo. Por esse motivo, ela é usada como permissão padrão para o diretório /tmp e também pode ser útil para diretórios de grupos públicos.

Sem o sticky bit, se o usuário puder criar arquivos em um diretório, ele também poderá excluir arquivos desse diretório. Em um ambiente de grupo público, isso pode ser irritante. Imagine os usuários linda e lori, que têm permissões de gravação no diretório /data/account e obtêm essas permissões por serem membros do grupo de contas. Portanto, linda pode excluir arquivos criados por lori e vice-versa.

Ao aplicar o sticky bit, o usuário só poderá excluir arquivos se uma das seguintes condições for verdadeira:

  • O usuário é o proprietário do arquivo;
  • O usuário é o proprietário do diretório onde o arquivo está localizado.

Quando se utiliza o ls -l, você pode ver a parte pegajosa como t na posição onde você normalmente veria permissão de execução para outras pessoas:

[root@hnl data]# ls -ld account/
drwxr-sr-t. 2 root account 4096 Apr 30 21:28 account/

Aplicando direitos estendidos

Para aplicar SUID, SGID e sticky bit você também pode usar chmod. SUID tem um valor numérico de 4, SGID tem um valor numérico de 2 e sticky bit tem um valor numérico de 1.

Se quiser aplicar essas permissões, você precisa adicionar um argumento de quatro dígitos ao chmod, cujo primeiro dígito se refere a permissões especiais. A linha a seguir, por exemplo, adicionará permissão SGID ao diretório e definirá rwx para usuário e rx para grupo e outros:

chmod 2755 /somedir

Isto é bastante impraticável se você precisar ver as permissões atuais definidas antes de trabalhar com chmod em modo absoluto. (Você corre o risco de substituir as permissões se não fizer isso.) Portanto, recomendo executar no modo relativo se precisar aplicar qualquer uma das permissões especiais:

  1. Para uso SUID chmod u + s.
  2. Para uso SGID chmod g + s.
  3. Para uso de bit pegajoso chmod + t, seguido pelo nome do arquivo ou diretório para o qual você deseja definir permissões.

A tabela resume tudo o que você precisa saber sobre o gerenciamento de permissões especiais.

Permissões no Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Um exemplo de trabalho com direitos especiais

Neste exemplo, você usa permissões especiais para facilitar o compartilhamento de arquivos no diretório de grupo compartilhado pelos membros do grupo. Você atribui o bit de ID ao ID do grupo definido, bem como ao sticky bit, e vê que, uma vez definidos, recursos são adicionados para facilitar o trabalho conjunto dos membros do grupo.

  1. Abra um terminal onde você é o usuário linda. Você pode criar um usuário com o comando usuárioadd linda, adicione senha senha linda.
  2. Crie o diretório /data na raiz e o subdiretório /data/sales com o comando mkdir -p /dados/vendas. Completo cd /dados/vendaspara ir para o diretório de vendas. Completo toque linda1 и toque linda2para criar dois arquivos vazios de propriedade de linda.
  3. Executar su-lisa para mudar o usuário atual para o usuário lisa, que também é membro do grupo de vendas.
  4. Executar cd /dados/vendas e a partir desse diretório execute ls -l. Você verá dois arquivos que foram criados pelo usuário linda e pertencem ao grupo linda. Completo rm -f linda*. Isso removerá os dois arquivos.
  5. Executar toque em lisa1 и toque em lisa2para criar dois arquivos que pertencem ao usuário lisa.
  6. Executar su- para elevar seus privilégios para root.
  7. Executar chmod g+s,o+t /dados/vendaspara definir o bit do identificador de grupo (GUID), bem como o sticky bit no diretório de grupo compartilhado.
  8. Executar su-linda. Então faça toque linda3 и toque linda4. Agora você deve ver que os dois arquivos criados pertencem ao grupo de vendas, que é o proprietário do grupo do diretório /data/sales.
  9. Executar rm -rf lisa*. O sticky bit evita que esses arquivos sejam excluídos em nome do usuário linda, já que você não é o proprietário desses arquivos. Observe que se o usuário linda for o proprietário do diretório /data/sales, ele poderá excluir esses arquivos de qualquer maneira!

Gerenciamento ACL (setfacl, getfacl) no Linux

Embora as permissões estendidas discutidas acima adicionem funcionalidades úteis à maneira como o Linux lida com as permissões, elas não permitem conceder permissões a mais de um usuário ou grupo no mesmo arquivo.

As listas de controle de acesso oferecem esse recurso. Além disso, eles permitem que os administradores definam permissões padrão de forma complexa, onde as permissões definidas podem variar de diretório para diretório.

Noções básicas sobre ACLs

Embora o subsistema ACL adicione grande funcionalidade ao seu servidor, ele tem uma desvantagem: nem todos os utilitários o suportam. Portanto, você pode perder suas configurações de ACL ao copiar ou mover arquivos, e seu software de backup pode não conseguir fazer backup de suas configurações de ACL.

O utilitário tar não oferece suporte a ACLs. Para garantir que as configurações de ACL não sejam perdidas ao criar um backup, use estrela em vez de alcatrão. estrela funciona com as mesmas opções do tar; apenas adiciona suporte para configurações de ACL.

Você também pode fazer backup de ACLs com getfacl, que pode ser restaurado usando o comando setfacl. Para criar um backup, use getfacl -R /diretório > arquivo.acls. Para restaurar as configurações de um arquivo de backup, use setfacl --restore=arquivo.acl.

A falta de suporte de algumas ferramentas não deve ser um problema. As ACLs são frequentemente aplicadas a diretórios como uma medida estrutural, e não a arquivos individuais.
Portanto, não haverá muitos deles, mas apenas alguns, aplicados em locais inteligentes do sistema de arquivos. Portanto, restaurar as ACLs originais com as quais você trabalhou é relativamente fácil, mesmo que o seu software de backup não as suporte.

Preparando o sistema de arquivos para ACLs

Antes de começar a trabalhar com ACLs, talvez seja necessário preparar seu sistema de arquivos para suportar ACLs. Como os metadados do sistema de arquivos precisam ser estendidos, nem sempre há suporte padrão para ACLs no sistema de arquivos. Se você receber uma mensagem "operação não suportada" ao configurar ACLs para um sistema de arquivos, seu sistema de arquivos pode não suportar ACLs.

Para corrigir isso você precisa adicionar a opção montagem acl em /etc/fstab para que o sistema de arquivos seja montado com suporte ACL por padrão.

Alterando e visualizando configurações de ACL com setfacl e getfacl

Para definir uma ACL você precisa do comando setfacl. Para ver as configurações atuais da ACL, você precisa getfacl. Equipe ls -l não mostra nenhuma ACL existente; apenas mostra um + após a lista de permissões, o que indica que as ACLs também se aplicam ao arquivo.

Antes de configurar ACLs, é sempre uma boa ideia mostrar as configurações atuais de ACL com getfacl. No exemplo abaixo, você pode ver as permissões atuais, conforme mostrado com ls -l, e também como mostrado com getfacl. Se você olhar bem de perto, verá que as informações mostradas são exatamente as mesmas.

[root@server1 /]# ls -ld /dir
drwxr-xr-x. 2 root root 6 Feb 6 11:28 /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

Como resultado da execução do comando getfacl abaixo você pode ver que as permissões são mostradas para três objetos diferentes: usuário, grupo e outros. Agora vamos adicionar uma ACL para conceder permissões de leitura e execução também ao grupo de vendas. comando para isso setfacl -mg:vendas:rx /dir. Nesta equipe -m indica que as configurações atuais da ACL precisam ser alteradas. Depois disso g:vendas:rx diz ao comando para definir a ACL de leitura e execução (rx) para o grupo (g) vendas. Abaixo você pode ver a aparência do comando, bem como a saída do comando getfacl após alterar as configurações atuais da ACL.

[root@server1 /]# setfacl -m g:sales:rx /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
group:sales:r-x
mask::r-x
other::r-x

Agora que você entende como configurar uma ACL de grupo, é fácil entender as ACLs para usuários e outros usuários. Por exemplo, o comando setfacl -mu:linda:rwx /dados concede permissões ao usuário linda no diretório /data sem torná-lo proprietário ou alterar a atribuição do proprietário atual.

Equipe setfacl tem muitos recursos e opções. Uma opção é especialmente importante, o parâmetro -R. Se usada, a opção define a ACL para todos os arquivos e subdiretórios que existem atualmente no diretório onde você define a ACL. É recomendado que você sempre use esta opção ao alterar ACLs de diretórios existentes.

Trabalhando com ACLs padrão

Um dos benefícios de usar ACLs é que você pode conceder permissões a vários usuários ou grupos em um diretório. Outro benefício é que você pode ativar a herança trabalhando com as ACLs padrão.

Ao definir a ACL padrão, você determina as permissões que serão definidas para todos os novos itens criados no diretório. Esteja ciente de que a ACL padrão não altera as permissões em arquivos e subdiretórios existentes. Para alterá-los, você também precisa adicionar uma ACL normal!

Isso é importante saber. Se desejar usar uma ACL para configurar vários usuários ou grupos para acessar o mesmo diretório, você deverá configurar a ACL duas vezes. Primeiro uso setfacl -R -mpara alterar ACLs dos arquivos atuais. Então use setfacl-md:para cuidar de todos os novos elementos que também serão criados.

Para definir a ACL padrão basta adicionar a opção d depois da opção -m (a ordem é importante!). Então use setfacl -md:g:vendas:rx /dadosse você deseja que as vendas em grupo leiam e executem tudo o que já foi criado no diretório /data.

Ao usar ACLs padrão, também pode ser útil definir ACLs para outras pessoas. Isso geralmente não faz muito sentido porque você também pode alterar as permissões de outras pessoas usando chmod. No entanto, o que você não pode fazer com chmod, é especificar os direitos que devem ser concedidos a outros usuários para cada novo arquivo criado. Se você quiser evitar que outras pessoas obtenham permissões sobre qualquer coisa criada em /data, por exemplo, use setfacl -md:o::- /dados.

As ACLs e as permissões normais nem sempre estão bem integradas. Podem surgir problemas se você aplicar uma ACL padrão a um diretório, os itens forem adicionados a esse diretório e, em seguida, tentar alterar as permissões normais. As alterações que se aplicam às permissões normais não serão bem refletidas na visão geral da ACL. Para evitar problemas, defina primeiro as permissões normais e, em seguida, defina as ACLs padrão (e tente não alterá-las novamente depois disso).

Exemplo de gerenciamento de direitos elevados usando ACLs

Neste exemplo, você continuará com os diretórios /data/account e /data/sales criados anteriormente. Nos exemplos anteriores, você garantiu que o grupo de vendas tivesse permissões em /data/sales e o grupo de contas tivesse permissões em /data/account.

Primeiro, certifique-se de que o grupo de contas obtenha permissões de leitura no diretório /data/sales e que o grupo de vendas obtenha permissões de leitura no diretório /data/account.

Em seguida, você define ACLs padrão para garantir que todos os novos arquivos tenham as permissões corretas definidas para todos os novos itens.

  1. Abra um terminal.
  2. Executar setfacl -mg:conta:rx /dados/vendas и setfacl -mg:vendas:rx /dados/conta.
  3. Executar getfaclpara ter certeza de que as permissões foram definidas da maneira que você deseja.
  4. Executar setfacl -md:g:conta:rwx,g:vendas:rx /dados/vendaspara definir a ACL padrão para o diretório de vendas.
  5. Adicione uma ACL padrão para o diretório /data/account usando setfacl -md:g:vendas:rwx,g:conta:rx /dados/conta.
  6. Verifique se as configurações de ACL estão em vigor adicionando um novo arquivo a /data/sales. Completo toque em /dados/vendas/novoarquivo e executar getfacl /data/sales/newfile para verificar as permissões atuais.

Configurando permissões padrão com umask

Acima, você aprendeu como trabalhar com ACLs padrão. Se você não estiver usando uma ACL, existe uma opção de shell que determina as permissões padrão que você obterá: umask (máscara reversa). Nesta seção, você aprenderá como alterar as permissões padrão com umask.

Você deve ter notado que ao criar um novo arquivo, algumas permissões padrão são definidas. Essas permissões são determinadas pela configuração umask. Essa configuração de shell se aplica a todos os usuários no logon. No parâmetro umask é utilizado um valor numérico, que é subtraído do máximo de permissões que podem ser definidas automaticamente para o arquivo; a configuração máxima para arquivos é 666 e para diretórios é 777.

No entanto, algumas exceções se aplicam a esta regra. Você pode encontrar uma visão geral completa das configurações umask na tabela abaixo.

Dos números usados ​​em umask, como no caso de argumentos numéricos para o comando chmod, o primeiro dígito refere-se às permissões do usuário, o segundo dígito refere-se às permissões do grupo e o último refere-se às permissões padrão definidas para outros. Significado umask o padrão 022 fornece 644 para todos os novos arquivos e 755 para todos os novos diretórios criados em seu servidor.

Visão geral completa de todos os valores numéricos umask e seus resultados na tabela abaixo.

Permissões no Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Uma maneira fácil de ver como funciona a configuração umask é a seguinte: comece com as permissões padrão do arquivo definidas como 666 e subtraia o umask para obter as permissões efetivas. Faça o mesmo para o diretório e suas permissões padrão 777.

Existem duas maneiras de alterar a configuração umask: para todos os usuários e para usuários individuais. Se desejar definir o umask para todos os usuários, você deverá garantir que a configuração do umask seja levada em consideração ao iniciar os arquivos do ambiente shell, conforme especificado em /etc/profile. A abordagem correta é criar um script de shell chamado umask.sh no diretório /etc/profile.d e especificar o umask que você deseja usar nesse script de shell. Se o umask for alterado neste arquivo, ele será aplicado a todos os usuários após o login no servidor.

Uma alternativa para configurar o umask via /etc/profile e arquivos relacionados, onde ele se aplica a todos os usuários que efetuam login, é alterar as configurações do umask em um arquivo chamado .profile que é criado no diretório inicial de cada usuário.

As configurações aplicadas neste arquivo aplicam-se somente ao usuário individual; portanto, este é um bom método se você precisar de mais detalhes. Pessoalmente, gosto desse recurso para alterar o umask padrão do usuário root para 027, enquanto os usuários normais estão executando com o umask padrão 022.

Trabalhando com atributos de usuário estendidos

Esta é a seção final sobre permissões do Linux.

Ao trabalhar com permissões, sempre há um relacionamento entre um objeto de usuário ou grupo e as permissões que os objetos de usuário ou grupo têm em um arquivo ou diretório. Um método alternativo para proteger arquivos em um servidor Linux é trabalhar com atributos.
Os atributos fazem seu trabalho independentemente do usuário que acessa o arquivo.

Tal como acontece com ACLs, os atributos de arquivo podem precisar incluir a opção montar.

Esta é uma opção usuário_xattr. Se você receber uma mensagem "operação não suportada" ao trabalhar com atributos de usuário estendidos, certifique-se de definir o parâmetro montar em /etc/fstab.

Muitos atributos estão documentados. Alguns atributos estão disponíveis, mas ainda não implementados. Não os use; eles não vão trazer nada para você.

Abaixo estão os atributos mais úteis que você pode aplicar:

A Este atributo garante que o tempo de acesso ao arquivo do arquivo não seja alterado.
Normalmente, cada vez que um arquivo é aberto, o tempo de acesso do arquivo deve ser registrado nos metadados do arquivo. Isto impacta negativamente o desempenho; portanto, para arquivos acessados ​​regularmente, o atributo A pode ser usado para desativar esse recurso.

a Este atributo permite adicionar, mas não remover um arquivo.

c Se você estiver usando um sistema de arquivos que suporta compactação em nível de volume, esse atributo de arquivo garante que o arquivo seja compactado na primeira vez que o mecanismo de compactação for ativado.

D Este atributo garante que as alterações nos arquivos sejam gravadas no disco imediatamente, em vez de serem armazenadas em cache primeiro. Este é um atributo útil em arquivos de banco de dados importantes para garantir que eles não se percam entre o cache de arquivos e o disco rígido.

d Este atributo garante que o arquivo não será salvo em backups onde o utilitário dump for usado.

I Este atributo permite a indexação para o diretório no qual está habilitado. Isso fornece acesso mais rápido a arquivos para sistemas de arquivos primitivos como Ext3, que não usam o banco de dados de árvore B para acesso rápido a arquivos.

i Este atributo torna o arquivo imutável. Portanto, nenhuma alteração pode ser feita no arquivo, o que é útil para arquivos que precisam de proteção adicional.

j Este atributo garante que, em um sistema de arquivos ext3, o arquivo seja primeiro gravado no diário e depois nos blocos de dados no disco rígido.

s Substitua os blocos nos quais o arquivo foi salvo em 0s após excluí-lo. Isso garante que o arquivo não possa ser restaurado depois de excluído.

u Este atributo armazena informações sobre a exclusão. Isso permite desenvolver um utilitário que trabalhe com essas informações para resgatar arquivos excluídos.

Se você deseja aplicar os atributos, você pode usar o comando chat. Por exemplo, use chattr +s algum arquivopara aplicar atributos a algum arquivo. Precisa remover um atributo? Então use chattr -s algum arquivoe ele será removido. Para obter uma visão geral de todos os atributos aplicados atualmente, use o comando lsattr.

Resumo

Neste artigo, você aprendeu como trabalhar com permissões. Você leu sobre as três permissões básicas, permissões avançadas e como aplicar ACLs em um sistema de arquivos. Você também aprendeu como usar a opção umask para aplicar permissões padrão. No final deste artigo, você aprendeu como usar atributos estendidos pelo usuário para aplicar uma camada adicional de segurança do sistema de arquivos.

Se você gostou desta tradução, por favor escreva nos comentários. Haverá mais motivação para fazer traduções úteis.

Corrigidos alguns erros de digitação e erros gramaticais no artigo. Reduzimos alguns parágrafos volumosos em parágrafos menores para melhor legibilidade.

Em vez de "Somente alguém com direitos administrativos no diretório pode aplicar permissão de execução". corrigido para "Somente alguém com permissões de gravação no diretório pode aplicar permissão de execução.", o que seria mais correto.

Obrigado pelos comentários berez.

Substituído:
Se você não for o proprietário do usuário, o shell verificará se você é membro de um grupo, também conhecido como grupo do arquivo.

Em:
Se você não for o proprietário do arquivo, o shell verificará se você é membro de um grupo que possui permissões no arquivo. Se você for membro deste grupo, acessará o arquivo com as permissões definidas pelo grupo e o shell interromperá a verificação.

Obrigado pelo seu comentário Criptopirata

Fonte: habr.com

Adicionar um comentário