O que chmod -u faz?

19

Por acidente, corri chmod -u filenamee removi todas as permissões que tinha filename.

A página do manual não faz referência a uma -uopção. Experimentando, pude concluir que ele remove não todas as permissões, mas apenas lê e executa o acesso, deixando o acesso de gravação intacto.

Então, o que isso faz exatamente?


Minha conclusão acima está errada, agora acho que o que ele faz é remover as permissões que o proprietário possui de todas as categorias.


Eu acho que o comportamento é análogo a a=u, só que é -, em vez de =e apodem ser descartados assim como pode com, por exemplo, a+x.

y_wc
fonte
6
For1 por fazer uma pergunta básica que não está na página de manual.
1
"O formato de um modo simbólico é [ugoa...][[-+=][perms...]...], onde perms é zero ou mais letras do conjunto rwxXst, ou uma única letra do conjuntougo " (página man chmod GNU); O POSIX é bastante obscuro, mas define uma produção "permcopy" para o mesmo efeito.
Michael Homer
1
@MichaelHomer Não diz o que faz.
y_wc 23/03
1
@y_wc "Em vez de uma ou mais dessas letras, você pode especificar exatamente uma das letras ugo : as permissões concedidas ao usuário que possui o arquivo ( u), as permissões concedidas a outros usuários membros do grupo de arquivos ( g) , e as permissões concedidas a usuários que não estão em nenhuma das duas categorias anteriores ( o). "
Michael Homer
1
Sim, eu li isso. Não vejo que ele mencione o que faz. Diz que posso especificar uma dessas cartas. Especificando, por exemplo u, especificarei as permissões concedidas ao usuário que possui o arquivo. Mas não diz o que faz. O que especificar mesmo significa?
y_wc 23/03

Respostas:

19

Esta não é uma opção, mas uma maneira padrão (mas incomum) de especificar as permissões. Isso significa remover ( -) as permissões associadas com o dono do arquivo ( u), para todos os usuários (sem precedentes u, gou o). Isso está documentado na página do manual.

A página de manual do GNU chmod documenta isso como:

O formato de um modo simbólico é [ugoa...][[-+=][perms...]...]onde permszero ou mais letras do conjunto rwxXstou uma única letra do conjunto ugo

e depois

Em vez de uma ou mais dessas letras, você pode especificar exatamente uma das letras ugo: as permissões concedidas ao usuário que possui o arquivo ( u), as permissões concedidas a outros usuários membros do grupo de arquivos ( g) e o permissões concedidas a usuários que não estão em nenhuma das duas categorias anteriores ( o)

Portanto, -usignifica remover ( -) quaisquer permissões atualmente ativadas para o proprietário ( u) para todos (equivalente a a-u, exceto honrar a umask atual). Embora isso muitas vezes não seja muito útil, às chmod +uvezes o análogo é copiar as permissões do proprietário para outras pessoas quando operar recursivamente, por exemplo.


Também está documentado no POSIX , mas é mais obscuramente definido: a especificação da permissão é ampla who[+-=]perms(ou um número) e o efeito disso é especificado mais detalhadamente:

Os símbolos permcopy u, ge odevem representar as permissões atuais associados com o usuário, grupo e outras partes dos bits de modo de arquivo, respectivamente. Para o restante desta seção, permrefere-se aos não terminais perme permcopyna gramática.

e depois

-

... Se quem não for especificado, os bits do modo de arquivo representados por perm para o proprietário, grupo e outras permissões, exceto aqueles com bits correspondentes na máscara de criação do modo de arquivo do processo de chamada, serão limpos.

Michael Homer
fonte
Obrigado Michael. A documentação do POSIX é convincente. O GNU no entanto ... Por favor, veja este meu comentário. Não vejo como o que vem depois de "Então" segue o que era antes. permspode ser uque eu consegui. Sim, uespecifica as permissões ou o proprietário. Mas como segue que -uremove as permissões do proprietário (módulo umask) de todos os usuários?
y_wc 23/03
Porque é o que -sempre faz: remove as permissões especificadas da classe especificada de usuários. -ué exatamente análogo a -w(ou mais próximo) de ugo-u.
Michael Homer
Eu estava prestes a dizer que não vim aqui para discutir documentação e que fiquei feliz em entender o que estava acontecendo, mas os documentos apenas clicaram. Obrigado.
y_wc 23/03
Posso incomodá-lo com outra chmodquestão de documentação? Deixe-me saber se você acha que isso merece uma pergunta separada. "and = faz com que eles sejam adicionados e faz com que os bits não mencionados sejam removidos, exceto que os bits de ID do grupo e usuário não mencionados do diretório não são afetados." Isso, para mim, está dizendo que, dado um diretório cujo proprietário possui apenas acesso de gravação, chmod u=rx directorydeixará as permissões do proprietário como rwx. Mas não é isso que acontece, eles se tornam o esperado r-x. Estou interpretando mal alguma coisa?
y_wc 23/03
Está dizendo que os sbits setuid / setgid ( ) são deixados em paz se você não os mencionar, e qualquer outra coisa que você não especificou é removida.
Michael Homer
2

A resposta é um pouco semelhante a /unix//a/429424/255251 .

chmod -u file_name

não remove toda a permissão, mas considera umaskvalor.

umask
0022
ls -l file
-rwxrwxrwx 1 user user 4 Feb 25 15:17 file
chmod -u file
chmod: file: new permissions are ----w--w-, not ---------
ls -l file
-----w--w- 1 user user 4 Feb 25 15:17 file

Agora altere o valor umask

umask 777
chmod 777 file
chmod -u file
chmod: file: new permissions are rwxrwxrwx, not ---------
ls -l file
-rwxrwxrwx 1 user user 4 Feb 25 15:17 file
Prvt_Yadav
fonte
2
Instrutivo, bom saber e muito útil, mas acho que esse não é realmente o problema, embora esteja muito relacionado. Obrigado.
y_wc 23/03