Por que não é possível limpar bits setuid/setgid/sticky via notação octal com chmod?

Por que não é possível limpar bits setuid/setgid/sticky via notação octal com chmod?

Então, hoje, no trabalho, a gerência aparece aleatoriamente e me pede para dar um curso intensivo sobre como usar Linux para um grupo de engenheiros. Aparentemente, eles perceberam minha divergência com a Microsoft (devido a problemas de privacidade e segurança do Win 10) e agora sou o "especialista" residente em qualquer coisa *nix.

Depois de explicar ao grupo a beleza da simplicidade do Linux, surgiram dúvidas sobre permissões de arquivos. Eu explico chmoda sintaxe octal do mundo do grupo de usuários para atribuir permissões.

Em seguida, vamos para o bit setuid/setgid/sticky - demonstro com um exemplo simples como chmod 2755 somefile.txte aponto que o bit setgid agora está habilitado. Para limpar esse bit, eu emito chmod 0755, mas para minha consternação o bit setgid persiste. O que?? Eu sei que já usei essa sintaxe para limpar bits pegajosos antes (embora provavelmente há uma década). Foi muito embaraçoso descobrir que não funcionou logo depois de ter falado sobre o quão elegante era o design.

De qualquer forma, também mostrei a eles a g+sabreviação g-salternativa e descobri que g-so DID funcionava.

Após a apresentação, pensei que havia encontrado um bug no chmod, mas ao revisar a manpágina descobri que o comportamento era "intencional", pois há uma nota explícita informando que chmodpode ser usado para definir os sinalizadores fixos, mas não eliminá-los .

POR QUE foi removida a capacidade de chmodlimpar bits pegajosos usando notação octal? Pesquisei no Google e encontrei algumas pessoas dizendo que o zero inicial era "confuso" e deveria ser omitido. Realmente? Por essa lógica, poderíamos também dizer que é ilegal que bytes (por exemplo, código ASCII) contenham bits "0" iniciais porque é "confuso". As pessoas que acham o zero inicial confuso podem usar a notação simbólica. As pessoas que desejam usar a notação octal devem poder usar octal.

Por que foi chmodprejudicado por não suportar a notação octal para limpar os bits pegajosos?

Responder1

O problema é que antes da introdução dos sticky bits, já existiam muitos scripts de shell etc. que usavam apenas três dígitos octais (ou menos). Além disso, a convenção de que qualquer número pode ser preenchido com zeros à esquerda está profundamente arraigada.

Portanto, se alguém tivesse permitido que a forma octal com um zero à esquerda redefinisse os bits fixos, muitos scripts teriam acidentalmente redefinido os bits fixos. A depuração teria sido um pesadelo, então chmodacabou com a restrição de que você não pode redefinir bits pegajosos na forma octal. Afinal, se você realmente deseja redefini-los (o que raramente acontece), você sempre pode usar o formulário alternativo.

Assim como muitas formas de complexidade surpreendente, a resposta é “compatibilidade com versões anteriores”.

informação relacionada