Quais são as diferentes maneiras de definir permissões de arquivo etc no gnu / linux

19

No Unix, há muito tempo, aprendi sobre chmod: a maneira tradicional de definir permissões, no Unix (e permitir que os programas obtenham privilégios usando setuid, setgid).

Eu descobri recentemente alguns comandos mais recentes, no GNU / Linux:

  • setfaclestende os ugo:rwxbits tradicionais e os tbits de chmod.
  • setcapdá mais controle de grãos finos do que ug:spedaços de chmod.
  • chattr Permite alguns outros controles (um pouco de mistura) do arquivo.

Existem outros?

ctrl-alt-delor
fonte
ver também unix.stackexchange.com/q/183994/4778 para mais detalhes sobrechmod
ctrl-alt-Delor
consulte também unix.stackexchange.com/q/246606/4778 para obter ACLs estendidas (richACLs).
ctrl-alt-delor 11/12

Respostas:

28

chmod: alterar bits do modo de arquivo

Uso (modo octal):

    chmod <octal-mode> files...

Uso (modo simbólico):

    chmod <references><operator><modes> files..

referencesé uma combinação das letras ugoa, que especificam qual acesso do usuário filesserá modificado:

  • u o usuário que o possui
  • goutros usuários no filegrupo de
  • o outros usuários que não estão no grupo do arquivo
  • a todos os usuários

    Se omitido, o padrão é todos os usuários, mas apenas as permissões permitidas pelo umasksão modificadas.

    operatoré um dos caracteres +-=:

    • + adicione os bits de modo de arquivo especificados aos bits de modo de arquivo existentes de cada file
    • - remove os bits de modo de arquivo especificados nos bits de modo de arquivo existentes de cada file
    • =adiciona os bits especificados e remove os bits não especificados, exceto os bits setuide setgiddefinidos para os diretórios, a menos que especificado explicitamente.

    modeconsiste em uma combinação das letras rwxXst, que especificam qual bit de permissão deve ser modificado:

    • r ler
    • w escrever
    • x executar (ou procurar diretórios)
    • X execute / pesquise apenas se o arquivo for um diretório ou se já tiver definido o bit definido para algum usuário
    • ssetuid ou setgid (dependendo do especificado references)
    • t sinalizador de exclusão restrita ou bit adesivo

    Como alternativa, modepode consistir em uma das letras ugo; nesse caso, o modo corresponde às permissões atualmente concedidas ao proprietário ( u), membro do filegrupo do grupo ( g) ou permissões de usuários em nenhuma das categorias anteriores ( o).

Os vários bits de chmodexplicado:

  • Controle de acesso (ver também setfacl)
    • rwx - leia (r), escreva (w) e execute / cruze (x) permissões.
      • A leitura (r) afeta se um arquivo pode ser lido ou se um diretório pode ser listado.
      • A gravação (w) afeta se um arquivo pode ser gravado ou se um diretório pode ser editado (arquivos adicionados, excluídos, renomeados).
      • A execução (x) afeta se um arquivo pode ser executado, usado para scripts (consulte a #!) e outros arquivos executáveis.
      • Cruz (x) afeta se um diretório pode ser percorrido.
    • se t- bit pegajoso (t) e setgid (s) em diretórios
      • O bit adesivo afeta apenas diretórios. Impedirá que qualquer pessoa, exceto o proprietário do arquivo e o root, exclua os arquivos no diretório.
      • o bit setgid nos diretórios fará com que novos arquivos e diretórios tenham o grupo definido no mesmo grupo e novos diretórios tenham o bit setgid definido (consulte também os padrões em setfacl).
    • s - setuid, setgid, em arquivos executáveis.
      • Isso pode afetar a segurança de uma maneira ruim, se você não souber o que está fazendo.
      • Quando um executável é executado, se um desses bits estiver definido, o usuário / grupo efetivo do executável se tornará o do arquivo. Assim, o programa é executado como esse usuário. veja setcapuma maneira mais moderna de fazer isso.

chown chgrp:


chattr: alterar atributos do arquivo

Uso:

    chattr <operator><attribute> files...

operatoré um dos personagens +-=: * +adiciona os atributos selecionados para ser ao existente attributesdo files * -remove o selecionado attributes * =substitui o actual conjunto de atributos que os arquivos com o especificado attributes.

attributeé uma combinação das letras acdeijstuADST, que correspondem aos atributos:

  • a acrescentar apenas
  • c comprimido
  • d sem lixeira
  • e formato da extensão
  • i imutável
  • j diário de dados
  • s exclusão segura
  • t sem fusão de cauda
  • u undeletable
  • Asem atimeatualizações
  • D atualizações de diretório síncronas
  • S atualizações síncronas
  • T topo da hierarquia de diretórios

setfattr: alterar atributos de arquivo estendidos

Uso (atributo definido):

    setfattr -n <name> -v <value> files...

Uso (remover):

    setfattr -x <name> files...

name é o nome do atributo estendido para definir ou remover

value é o novo valor do atributo estendido


setfacl: alterar listas de controle de acesso a arquivos

Uso:

    setfacl <option> [default:][<target>:][<param>][:<perms>] files...

option deve incluir um dos seguintes:

  • --set defina a ACL de um arquivo ou diretório, substituindo a ACL anterior
  • -m| --modifymodificar a ACL de um arquivo ou diretório
  • -x| --remove remover entradas da ACL de um arquivo ou diretório

    targeté uma das letras ugmo(ou o formato mais longo mostrado abaixo):

  • u, userspermissão de um usuário nomeado identificado por param, padroniza o proprietário do arquivo uidse omitido

  • g, grouppermissão de um grupo nomeado identificado por param, padrão para o grupo proprietário, uidse omitido
  • m, maskDireitos efetivos mascarar
  • o, otherpermissões de outros

    permsé uma combinação das letras rwxX, que correspondem às permissões:

  • r ler

  • w escrever
  • x executar
  • X executar apenas se o arquivo for um diretório ou já tiver permissão de execução para algum usuário

    Como alternativa, permspode ser um dígito octal ( 0- 7) indicando o conjunto de permissões.


setcap: alterar recursos do arquivo

Uso:

    setcap <capability-clause> file 

A capability-clauseconsiste em uma lista separada por vírgula de nomes de recursos, seguida por uma lista de pares operador-sinalizador.

Os operadores disponíveis são =, +e -. As bandeiras disponíveis são e, ie pque correspondem às eficaz , Inheritable e permitidas conjuntos de recursos.

O =operador aumentará os conjuntos de recursos especificados e redefinirá os outros. Se nenhum sinalizador for fornecido em conjunto com o =operador, todos os conjuntos de recursos serão redefinidos. Os operadores +e -aumentarão ou diminuirão um ou mais conjuntos de recursos especificados, respectivamente.


chcon: alterar arquivo contexto de segurança do SELinux

Uso:

    chcon [-u <user>] [-r <role>] [-t <type>] files...

user é o usuário do SELinux, como user_u, system_uou root.

role é o papel do SELinux (sempre object_rpara arquivos)

type é o tipo de assunto do SELinux


chsmack: alterar atributos estendidos do SMACK

Uso:

    chsmack -a <value> file

valueé o rótulo SMACK a ser definido para o SMACK64atributo de arquivo estendido


setrichacl : altera a lista de controle de acesso avançado .

richacl s são um recurso que adicionará ACLs mais avançadas.

Atualmente um trabalho em andamento, por isso não posso falar muito sobre eles. Eu não os usei.

Consulte também esta pergunta Existem ACLs do sistema de arquivos mais avançadas além das tradicionais 'rwx' e POSIX ACL? e página de manual

Thomas Nyman
fonte
5
+1 Se você adicionou exemplos do uso de cada cmd, essa resposta seria extremamente útil, pois como resposta canônica podemos fazer referência no caminho!
slm
11
@ slm Obrigado pela sugestão. Eu adicionei uma breve explicação de uso para cada comando.
Thomas Nyman
Um aviso para qualquer pessoa que deseje levar os recursos além do mostrado aqui. Eu usei a capacidade conforme descrito aqui. No entanto, tentar herdá-los (utilmente) sobre fork e exec parece impossível. Eu acho que há um bug ver unix.stackexchange.com/questions/196483/...
ctrl-alt-Delor
O bug que mencionei no coment anterior, era um bug de design e foi corrigido no kernel 4.3 com a adição de recursos do ambiente, consulte man7.org/linux/man-pages/man7/capabilities.7.html
ctrl-alt-delor
11
Eu adoraria ver exemplos disso tudo, isso se tornaria uma resposta canônica!
statquant
1

de um nível alto:

  • Permissões do sistema de arquivos básicos suportados por todos linux e tudo o sistema de arquivos que é o -rwxrwxrwxtratado por chmod, juntamente com o proprietário e grupo identificadores ligados a cada arquivo ou pasta no sistema de arquivos manipulados por chowne chgrp; todo mundo basicamente conhece essa peça.
  • Atributos de arquivo estendidos, abreviados ou conhecidos pelo xattr . São recursos do sistema de arquivos que permitem aos usuários associar arquivos de computador a metadados não interpretados pelo sistema de arquivos, enquanto atributos regulares têm uma finalidade estritamente definida pelo sistema de arquivos; os atributos são pares nome: valor associados permanentemente a arquivos e diretórios, semelhantes às sequências de ambiente associadas a um processo. Existem comandos linux específicos relacionados à simples configuração desses metadados para vários arquivos / pastas.
  • SELINUX conhecido como linux seguro . Você pode pesquisar na web o histórico. Saiba também que existem alternativas ao SELINUX, como o AppArmor, e provavelmente existem outras. Neste ponto, estes são módulos do kernel que fornecem funcionalidade e mecanismos para executar o MAC (controle de acesso obrigatório) usando xattr; O selinux armazena rótulos de segurança de arquivos no xattrs . E existem comandos específicos relacionados ao selinux.

outros pontos-chave:

  • a era e a versão do gnu / linux são importantes em relação ao xattr e selinux para o que está disponível e o que é funcional.
  • é relatado que nem todos os sistemas de arquivos suportam xattr; melhor deixar para pesquisa individual com base na distribuição e versão do linux que está sendo usado (rhel / suse / debian, irix, solaris, aix, unix da década de 1960)
  • são realmente apenas as permissões básicas inerentes a arquivos / pastas com uid's / gid's mais xattr's que tornam tudo possível; O SELinux usa o xattr para armazenar etiquetas de segurança de arquivos / pastas ... com o selinux, todo o trabalho de baixo nível é feito / definido nos xattr para você usar. Portanto, se seu sistema de arquivos antigo não suporta xattr, você não estará usando o selinux.
  • você pode ativar ou desativar o selinux (ou apparmor ou qualquer outro módulo do kernel)
  • dependendo da sua versão do linux, poderá ativar ou desativar o xattr para um determinado sistema de arquivos montado; Lembro que no SLES 11 a opção fstab mount user_xattre eu poderia optar por não ter o xattr disponível no sistema de arquivos raiz no momento da instalação; Eu acho que agora com o RHEL / CentOS 7 que o xattr está lá por padrão e você não pode deixar de usá-lo.
  • ao fazer um, lsse você vir -rwxrwxrwx+que +indica que um atributo de arquivo estendido está presente nesse objeto .
  • Lista de controle de acesso (ACL): é uma lista de permissões anexadas a um objeto. Uma ACL especifica quais usuários ou processos do sistema têm acesso concedido aos objetos, bem como quais operações são permitidas em determinados objetos.
  • do centos wiki selinux: o selinux é um mecanismo de segurança MAC implementado no kernel; sem o SELinux ativado, apenas os métodos tradicionais de controle de acesso discricionário (DAC), como permissões de arquivo ou listas de controle de acesso (ACLs), são usados ​​para controlar o acesso ao arquivo dos usuários; Usuários e programas podem conceder permissões de arquivo inseguras a outras pessoas ou, inversamente, obter acesso a partes do sistema que de outra forma não seriam necessárias para a operação normal; Essencialmente, no modelo tradicional do DAC, existem dois níveis de privilégio, raiz e usuário, e não há maneira fácil de impor um modelo de menor privilégio. Muitos processos iniciados pelo root mais tarde perdem seus direitos de execução como um usuário restrito
  • vale a pena ler para colocar em perspectiva o uso de xattr e ACLs, porque o linux [kernel] trata tudo como um arquivo (dispositivos de bloco ou portas de rede) você pode marcar quase qualquer coisa com um xattr e impor algum tipo de controle de acesso via selinux, é não apenas arquivos / pastas. https://wiki.centos.org/HowTos/SELinux
  • O xattr pode causar problemas com a movimentação de dados entre sistemas e sistemas de arquivos e o NFS, onde sistemas [mais novos] têm suporte completo ao xattr versus sistemas mais antigos que podem não reconhecer todos esses atributos estendidos [se houver]. Lembre-se de usar tarcoisas com o xattr, se ele permanecer nesse sistema sem problemas, mas se for para outro lugar pode ser problemático se os xattrs forem importantes (por exemplo, samba e cópia entre win10 ntfs e linux ext3 / 4, btrfs, xfs; ou vice-versa) entre dispositivos de armazenamento conectados à rede)
  • se não houver selinux ou outro mecanismo que imponha ACLs pelo que é definido em xattrs, então, xattrteoricamente , s pode significar nada e ser descartado ou retirado porque, nesse ponto, é apenas bagagem extra.
  • tenha cuidado ao desabilitar o selinux agora no rhel / centos 7, porque se o sistema de arquivos lables via xattr for perdido, causará problemas ao mudar o selinux de volta à aplicação ou permissivo ; novamente depende da sua versão do linux e de como ele está usando o xattr via selinux.

O compartilhamento básico do Samba não funciona no RHEL / CentOS 7 ... porque o selinux, por padrão, está definido como imposição; O selinux negou tudo até você permitir, para desativar o selinux (ruim) ou configurá-lo como permissivo. Se você deixar o selinux como impositivo, precisará rotular a pasta que deseja compartilhar com o samba com um atributo estendido, para que o selinux reconheça e permita o compartilhamento. Portanto, se você deixar o selinux reforçando, todos os comandos selinux (que definirão os xattrs necessários ):

# from centos 7.6 /etc/samba/smb.conf.example

# Turn the samba_domain_controller Boolean on to allow a Samba PDC to use the useradd and groupadd family of binaries.
# Run the following command as the root user to turn this Boolean on:

# this is an selinux command, not 
setsebool -P samba_domain_controller on

# If you create a new directory, such as a new top-level directory, label it with      samba_share_t
# so that SELinux allows Samba to read and write to it.
# Do not label system directories, such as /etc/ and /home/ with samba_share_t, as such directories should already have an SELinux label.


# the xattr having the name "samba_share_t" is labelled onto "/mydatashare"
# this xattr of syntax "samba_share_t" is recognized by an existing rule in selinux
# if the folder does not have the xattr "samba_share_t" then the  rule in selinux (when enforced) will prevent access via samba to the folder.

chcon -t samba_share_t /mydatashare

você ainda usa o selinux, no sistema linux com este compartilhamento samba, para impor restrições aos arquivos / pastas sob esse compartilhamento samba (usando qualquer atributo estendido). Como esses arquivos / pastas são compartilhados, um usuário copia legitimamente alguns para o PC win10 e depois copia novamente, perdendo o atributo estendido. Agora, depois dessa cópia, o selinux restringirá o acesso aos arquivos porque o xattr necessário não está mais presente, e os usuários / administradores se perguntam por que as coisas funcionaram agora e não ... permissivo e reconhecer o problema de xattrs perdidos aparecendo nos logs de auditoria, mas isso não indica diretamente que foi o resultado da cópia para frente e para trás da perda do xattr. Considere também o backup e restauração de dados e o trabalho potencial necessário para lembrarxattrs, além de uid / gid, se você deseja reforçar a segurança com base nos xattrs corretos .

Ron
fonte