O que é mais amplamente usado: chmod 777 ou chmod a + rwx [fechado]

20

Das duas opções para alterar permissões:

  • chmod 777 file.txt
  • chmod a+rwx file.txt

Estou escrevendo um documento que detalha que os usuários precisam alterar as permissões de um determinado arquivo. Quero detalhá-lo como a maneira mais comum de alterar as permissões de arquivo.

Atualmente diz:

- Set permissions on file.txt as per the example below:
    - chmod 777 /tmp/file.txt

Este é apenas um exemplo e não altera os arquivos para ter permissões totais para todos.

Kevdog777
fonte
6
primeira solução é mais curta e mais amplamente utilizada, eu nunca vi a segunda.
Archemar 03/09
2
definir permissões de leitura, gravação e execução para todos não é uma boa ideia em termos de segurança. Você deve usar o chmod 773.
Martin Erhardt
11
@MartinErhardt Normalmente, eu usaria apenas 775ou apenas 755para arquivos executáveis.
precisa saber é o seguinte
3
chmod 777é como chmod a=rwx, não chmod a+rwx.
Stéphane Chazelas
11
777ou 666é simples e muito mais memorável do que ugo+rwx, a+rwxou ugo+rwque é muito confuso oe ambíguo e pode significar para você, proprietário ou outras pessoas, a sua escolha. Então, ao invés de cometer o grande erro, você fica checando manpara verificar qual é qual, ou apenas usa os números.
kenorb

Respostas:

29

O Google fornece:

chmod 777 é cerca de 3 vezes mais popular.

Dito isso, eu prefiro usar opções longas na documentação e scripts, porque eles são auto-documentados. Se você estiver seguindo suas instruções com "Executar ls -l | grep file.txte verificar permissões", convém usar, chmod a+rwxporque é assim que o ls exibirá as permissões.

jwhitlock
fonte
Obrigado por isso. Eu acho que, escrevendo-lo na íntegra (alfanumérico) vai impedir que as pessoas perguntando o que faz a 7média, etc.
Kevdog777
11
Penso que a razão chmod 777é mais popular (como conjetured antes de ver seus números) é simplesmente que você digite 2 caracteres menos :)
Ángel
Se você quiser adicionar dicas à sua documentação, poderá adicionar uma dica que chmod 777seja um atalho útil para obter o mesmo efeito. Seus leitores apreciariam o elemento educacional em sua documentação. O 777 é mais popular porque é muito mais fácil e rápido atingir 7 três vezes, mas quando um novo usuário vê o 777 pela primeira vez, pode não saber exatamente o que isso significa. É por isso que é uma má escolha como documentação principal. Mas definitivamente vale a pena mencionar como uma dica.
ADTC
Como tangente, meu irmão e seus amigos usariam essa técnica para permitir palavras do Scrabble. Eles tinham algum limite para o número de acessos do Google antes que uma palavra fosse considerada 'real'
Wayne Werner
Eu acho que é popular porque é mais antigo (notação simbólica foi adicionada mais tarde), então, quando alguém escolhe, ele pesquisa no google ou o que quer que seja o equivalente ao tempo e vai com a multidão. Eu acho que é mais fácil usar simbólico, porque no momento em que calculei os números que eu poderia ter digitado os símbolos, também tendem a acertar na primeira vez.
CTRL-ALT-DELOR
26

[Edito para adicionar as melhores práticas, seguindo a sugestão de Dotancohen em sua resposta. Espero que não fique menos claro e que o bom hábito seja adotado]

Informações adicionais importantes: elas não são equivalentes.

chmod a+rwx: defina as 3 últimas octais para 777, para garantir que Proprietário, Grupo e Usuários tenham o "rwx" definido. Se houver bits adicionais no primeiro octal (setuid, setgid e / ou Sticky bit), eles os deixarão intocados. Pense nisso como um binário "ou 00777".

chmod 777 : defina os direitos como 00777, para garantir que Proprietário, Grupo e Usuários tenham "rwx" definido, E NADA MAIS. Também garante que os bits adicionais (setuid, setgid e / ou Sticky bit) estejam definidos como 0.

Portanto, use o primeiro formulário, se você quiser garantir o acesso a todos (e faça o dobro, o triplo de que isso é necessário ... isso abre a porta para todos os tipos de problemas de segurança, alguns inesperadamente amplos no que eles permitem que um usuário mal-intencionado o faça)

Use o formulário 777 se você também quiser redefinir qualquer bit setuid / setgid / sticky, ou seja, se os arquivos precisarem ser "00777", o que provavelmente é mais provável no seu caso (o direito do arquivo é conhecido e deve ser : 00777). Aqui também, triplique a certeza de que é realmente necessário ...

Geralmente, é melhor manter o acesso ao proprietário (e às vezes ao grupo): use os grupos para conceder acesso a alguns usuários específicos ao arquivo / diretório. a + rwx é fácil e geralmente a maneira errada de conceder acesso (é claro que existem casos muito raros em que é a única maneira ...)

http://en.wikipedia.org/wiki/Chmod é uma boa leitura, pois explica o que cada número ou letra representa (incluindo setuid / setgid / sticky)

Olivier Dulac
fonte
11
Além disso, o chmod a + w (que inclui um + rwx) em um arquivo suid é muito perigoso. Preciso elaborar chmod a + w *?
Joshua
Qual o sentido de definir a otherspermissão? Se você está conectado à máquina como usuário, certamente pode usar a userspermissão?
precisa saber é o seguinte
@ Kevdog777: Outros é para pessoas não o dono ou membros do grupo, também conhecido como todo o resto do sistema
Olivier Dulac
11
@ Kevdog777: se apenas o root e o usuário precisam acessar: chmod 00600 (se não for necessário executar o arquivo) ou chmod 00700 (se precisar executar o arquivo - ou - é um diretório). ou chmod 00400 para adicionar uma proteção (pequena, facilmente substituída) contra modificação / gravação no arquivo (00500 para um diretório). Em seguida, outras pessoas (e pessoas do grupo, mas não o usuário) não podem acessar o arquivo / dir. (seguindo a nota dotandcohen, adiciono o quarto octal lá + um "0" antes: não faz diferença para o shell, mas ajuda se você definir via perl / C / etc e o quarto octal for um tipo de lembrete de que ele existe , e que está muito)
Olivier Dulac
4
chmod 777é como chmod a=rwx.
Stéphane Chazelas
1

Normalmente, penso na diferença: definir as permissões como 0777 as define explicitamente como 0777. Como mencionado anteriormente, o 0 inicial será inferido se você digitar 777. Considerando que a + rwx adiciona leitura / gravação / execução, deixando o setuid / sticky um pouco intocado.

Suponha que você apenas queira ter certeza de que um arquivo é executável; você pode usar um + x para poder modificar o privilégio de execução sem se preocupar ou modificar as outras permissões. Se você usou a representação octal, seria necessário saber quais permissões estão definidas no momento para garantir que você não as modifique de outra maneira além da pretendida.

Josh Famestad
fonte
0

Eu diria que fornecer valores numéricos é muito mais comum em "guias simples de pessoas", como os produzidos para usuários de hospedagem na web com orçamento. No entanto, tenha cuidado para especificá-los como valores octais , e não decimais:

$ chmod 0777 some_dir

Note-se a líder 0no 0777. Embora o Bash e outros ambientes CLI façam a coisa certa com o uso de computadores sem teclado 777, muitas linguagens de programação, como PHP e Perl, têm funções semelhantes que exigem a liderança 0. Então, eu recomendo o seu uso no Bash também, para lembrar que ele deveria estar lá.

Nota para os que recusam: Como esclarecido nos comentários, o chmodcomando de fato sabe passar a diretiva como octal, mesmo que a notação decimal seja especificada. No entanto, nem todos os ambientes suportam isso, portanto, é uma boa prática se acostumar a especificá-lo explicitamente.

dotancohen
fonte
10
chmodnunca trata o número como decimal. chmod 777 filee chmod 0777 filesão completamente equivalentes.
Celtschk 3/09/14
3
@ Kevdog777: "octal" significa apenas base-8. Mas você não precisa se preocupar com isso, no que diz respeito ao uso do chmodcomando shell; você pode pensar nos três dígitos como independentes um do outro, cada um informando um conjunto de permissões.
Celtschk 03/09/2014
3
Para chmod, o 0 em 0777 realmente significa "limpe os bits setuid, setgid e sticky". Isso é equivalente a 777, pois o argumento é sempre preenchido com zeros à esquerda com quatro dígitos. Pela mesma razão, chmod 77é equivalente a chmod 077.
Emil Jeřábek apoia Monica
11
O chmodcomando interpreta seu argumento de modo em octal. Você precisa prestar atenção se estiver usando a maioria das linguagens de programação (C, Perl, ...), mas em um shell script é octal chmod.
Gilles 'SO- stop be evil'
11
+1 para sua anotação, pois é realmente bom sempre acrescentar um 0 (mesmo que você defina todas as 4 octais: 01777, por exemplo), pois não faz diferença para o shell, mas garanta que C, perl e outros o interpretem como octal
Olivier Dulac