Compreendendo as permissões e tipos de arquivo do UNIX

Eu nunca entendi como chmod funcionava até hoje. Eu segui um tutorial que explicou muitas coisas para mim.

Por exemplo, eu li que você tem três grupos de permissão diferentes:

  • proprietário (u)
  • grupo (g)
  • todos (o)

Com base nesses três grupos, agora sei que:

  • Se o arquivo pertence ao usuário, as permissões do usuário determinam o acesso .
  • Se o grupo do arquivo for o mesmo que o grupo do usuário, a permissão do grupo determinará o acesso.
  • Se o usuário não for o proprietário do arquivo e não for no grupo, a outra permissão é usada.

Também descobri que você tem as seguintes permissões:

  • read (r)
  • write (w)
  • execute ()

Criei um diretório para testar meu conhecimento recém-adquirido:

mkdir test 

Então Fiz alguns testes:

chmod u+rwx test/ # drwx------ chmod g+rx test/ # drwxr-x--- chmod u-x test/ # drw-r-x--- 

Depois de brincar por algum tempo, acho que finalmente peguei o jeito de chmod e a maneira como você define a permissão usando este comando.


Mas …

Ainda tenho algumas perguntas:

  • O que faz o d no início representa?
  • Qual é o nome e o uso do slot que o contém e quais outros valores ele pode conter?
  • Como posso definir e cancelar a definição?
  • Qual é o valor para este d? (Como você só tem 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1)
  • Por que as pessoas às vezes usam 0777 em vez de 777 para definir suas permissões?

Mas como não devo fazer várias perguntas, tentarei fazer em uma pergunta.

Em sistemas baseados em UNIX, como todas as distribuições Linux, em relação às permissões, o que a primeira parte (d) representa e qual é a usar para esta parte das permissões?

Comentários

  • Por favor, da próxima vez, tente fazer apenas uma pergunta, várias perguntas geralmente são ruins para referência e quase nunca abordou todos ao mesmo tempo.
  • @Kiwy I ‘ desculpe, pensei que ‘ faria assim porque se refere ao mesmo assunto. Se quiser, você pode sugerir um título melhor para minha pergunta para melhorá-la ‘ a referência.
  • A propósito, o valor para ” d ” é 040000 – pode ser encontrado nos arquivos de cabeçalho com o nome S_IFDIR. Você não ‘ não o usa ao definir o modo de arquivo, mas a função stat() realmente retorna o valor 040750 para drwxr-x---.
  • @jamesqf Na verdade, agora que entendi como os códigos octais são mapeados, é ‘ mais simples para mim pensar dessa forma .
  • @Peter: não há perguntas estúpidas – apenas estúpidos que não ‘ aprendem porque ‘ re medo de perguntar.

Resposta

Vou responder às suas perguntas em três partes: tipos de arquivo, permissões, e casos de uso para as várias formas de chmod.

Tipos de arquivo

O primeiro caractere em ls -l output representa o tipo de arquivo; d significa que é um diretório. Não pode ser definido ou desmarcado, depende de como o arquivo foi criado. Você pode encontrar a lista completa de tipos de arquivo na documentação do ls ; aqueles que você provavelmente encontrará são

  • -: arquivo “normal”, criado com qualquer programa que pode escrever um arquivo
  • b: arquivo especial de bloco, normalmente disco ou dispositivos de partição, pode ser criado com mknod
  • c: arquivo especial de caractere, também pode ser criado com mknod (consulte /dev para exemplos)
  • d: diretório, pode ser criado com mkdir
  • l: link simbólico, pode ser criado com ln -s
  • p: pipe nomeado, pode ser criado com mkfifo
  • s: socket, pode ser criado com nc -U
  • D: porta , criada por alguns processos de servidor no Solaris / openindiana.

Permissões

chmod 0777 é usado para definir todas as permissões em uma chmod execução, em vez de combinar alterações com u+ etc.Cada um dos quatro dígitos é um valor octal que representa um conjunto de permissões:

  • suid, sgid e “aderente” (veja abaixo)
  • permissões de usuário
  • permissões de grupo
  • “outras” permissões

O octal o valor é calculado como a soma das permissões:

  • “ler” é 4
  • “escrever” é 2
  • “executar” é 1

Para o primeiro dígito:

  • suid é 4; binários com este conjunto de bits são executados como seu usuário proprietário (normalmente root)
  • sgid é 2; binários com este conjunto de bits são executados como seu grupo de proprietários (isso foi usado para jogos para que pontuações altas pudessem ser compartilhadas, mas muitas vezes é um risco de segurança quando combinado com vulnerabilidades nos jogos), e os arquivos criados em diretórios com este conjunto de bits pertencem o grupo do proprietário do diretório por padrão (isso é útil para criar pastas compartilhadas)
  • “sticky” (ou “exclusão restrita”) é 1; arquivos em diretórios com este conjunto de bits só podem ser excluídos por seu proprietário, o proprietário do diretório ou root (consulte /tmp para um exemplo comum deste).

Consulte a chmod página de manual para obter detalhes. Observe que em tudo isso estou ignorando outros recursos de segurança que podem alterar as permissões dos usuários nos arquivos (SELinux, ACLs de arquivo …).

Bits especiais são tratados de forma diferente dependendo do tipo de arquivo (regular arquivo ou diretório) e o sistema subjacente. (Isso é mencionado na página de manual chmod.) No sistema que usei para testar isso (com coreutils 8,23 em um ext4 sistema de arquivos, executando o kernel Linux 3.16.7-ckt2), o comportamento é o seguinte. Para um arquivo, os bits especiais são sempre limpos, a menos que sejam explicitamente definidos, então chmod 0777 é equivalente a chmod 777 e ambos os comandos limpam os bits especiais e dar a todos permissões totais no arquivo. Para um diretório, os bits especiais nunca são totalmente apagados usando a forma numérica de quatro dígitos, portanto, chmod 0777 também é equivalente a chmod 777 mas é enganoso, pois alguns dos bits especiais permanecerão como estão. (Uma versão anterior desta resposta errou.) Para limpar bits especiais nos diretórios, você precisa usar u-s, g-s e / ou o-t explicitamente ou especifique um valor numérico negativo, então chmod -7000 limpará todos os bits especiais em um diretório.

Na saída ls -l, suid, sgid e “sticky” aparecem no lugar de x entrada: suid é s ou S em vez de x do usuário, sgid é s ou S em vez de x do grupo, e“ sticky ”é t ou T em vez de outros x. Uma letra minúscula indica que o bit especial e o bit executável estão definidos; uma letra maiúscula indica que apenas o bit especial está definido.

As várias formas de chmod

Devido ao comportamento descrito acima, usando os quatro dígitos completos em chmod pode ser confuso (pelo menos descobri que estava confuso). É útil quando você deseja definir bits especiais, bem como bits de permissão; caso contrário, os bits são apagados se você estiver manipulando um arquivo e preservados se você estiver manipulando um diretório. Portanto, chmod 2750 garante que você receberá pelo menos sgid e exatamente u=rwx,g=rx,o=; mas chmod 0750 não limpará necessariamente os bits especiais.

Usando modos numéricos em vez de comandos de texto ([ugo][=+-][rwxXst]) é provavelmente mais um caso de hábito e o objetivo do comando. Quando você estiver acostumado a usar os modos numéricos, geralmente é mais fácil apenas especificar o modo completo dessa maneira; e é útil poder pensar em permissões usando modos numéricos, já que muitos outros comandos podem usá-los (install, mknod … ).

Algumas variantes de texto podem ser úteis: se você simplesmente deseja garantir que um arquivo possa ser executado por qualquer pessoa, chmod a+x fará isso, independentemente do que as outras permissões são. Da mesma forma, +X adiciona a permissão de execução apenas se uma das permissões de execução já estiver definida ou o arquivo for um diretório; isso pode ser útil para restaurar permissões globalmente sem a necessidade de arquivos de casos especiais v. diretórios. Assim, chmod -R ug=rX,u+w,o= é equivalente a aplicar chmod -R 750 a todos os diretórios e arquivos executáveis e chmod -R 640 para todos os outros arquivos.

Comentários

  • Embora as outras respostas tenham sido muito boas, você realmente gastou algum tempo respondendo a essa pergunta. Obrigado.
  • Em diretórios * BSD, se comportar como se seu sgid bit estivesse sempre definido, independentemente de seu valor real. No FreeBSD, o bit suid pode ser configurado para agir de forma análoga a sgid (ou seja, arquivos e subdiretórios criados dentro terão o mesmo dono do diretório ), desde que o sistema de arquivos subjacente suporte isso e seja montado com a opção suiddir.
  • +X adiciona a permissão de execução apenas se uma das permissões de execução já estiver definida ou o arquivo for um diretório ” obrigado você @ stephen-kitt, sem a documentação ” já configurada ” estava realmente me deixando confuso!

Resposta

Portanto, as permissões no Linux são muito importantes. Tentarei fazer uma breve explicação.

Para partes de um modo de arquivo

Cada arquivo Unix possui um conjunto de permissões que determinam se você pode ler, escrever ou executar o arquivo. Executar ls -l exibe as permissões. Aqui está um exemplo de exibição:

-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile 

Eu anexei uma imagem de partes de um modo de arquivo:

insira a descrição da imagem aqui

O tipo pode ser diferente. Por exemplo:

  • d (diretório)
  • c (dispositivo de caractere)
  • l (link simbólico)
  • p (nomeado tubo)
  • s (soquete)
  • b (dispositivo de bloco)
  • D (porta, não comum em sistemas Linux, mas foi portado)

Se você deseja definir algumas permissões para todos os diretórios, pode usar o atributo R, por exemplo:

chmod -R 777 /some/directory/ 

Para chmod 777 vs 0777

O comando chmod geralmente espera a entrada para ser um número octal, o zero à esquerda se refere ao valor do trio de bits sticky / sgid / suid. Em C, no entanto, faria diferença, uma vez que 777 seria traduzido para 01411 (octal), definindo assim o bit sticky (consulte a página do manual chmod(2)), permissões de leitura para o proprietário e bit executável para grupo e outros (o que é uma combinação bastante estranha).

EDIT 1

Encontrei outra foto sobre as permissões do Linux e vou anexar para entender mais facilmente: Permissões de arquivo UNIX

Comentários

  • Você está errado sobre o 777 vs 0777. Ambos são octais (decimal não faz sentido em neste caso), mas na forma de quatro caracteres, o primeiro dígito define os bits especiais (sticky & setuid).
  • @orion Ocasionalmente, é verdade, por exemplo em um código semelhante ao C chmod(777) seria realmente o equivalente a executar chmod 1411 (ou seja, o chmod comando com o argumento 1411).
  • … que no caso de syscall (ou seu invólucro) e o binário com o mesmo nome pode ser um pouco confuso.
  • O Python Master Race resolveu esse problema inverso banindo todos os ” números ” que começavam com 0 , forçando o usuário a ser explícito se quiser algo diferente de decimal, por exemplo hex: 0x1FF, binário: 0b111111111 ou octal: 0o777. PYTHON POWER
  • Fonte da imagem?

Resposta

d significa que é um diretório, se você tiver um arquivo, é - e se for um link, você encontrará um l. Não pode ser definido / desmarcado.

Se você usar 0777 como permissões, estará dando controle total (leitura + gravação + execução) a cada usuário / grupo do sistema. É uma maneira preguiçosa de resolver problemas quando você tem usuários / grupos que não podem “acessar diretórios / arquivos.

Por exemplo, se você listar o conteúdo de um diretório e obtiver isto:

-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so

preloadable_libintl.so é um arquivo pertencente ao usuário root e ao grupo root. O proprietário tem acesso de leitura e gravação, o grupo tem acesso apenas de leitura e qualquer outro usuário tem acesso de leitura. Isso pode ser traduzido como 644.

Se eu alterar para 777, ficará assim:

-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so

Resposta

Depois de obter minha pergunta respondida aqui e fazer algumas pesquisas sobre o resultado, encontrei um artigo que explica tudo muito bem. Eu gostaria de compartilhar algumas partes deste artigo aqui para referências futuras.

Permissões de visualização

Para usar chmod para alterar as permissões de um arquivo ou diretório, você primeiro precisa saber o que modo de acesso é. Você pode visualizar o conteúdo de um diretório no terminal cd para esse diretório e usar:

$ ls -l 

A opção -l é importante porque usar ls sem ele exibirá apenas os nomes dos arquivos ou pastas no diretório.

Abaixo está um exemplo de uso de ls -l em meu diretório inicial:

total 128 drwxr-xr-x 2 peter users 4096 Jul 5 21:03 Desktop drwxr-xr-x 6 peter users 4096 Jul 5 17:37 Documents drwxr-xr-x 2 peter users 4096 Jul 5 13:45 Downloads drwxr-xr-x 2 peter users 4096 Jun 24 03:36 Movies drwxr-xr-x 2 peter users 4096 Jun 24 03:38 Music drwxr-xr-x 2 peter users 4096 Jun 26 00:09 Pictures -rw-r--r-- 1 peter users 354 Jul 6 17:15 chmodtest 

O que as colunas significam

A primeira coluna é o tipo de cada arquivo:

  • - denota um arquivo normal.
  • d denota um diretório, ou seja, uma pasta contendo outros arquivos ou pastas.
  • p denota um pipe nomeado (também conhecido como FIFO ).
  • l denota um link simbólico.

As letras depois disso são as permissões, esta primeira coluna é o que estaremos mais interessados. O segundo é quantos links existem em um arquivo, podemos ignore-o com segurança. A terceira coluna possui dois valores / nomes: O primeiro (no meu exemplo “peter”) é o nome do usuário que possui o arquivo. O segundo valor (“usuários” no exemplo) é o grupo ao qual o proprietário pertence (Leia mais sobre grupos).

A próxima coluna é o tamanho do arquivo ou diretório em bytes e informações depois disso são as datas e horas em que o arquivo ou diretório foi modificado pela última vez e, claro, o nome do arquivo ou diretório.

O que significam as permissões

As três primeiras letras, após as primeiras - ou d são as permissões que o proprietário possui. As próximas três letras são permissões que se aplicam ao grupo. As três letras finais são as permissões que se aplicam a todos os outros.

Cada conjunto de três letras é composto por r w e x. r está sempre na primeira posição, w está sempre na segunda posição e x está sempre na terceira posição. r é a permissão de leitura, w é a permissão de gravação e x é a permissão de execução permissão. Se houver um hífen (-) no lugar de uma dessas letras, significa que a permissão não foi concedida e, se a letra estiver presente, ela foi concedida.

Pastas

No caso de pastas, os bits de modo podem ser interpretados da seguinte forma:

  • r (ler) significa para a capacidade de ler o índice do diretório fornecido,
  • w (gravação) significa a capacidade de escrever o índice do diretório fornecido (criar novos arquivos, pastas; renomear, excluir arquivos e pastas existentes) se e somente se executar bit estiver definido. Caso contrário, essa permissão não tem sentido.
  • x (executar) significa a capacidade de entrar em um determinado diretório com o comando cd e acessar arquivos e pastas nesse diretório.

Alterando permissões usando o comando chmod

chmod é um comando no Linux e em outros sistemas operacionais semelhantes ao Unix. Ele permite que você altere as permissões (ou modo de acesso) de um arquivo ou diretório.

Você pode alterar as permissões de duas maneiras diferentes: – Baseado em texto chmod – Baseado em número chmod

Método de texto

Para alterar as permissões ou o modo de acesso de um arquivo, usamos o comando chmod em um terminal. Abaixo está a estrutura geral do comando:

chmod who=permissions filename 

Onde quem é qualquer uma de uma variedade de letras, e cada uma significa a quem você vai dar permissão . Elas são as seguintes:

u - The user that owns the file. g - The group the file belongs to. o - The other users i.e. everyone else. a - all of the above - use this instead of having to type ugo. 

As permissões são as mesmas já discutidas (r, w e x).

O comando chmod nos permite adicionar e subtrair permissões de um conjunto existente usando + ou – em vez de =. Isso é diferente dos comandos acima, que essencialmente reescrevem as permissões (ou seja, para alterar uma permissão de r-- para rw- , você ainda precisa incluir r, bem como w após = no chmod comando. Se você perder r, ele tiraria a permissão r, pois eles estão sendo reescritos com o =. Usin g + e – evite isso adicionando ou retirando o conjunto atual de permissões).

Método numérico

chmod também pode definir permissões usando números.

Usar números é outro método que permite editar as permissões para todos os três proprietários, grupos e outros ao mesmo tempo. Esta estrutura básica do código é a seguinte:

chmod xxx file/directory 

Onde xxx é um número de 3 dígitos onde cada dígito pode ser qualquer coisa de 1 a 7. O primeiro dígito se aplica às permissões para o proprietário, o segundo dígito se aplica às permissões para o grupo e o terceiro dígito se aplica às permissões para todos os outros.

Nesta notação numérica, os valores r, w e x têm seu próprio número valor:

r=4 w=2 x=1 

Para chegar a um número de três dígitos, você precisa considerar quais permissões deseja que um proprietário, grupo e usuário tenham e, em seguida, total seus valores para cima. Por exemplo, digamos que eu quisesse conceder ao proprietário de um diretório permissões de leitura e gravação e de execução, e quisesse agrupar e todos os outros para apenas ler e executar permissões. Eu chegaria com os valores numéricos assim:

Owner: rwx = 4+2+1=7 Group: r-x = 4+0+1=5 (or just 4+1=5) Other: r-x = 4+0+1=5 (or just 4+1=5) Final number = 755 $ chmod 755 filename 

Isso é o equivalente a usar o seguinte:

chmod u=rwx filename chmod go=rx filename 

A maioria das pastas / diretórios são configurados para 755 para permitir leitura e gravação e execução para o proprietário, mas nega gravação para todos os outros, e os arquivos são normalmente 644 para permitir leitura e gravação para o proprietário, mas apenas lendo para todos os outros, consulte a última nota sobre a falta de permissões x com arquivos não executáveis – é o mesmo aqui.

Comentários

  • Apenas copiar texto de outro artigo é – pelo menos – rude. Talvez também uma violação de direitos autorais. Se não foi apenas copiado ou você realmente usou pequenas partes (direitos autorais graças ao uso justo), então, pelo menos, adicione um link para o artigo que você está referenciando / citando.

Resposta

Para as questões d

Isso informa o tipo de arquivo Unix. Por padrão, o Unix tem apenas 3 tipos de arquivos. Eles são:

  • - – Arquivo normal
  • d – Arquivo de diretório
  • Arquivo especial (com 5 subtipos):
    • b – Bloquear arquivo
    • c – Arquivo de dispositivo de caracteres
    • p – Arquivo de pipe nomeado ou apenas arquivo de pipe
    • l – Arquivo de link simbólico
    • s – Arquivo de soquete

Leia mais aqui: Tipos de arquivo em Linux / Unix explicados em detalhes

0777 vs 777

Bit aderente especificado ou não. Quando o sticky bit de um diretório é definido, o sistema de arquivos trata os arquivos nesses diretórios de uma maneira especial, de forma que apenas o proprietário do arquivo, o proprietário do diretório ou o usuário root possam renomear ou excluir o arquivo. Sem o sticky bit definido, qualquer usuário com permissões de gravação e execução para o diretório pode renomear ou excluir os arquivos contidos, independentemente do proprietário do arquivo.

0777 define 777 permissões de arquivo , e o sticky bit para 0 – sem modos especiais.

777 está definindo 777 permissões de arquivo, sem alterar o sticky bit.

Leia mais: sticky bit e chmod

Comentários

  • Melhor: mas ainda não oferece nada que as outras respostas não tenham ‘ já coberto …
  • ( 1) Existem três tipos básicos de arquivos: arquivos simples, diretórios e tudo mais. O que? Onde você está conseguindo isso? No grande esquema das coisas, arquivos e diretórios simples são muito semelhantes. Pipes nomeados e links simbólicos são mais como arquivos simples e diretórios do que arquivos de dispositivos ou soquetes. (2) Você acha que chmod 777 não limpa os bits setuid, setgid e sticky? Experimente.
  • Unix tem 7 tipos de arquivo, não 3.

Resposta

Duas coisas relacionadas que “sempre achei confusas, e não mencionei acima, são:


I) que “ 1 ” faz:

Em chmod : cada “1” en permite uma permissão, por exemplo, chmod 777 en ables todos, mas preste atenção porque
em umask : each “1” dis permite uma permissão, por exemplo, umask 777 dis ables todos.


II ) arquivo “proprietários” vs.arquivo “usuários” :

Em outras palavras, existem usuários que “possuem” e usuários que “usam” .

Cada arquivo é de propriedade , ao mesmo tempo, por duas entidades:

  • um único usuário específico, e
  • um único, específico group (de um ou mais usuários).

Portanto, cada arquivo pode ser usado por um usuário específico de três maneiras:

1) Diretamente, como o usuário que possui o arquivo,
2) em diretamente, como um membro do grupo que possui o arquivo, e
3 ) possivelmente, como outra pessoa.


Caso contrário, , o respostas acima, faça um ótimo trabalho! Obrigado a todos.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *