ITUP - Improved Traditional Unix Permissions

Discussão em 'Discussões' iniciado por Foxx Games, 21 Julho 2018.

  1. Foxx Games
    Offline

    Foxx Games Veterano Veterano VIP Industrial

    Afiliado:
    30 Abril 2014
    Mensagens:
    1,243
    Sexo:
    Masculino
    Avaliações:
    +847 / -0
    Apelido no Minecraft:
    NathanPB
    Bom, eu estava agora pouco correndo atrás de uma ideia de sistema de permissões para usar em algumas coisas que eu estou desenvolvendo, entre tanto pensar, tive a ideia de usar o sistema tradicional do Unix, porém ele me dava algumas limitações, então agora estou escrevendo isso para (me) introduzir ao ITUP - Permissões Tradicionais do Unix Melhoradas.

    Como as permissões do Unix funcionam
    Nesse sistema de permissões, todo o arquivo possui um dono (um usuário, que pode ser inclusive o root). Estes arquivos possuem três tipos de permissões:
    • Leitura | Read (representado pela letra r)
    • Escrita | Write (representado pela letra w)
    • Execução | Execute (representado pela letra x)
    Isso quer dizer que se um usuário tiver a permissão 'r-x' em um arquivo ele pode ver e executar esse arquivo, mas não edita-lo (o - no meio ocupa o lugar do w, que como vemos é negado). Outro exemplo seria --x (pode apenas executar, mas não ler ou modificar).
    Bom, nós também temos três CLASSES de usuários que podem ter acesso ao arquivo, são elas:
    • Dono (representado pela letra u)
    • Grupo (representado pela letra g)
    • Outros (representado pela letra o)


    Então, em uma permissão teríamos, por exemplo (rwx | r-x | --x), isso significa que o dono pode ler, editar e executar, os participantes do grupo (não vou entrar em detalhes sobre isso, não é o objetivo do tópico) poderiam ler e executar (mas não escrever) e todos os outros usuários poderiam apenas executar.

    Aqui chegamos a uma parte complicada: Vejamos aqui uma permissão bem comum do Unix: 755
    A permissão '755' quer dizer o seguinte:
    • 7: Pode ler, editar e executar
    • 5: Pode ler e executar
    • 5: Pode ler e executar
    Logo, o dono do arquivo teria todas as permissões, enquanto o grupo (e os outros) poderiam apenas ler e executar. Representando essa permissão da forma que citei a alguns parágrafos antes, ela seria (rwx | r-x | r-x).

    Bom, agora você deve estar se perguntando POR QUE CARALHOS UM RWX VIROU UM 7. Bom, isso é bem simples: pela mágica da representação binária.
    Vamos brincar de zeros e uns. Em uma palavra binária:
    • O primeiro bit seria o R
    • O segundo bit seria o W
    • O terceito bit seria o X
    Então, o nosso R-X, por exemplo, ficaria 101.
    [​IMG]
    Na imagem acima, o bit menos significativo está na esquerda (o R), geralmente os números binários são representados ao contrário (bit menos significativo a direita), mas eu fiz assim pra facilitar o entendimento
    Bom, adivinha o que é '101' binário em decimal...? Sim, é 5. Por isso R-X pode ser representado pelo número 5.
    Pelo mesmo motivo RWX, que seria 111 pode ser escrito como 7, e (rwx | r-x | r-x), pode ser representado por (111 | 101 | 101), ou seja, (7|5|5) (755).

    O que o ITUP propõe
    No sistema tradicional, nós temos apenas três classes (dono, grupo e outros). Um dos objetivos do ITUP é criar INFINITAS classes, e uma sobrescrevendo as permissões da outra. Por exemplo, poderíamos ter uma permissão 744534. Ela quer dizer:
    • A sexta classe tem todas as permissões
    • A quinta pode apenas ler e modificar
    • A quarta pode apenas ler e modificar
    • A terceita pode apenas ler e executar
    • A segunda pode apenas modificar e executar
    • A primeira poderia ler e executar
    Sendo o '7' a última classe, e o '4' a primeira.
    Como no ITUP cada classe tem prioridade ao seu antecessor, neste exemplo em específico o usuário teria todas as permissões, pois o 7 é a sua classe mais significativa.

    A Grande Jogada
    E aqui, temos outro diferencial igualmente útil do ITUP: As permissões podem ser HERDADAS (representado pela letra i).

    Ou seja, agora além de "permitido" ou "negado", também temos "herdado", que herda a permissão de sua classe antecessora.
    Chegamos ao paradigma: O sistema tem três possibilidades (permitido, negado e herdado), e três possibilidades NÃO PODEM ser representadas de forma BINÁRIA.
    Então, agora além de zero e um, temos o DOIS, que significa herdado da classe antecessora.
    Então, por exemplo, na seguinte cadeia de permissões de três classes (112 | 120 | 011) nós teríamos:
    • Primeira Classe: Leitura Permitida| Escrita Permitida | Execução Negada
    • Segunda Classe: Leitura Negada | Escrita Herdada | Execução Permitida
    • Terceira Classe: Leitura Herdada | Escrita Permitida | Execução Permitida
    Lendo nossa cadeia de permissões da classe menos significativa para a mais significativa:
    1. A cadeia inicia com rw-
    2. A cadeia sobrescreve o r permitido para negado (-), herda a escrita da classe anterior (w) e sobrescreve a execução para negada (-). Então a esse ponto temos -w-
    3. A cadeia sobrescreve execução e escrita para permitido (wx) e herda a leitura da classe anterior (-), então temos o equivalente a -wx no final da interpretação da cadeia.
    A Representação
    Como agora além de permitido e negado também temos herdado, caimos em um paradigma: Como representar nossas cadeias de forma tão compacta e legível quanto ao Unix?
    A solução para manter a legibilidade sem a necessidade de conversores de base sem perder a compactação dos dados é transformar tudo em base binária, substituindo o herdado por qualquer valor, e representando os campos herdados com o alfabeto de A até I. Exemplo: 4C . Note que a letra deve estar sempre A DIREITA!
    Vamos quebrar o nosso 4C em pedacinhos e descobrir o que ele significa:
    • O numeral pode ser facilmente convertido para binário: 100
    • Quanto as letras, devemos interpreta-las como números, sendo seu valor a sua posição no alfabeto convertido a base binária, ou seja, o C que está na posição 3 vira 011.
    Após concluir os dois passos acima, podemos dizer que a nossa permissão é RII, ou seja, permissão de execução negada, porém leitura e escrita herdadas da classe antecessora.
    Permissões nem sempre vão conter letras, significa que elas não tem aspectos herdados. Porém, elas SEMPRE deverão ser representadas por um número.

    São 3:43 da manhã e eu estou aqui finalizando de explicar a minha ideia do ITUP e pronto para coloca-la em prática amanhã (hoje). Espero que isso ajude mais alguém que estava com os mesmos problemas que eu na hora de criar um sistema de permissões legível e eficiente. Obrigado!
     
    • Bem Escrito Bem Escrito x 1
    Última edição: 21 Julho 2018
  2. Animadoria
    Offline

    Animadoria Membro Conhecido VIP Sabotador.com

    Afiliado:
    17 Agosto 2014
    Mensagens:
    746
    Avaliações:
    +584 / -1
    Apelido no Minecraft:
    Animadoria
    Isso é bom, normalmente eu uso sempre chmod 777 e não é uma boa ideia por que alguém entra na minha conta como root e eu tenho q me dar permissões e nunca sei
     
  3. joserobjr
    Offline

    joserobjr Administrador Equipe GameMods Administrador Programador YouTuber Veterano

    Afiliado:
    29 Junho 2009
    Mensagens:
    6,744
    Sexo:
    Masculino
    Avaliações:
    +4,829 / -0
    Apelido no Minecraft:
    joserobjr
    Se usar um sistema de arquivos moderno também pode usar o ACL (Access Control List)
    [Dicas-L] Permissoes no Linux - alem do chmod

    Código (Bash):
    $ setfacl -m u:queiroz:rwx testes

    $ getfacl testes
    # file: testes
    # owner: root
    # group: root
    user::rwx
    user:queiroz:rwx
    group::r-x
    mask::rwx
    other::r-x
     
  4. Foxx Games
    Offline

    Foxx Games Veterano Veterano VIP Industrial

    Afiliado:
    30 Abril 2014
    Mensagens:
    1,243
    Sexo:
    Masculino
    Avaliações:
    +847 / -0
    Apelido no Minecraft:
    NathanPB
    777 deixa público a todos os usuários, seria melhor usar 755 ou 711
    Não cheguei a estudar direito o ACL, mas provavelmente ainda não se adequa ao que eu quero.
    O diferencial do meu sisteminha é que o sistema tradicional tem um dono pra cada arquivo, no meu sistema ninguém seria dono do arquivo, apenas teria permissões nele. Não foi pensado pra usar em sistemas de arquivos, então ele não serve pra isso kk
     
  5. Animadoria
    Offline

    Animadoria Membro Conhecido VIP Sabotador.com

    Afiliado:
    17 Agosto 2014
    Mensagens:
    746
    Avaliações:
    +584 / -1
    Apelido no Minecraft:
    Animadoria
    Por isso que eu disse, não é uma boa ideia :p
     
    • Gostei Gostei x 1

Compartilhe esta Página