Por que o chmod + w não dá permissão de gravação para outro (o)

17

Quando eu corro chmod +w filename, não dá permissão para gravação other, apenas dá permissão para usere group.

Depois de executar este comando

chmod +w testfile.txt

ls -l testfile.txtimpressões em execução

-rw-rw-r-- 1 ravi ravi 20 Mar 10 18:09 testfile.txt

mas no caso de +re +xfunciona corretamente.

Eu não quero usar chmod ugo+w filename.

Ravi Sevta
fonte
11
Se você não quiser usar ugo, use a.
Muru
Sim, mas eu só quero saber por que +wnão está trabalhando.
Ravi Sevta
Por isso deixei dois comentários.
Muru
@muru. Você alega na sua askubunturesposta que você mencionou acima que "Esse comportamento é obrigatório para POSIX e, portanto, não é um bug". Esteja ciente de que o texto de uso do aplicativo POSIX não é normativo e, portanto, não é obrigatório pelo POSIX.
fpmurphy

Respostas:

25

Sua situação específica

Na sua situação específica, podemos supor que sua atual umaskseja 002(esse é um valor padrão comum) e isso explica sua surpresa.

Nessa situação específica em que o umaskvalor é 002 (todos os números octais).

  • +rsignifica ugo+rporque 002 & 444é 000, que permite que todos os bits sejam definidos
  • +xsignifica ugo+xporque 002 & 111é 000, que permite que todos os bits sejam definidos
  • mas +wsignifica ug+wporque 002 & 222é 002, o que impede que o bit "o" seja definido.

Outros exemplos

  • Com umask 022 +wsignificaria u+w.
  • Com umask 007 +rwxsignificaria ug+rwx.
  • Com umask 077 +rwxsignificaria u+rwx.

O que teria correspondido às suas expectativas

Quando você muda umaskpara 000, executando

umask 000

no seu terminal, então

chmod +w file

irá definir permissões para ugo + w.

Nota

Conforme sugerido por ilkkachu, observe que umask 000isso não significa que todos possam ler e gravar todos os seus arquivos.

Mas umask 000significa que todos os que têm algum tipo de acesso a qualquer conta de usuário em sua máquina (que pode incluir programas executando os serviços de servidor ofc) podem ler e gravar todos os arquivos que você cria com essa máscara ativos e não são alterados (se a cadeia que contém diretórios até a raiz também os permite).

Prvt_Yadav
fonte
3
umask 000 significa que todos que têm algum tipo de acesso a uma conta de usuário em sua máquina (que pode incluir programas executando os serviços de servidor ofc) podem ler e gravar todos os arquivos que você cria com essa máscara ativa e não são alterados, para ficar claro
StarWeaver 11/0318
3
"+ r significa ugo = r" - não, não significa, significa definir o rbit para as partes onde o umask permite. Isso está claramente indicado nos manuais, por exemplo, GNU chmod e FreeBSD chmod, bem como no padrão. O mesmo para +x. Pois +wvocê está certo, no caso daquela umask em particular.
Ilkkachu 14/0318
3
Além disso, configurar umask como 0 não significa que todos possam ler e gravar todos os seus arquivos, pois muitos aplicativos criam arquivos que são particularmente privados no modo 0600, o que significa que o grupo e outros não têm acesso, independentemente do umask.
ilkkachu
@ilkkachu + r significa ugo = r, isso estava relacionado à situação descrita na pergunta. Isso não foi geral.
Prvt_Yadav
2
@Debian_yadav, esse é exatamente o ponto: umaské uma parte importante de como +rse comporta, não uma nota de rodapé. Além disso, mesmo supondo que umask 002, chmod +rnão significa chmod ugo=r, isso significachmod ugo+r
ilkkachu
23

Com:

chmod +<perms>

os privilégios são adicionados ao usuário , grupo e outros, mas com o umask ainda sendo aplicado. Ele garante que o arquivo não tenha mais permissão do que um arquivo recém-criado.

Se você deseja adicionar as permissões ao usuário , grupos e outros, independentemente da umask, use

chmod a+<perms>

que é abreviação de

chmod ugo+<perms>
Stéphane Chazelas
fonte
Isso significa que + x e a + x não são iguais.
Prevt_Yadav
11
Eu gosto de ter links: man7.org/linux/man-pages/man1/chmod.1.html „Se nada disso for dado, o efeito é como se (a) fosse dado, mas bits que são definidos no umask não são afetados. "
tehnicaorg 13/0318
0

Você precisa especificar a quem você está dando permissões, como other, usandochmod o+w testfile.txt

Jaken551
fonte
11
sim, mas acho que +wdá permissão para todos (usuário, grupo e outros).
Ravi Sevta 10/0318
Para dar permissões a todos os usuários, use chmod a+w testfile.txt. Use upara usuário, gpara grupo, opara outro e apara todos.
Jaken551
se chmod a+w filename, chmod +w filenamee chmod ugo+w filenamesão alternativos entre si, em seguida, por que não usar+w
Ravi Sevta