Eu realmente nunca entendi como chmod
funcionou até hoje. Eu segui um tutorial que me explicou muito.
Por exemplo, eu li que você tem três grupos de permissão diferentes:
- proprietário (
u
) - group (
g
) - todos (
o
)
Com base nesses três grupos, agora sei que:
- Se o arquivo pertencer ao usuário, as permissões do usuário determinarão 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 estiver no grupo, a outra permissão será usada.
Também aprendi que você tem as seguintes permissões:
- read (
r
) - write (
w
) - execute (
x
)
Criei um diretório para testar meus conhecimentos recém-adquiridos:
mkdir test
Então eu 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 um tempo, acho que finalmente entendi chmod
e como você define a permissão usando esse comando.
Mas...
Ainda tenho algumas perguntas:
- O que significa
d
no início? - Qual é o nome e o uso do slot que contém e que outros valores ele pode conter?
- Como posso definir e desabilitar?
- Qual o valor disso
d
? (Como você tem apenas 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1) - Por que as pessoas às vezes usam em
0777
vez de777
definir suas permissões?
Mas como eu não deveria estar fazendo várias perguntas, tentarei fazê-lo em uma pergunta.
No sistema baseado em UNIX, como todas as distribuições Linux, referente às permissões, o que a primeira parte ( d
) representa e para que serve essa parte das permissões?
fonte
S_IFDIR
. Você não o usa ao definir o modo de arquivo, mas astat()
função realmente retorna o valor 040750 paradrwxr-x---
.Respostas:
Responderei 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 na
ls -l
saída representa o tipo de arquivo;d
significa que é um diretório. Não pode ser definido ou desabilitado, depende de como o arquivo foi criado. Você pode encontrar a lista completa dos tipos de arquivos na documentação ls ; aqueles que você provavelmente encontrará-
: Arquivo "regular", criado com qualquer programa que possa gravar um arquivob
: bloco de arquivo especial, normalmente dispositivos de disco ou partição, pode ser criado commknod
c
: arquivo especial de caractere, também pode ser criado commknod
(veja/dev
exemplos)d
: diretório, pode ser criado commkdir
l
: link simbólico, pode ser criado comln -s
p
: pipe nomeado, pode ser criado commkfifo
s
: socket, pode ser criado comnc -U
D
: door , criado por alguns processos do servidor no Solaris / openindiana.Permissões
chmod 0777
é usado para definir todas as permissões em umachmod
execução, em vez de combinar alterações comu+
etc. Cada um dos quatro dígitos é um valor octal que representa um conjunto de permissões:suid
,sgid
E “pegajosa” (veja abaixo)O valor octal é calculado como a soma das permissões:
Para o primeiro dígito:
suid
é 4; binários com esse conjunto de bits são executados como usuário proprietário (geralmenteroot
)sgid
é 2; os binários com esse conjunto de bits são executados como seu grupo proprietário (usado para jogos para que pontuações mais altas possam ser compartilhadas, mas geralmente é um risco de segurança quando combinado com vulnerabilidades nos jogos), e os arquivos criados nos diretórios com esse conjunto de bits pertencem ao grupo de proprietários do diretório por padrão (útil para criar pastas compartilhadas)root
(veja/tmp
um exemplo comum disso).Veja a página de
chmod
manual para 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, arquivo ACLs ...).Os bits especiais são tratados de maneira diferente, dependendo do tipo de arquivo (arquivo ou diretório comum) e do sistema subjacente. (Isso é mencionado na página de
chmod
manual.) No sistema que eu costumava testar isso (comcoreutils
8.23 em umext4
sistema de arquivos, executando o kernel do Linux 3.16.7-ckt2), o comportamento é o seguinte. Para um arquivo, os bits especiais são sempre limpos, a menos que definido explicitamente, portanto,chmod 0777
é equivalente achmod 777
, e ambos os comandos limpam os bits especiais e concedem a todos permissões totais no arquivo. Para um diretório, os bits especiais nunca são totalmente limpos usando a forma numérica de quatro dígitos; portanto,chmod 0777
também é equivalente achmod 777
mas é enganador, pois alguns dos bits especiais permanecerão como estão. (A versão anterior desta resposta coisa está errada.) Para limpar pedaços especiais em diretórios que você precisa usaru-s
,g-s
e / ouo-t
explicitamente ou especificar um valor numérico negativo, entãochmod -7000
irá limpar todos os bits especiais em um diretório.Na
ls -l
saída,suid
,sgid
e “pegajosa” aparecer no lugar dax
entrada:suid
és
ouS
em vez do usuário dox
,sgid
és
ouS
não ao grupo dex
, e “pegajoso” ét
ouT
em vez dos outrosx
. Uma letra minúscula indica que o bit especial e o executável estão definidos; uma letra maiúscula indica que apenas o bit especial está definido.As várias formas de chmod
Por causa do comportamento descrito acima, usar os quatro dígitos completos
chmod
pode ser confuso (pelo menos parece que eu estava confuso). É útil quando você deseja definir bits especiais e bits de permissão; caso contrário, os bits serão limpos se você estiver manipulando um arquivo, preservados se você estiver manipulando um diretório. Assim,chmod 2750
você garante pelo menossgid
e exatamenteu=rwx,g=rx,o=
; maschmod 0750
não necessariamente limpará os bits especiais.Usar 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ê está acostumado a usar os modos numéricos, geralmente é mais fácil especificar o modo completo dessa maneira; e é útil poder pensar em permissões usando modos numéricos, pois muitos outros comandos podem usá-las (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 de quais sejam as outras permissões. Da mesma forma,+X
adiciona a permissão de execução apenas se uma das permissões de execução já estiver definida ou se 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. Portanto,chmod -R ug=rX,u+w,o=
é equivalente a aplicarchmod -R 750
a todos os diretórios e arquivos executáveis echmod -R 640
a todos os outros arquivos.fonte
sgid
bit estivesse sempre definido, independentemente do seu valor real. No FreeBSD, osuid
bit pode ser configurado para agir de maneira análoga asgid
(ou seja, arquivos e subdiretórios criados dentro terão o mesmo proprietário do diretório), desde que o sistema de arquivos subjacente suporte isso e seja montado com asuiddir
opção+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 @ stephen-kitt, faltando a documentação "já está definida" realmente estava me provocando!Portanto, as permissões no Linux são muito importantes. Vou tentar fazer uma breve explicação.
Para partes de um modo de arquivo
Todo arquivo Unix possui um conjunto de permissões que determinam se você pode ler, gravar ou executar o arquivo. A execução de ls -l exibe as permissões. Aqui está um exemplo dessa exibição:
Anexo uma imagem de partes de um modo de arquivo:
Tipo pode ser coisa diferente. Por exemplo:
Se você deseja definir algumas permissões para todos os diretórios, pode usar o atributo R, por exemplo:
Para chmod 777 vs 0777
O
chmod
comando normalmente espera que a entrada seja um número octal, o zero inicial refere-se ao valor do trigêmeo de bit pegajoso / sgid / suid. No entanto, em C, isso faria diferença, pois777
seria traduzido para01411
(octal), configurando o bit adesivo (consulte achmod(2)
página do manual), permissões de leitura para o proprietário e bit executável para o grupo e outros (o que é uma combinação bastante estranha) .EDIT 1
Encontrei outra foto sobre as permissões do Linux e anexarei para entender mais fácil:
fonte
chmod(777)
seria o equivalente à execuçãochmod 1411
(ou seja, ochmod
comando com argumento1411
).0x1FF
, binária:0b111111111
ou octal:0o777
. PYTHON POWERd
significa que é um diretório, se você possui um arquivo-
e se é um link, encontrará uml
. Não pode ser definido / desabilitado.Se você usar 0777 como permissões, estará dando controle total (leitura + gravação + execução) a todos os usuários / grupos do sistema. É uma maneira lenta de resolver problemas quando você tem usuários / grupos que não conseguem acessar diretórios / arquivos.
Por exemplo, se você listar o conteúdo de um diretório e obter o seguinte:
-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so
preloadable_libintl.so é um arquivo de propriedade da raiz do usuário e da raiz do grupo. O proprietário tem acesso de leitura e gravação, o grupo tem apenas acesso de leitura e qualquer outro usuário tem acesso de leitura. Isso pode ser traduzido como 644.
Se eu mudar para 777, ficará assim:
-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so
fonte
Depois de obter minha pergunta respondida aqui e fazer algumas pesquisas sobre o resultado, encontrei um artigo que explica tudo muito bem. Gostaria de compartilhar algumas partes deste artigo aqui para futuras referências.
Permissões de visualização
Para
chmod
alterar as permissões de um arquivo ou diretório, primeiro você precisa saber qual é o modo de acesso atual. Você pode visualizar o conteúdo de um diretório no terminal porcd
esse diretório e, em seguida, usar:A
-l
opção é importante porque o usols
sem ela exibirá apenas os nomes de arquivos ou pastas no diretório.Abaixo está um exemplo de uso
ls -l
no meu diretório pessoal:O que as colunas significam
A primeira coluna é o tipo de cada arquivo:
-
indica um arquivo normal.d
indica um diretório, ou seja, uma pasta que contém outros arquivos ou pastas.p
denota um pipe nomeado (aka FIFO).l
indica um link simbólico.As letras a seguir são as permissões. Nesta primeira coluna, estaremos mais interessados. A segunda é em quantos links existem em um arquivo, podemos ignorá-lo 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 as informações 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 as permissões significam
As três primeiras letras, após a primeira
-
oud
, 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
ex
.r
está sempre na primeira posição,w
está sempre na segunda posição ex
está sempre na terceira posição.r
é a permissão de leitura,w
é a permissão de gravação ex
é a permissão de execução. Se houver um hífen (-
) no lugar de uma dessas cartas, significa que a permissão não é concedida e, se a carta estiver presente, será concedida.Pastas
No caso de pastas, os bits de modo podem ser interpretados da seguinte maneira:
r
(read) significa a capacidade de ler o índice do diretório especificado,w
(write) significa a capacidade de escrever o índice do diretório especificado (criar novos arquivos, pastas; renomear, excluir arquivos, pastas existentes) se e somente se o bit de execução estiver definido. Caso contrário, essa permissão não terá sentido.x
(execute) significa a capacidade de entrar no diretório especificado com o comando cd e acessar arquivos, pastas nesse diretório.Alterando permissões usando o comando chmod
chmod
é um comando no Linux e outros sistemas operacionais semelhantes ao Unix. Permite alterar as permissões (ou modo de acesso) de um arquivo ou diretório.Você pode alterar as permissões de duas maneiras diferentes: - Com base em texto - Com base em
chmod
númerochmod
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:
Onde Quem é do grupo de letras e cada um significa para quem você vai dar permissão. Eles são os seguintes:
As permissões são as mesmas que já discutida (
r
,w
, ex
).O comando chmod 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--
pararw-
, você ainda precisa incluir o comandor
ew
depois=
ochmod
comando no comando. Se você perdeur
, ar
permissão seria retirada como eles estão sendo reescritos com o =. Usando + e - evite isso adicionando ou removendo o conjunto atual de permissões).Método numérico
chmod
também pode definir permissões usando números.O uso de números é outro método que permite editar as permissões para todos os três proprietários, grupos e outros ao mesmo tempo. Essa estrutura básica do código é esta:
Onde xxx é um número de 3 dígitos, em que cada dígito pode ter de 1 a 7. O primeiro dígito se aplica às permissões do proprietário, o segundo dígito se aplica às permissões do grupo e o terceiro dígito se aplica às permissões de todos os outros.
Nesta notação numérica, os valores r, we ex têm seu próprio valor numérico:
Para criar um número de três dígitos, é necessário considerar quais permissões você deseja que um proprietário, grupo e usuário tenham e totalizar seus valores. Por exemplo, digamos que eu queira conceder ao proprietário de um diretório permissões de leitura e gravação e execução, e que eu deseje agrupar e todos os outros apenas ter permissões de leitura e execução. Eu apresentaria os valores numéricos da seguinte forma:
Isso equivale a usar o seguinte:
A maioria das pastas / diretórios é definida como 755 para permitir a leitura, gravação e execução para o proprietário, mas nega a gravação para todos os outros, e os arquivos são normalmente 644 para permitir a leitura e gravação para o proprietário, mas apenas a leitura para todos os demais, consulte a última nota sobre a falta de permissões x com arquivos não executáveis - é a mesma coisa aqui.
fonte
Para as perguntas d
Isso indica o tipo de arquivo Unix. Por padrão, o Unix possui apenas 3 tipos de arquivos. Eles são:
-
- Arquivo regulard
- arquivo de diretóriob
- Bloquear arquivoc
- Arquivo de dispositivo de caracterep
- Arquivo de pipe nomeado ou apenas arquivo de pipel
- Arquivo de link simbólicos
- arquivo de soqueteLeia mais aqui: Tipos de arquivos no Linux / Unix explicados em detalhes
0777
vs777
Bit pegajoso especificado ou não. Quando o bit pegajoso de um diretório é definido, o sistema de arquivos os trata nesses diretórios de uma maneira especial, de modo que apenas o proprietário do arquivo, o proprietário do diretório ou o usuário raiz possa renomear ou excluir o arquivo. Sem o conjunto de bits fixos, qualquer usuário com permissões de gravação e execução para o diretório pode renomear ou excluir arquivos contidos, independentemente do proprietário do arquivo.
0777
define 777 permissões de arquivo e o bit fixo como 0 - sem modos especiais.777
está definindo permissões de arquivo 777, sem alterar o bit fixo.Leia mais: bit pegajoso e chmod
fonte
chmod 777
que não limpa os bits setuid, setgid e sticky? Tente.