Não seria conveniente se você chmod()
não tivesse esse comportamento.
Seria altamente inconveniente, porque as coisas que as pessoas tradicionalmente esperam que funcionem em Unixes quebrariam. Esse comportamento te serve bem, mas você sabe disso.
É uma pena que o IEEE 1003.1e nunca tenha se tornado um padrão e tenha sido retirado em 1998. Na prática, 14 anos depois, é um padrão que uma ampla gama de sistemas operacionais - de Linux através de FreeBSD para Solaris - realmente implementar.
O rascunho de trabalho # 17 do IEEE 1003.1e faz uma leitura interessante, e eu o recomendo. No apêndice B § 23.3, o grupo de trabalho fornece uma justificativa detalhada, de oito páginas, para a maneira um tanto complexa que as ACLs POSIX funcionam em relação aos antigos sinalizadores de permissão de grupo S_IRWXG
. (Vale a pena notar que o pessoal da TRUSIX forneceu a mesma análise dez anos antes.) Eu não vou copiar tudo aqui. Leia o raciocínio no rascunho do padrão para detalhes. Aqui está um resumo muito breve :
-
O manual do SunOS está errado. deve ler
If you use the
chmod(1)
command to change the file group owner permissions on a file with ACL entries, either the file group owner permissions or the ACL mask are changed to the new permissions.Esse é o comportamento que você pode ver acontecendo , apesar do que a página de manual atual diz, em sua pergunta. É também o comportamento especificado pelo padrão POSIX do rascunho. Se houver uma entrada de controle de acesso
CLASS_OBJ
(terminologia da Sun e TRUSIX paraACL_MASK
), os bits de grupo dechmod()
definem, senão eles configuram a entrada de controle de acessoGROUP_OBJ
. -
Se este não fosse o caso, os aplicativos que faziam várias coisas padrão com 'chmod ()', esperando que funcionasse como 'chmod ()' tradicionalmente trabalhava em Unixes antigos não ACL, ou deixariam brechas na segurança ou ver o que eles pensam ser buracos de segurança:
-
Aplicativos Unix tradicionais esperam poder negar todo o acesso a um arquivo, pipe nomeado, dispositivo ou diretório com
chmod(…,000)
. Na presença de ACLs, isso desativará somente todas permissões de usuário e grupo se o antigoS_IRWXG
mapear paraCLASS_OBJ
. Sem isso, definir as permissões de arquivo antigo como000
não afetaria as entradasUSER
ouGROUP
, e outros usuários, surpreendentemente, ainda teriam acesso ao objeto.Alterar temporariamente os bits de permissão de um arquivo para nenhum acesso com
chmod 000
e alterá-los novamente era um antigo mecanismo de bloqueio de arquivos, usado antes de os Unixes obterem mecanismos de bloqueio consultivo, que - como você pode ver - as pessoas ainda usam hoje . -
Scripts Unix tradicionais esperam poder executar
chmod go-rwx
e acabar com apenas o proprietário do objeto capaz de acessar o objeto. Novamente, - como você pode ver - essa ainda é a sabedoria recebida doze anos depois. E, novamente, isso não funciona, a menos que o antigoS_IRWXG
mapeie paraCLASS_OBJ
se ele existir, porque senão esse comandochmod
não desativaria nenhuma entrada de controle de acessoUSER
ouGROUP
, levando aos usuários além do proprietário e dos grupos não proprietários que mantêm acesso a algo que é esperado para ser acessível somente ao proprietário. -
Um sistema em que os bits de permissão eram separados e
and
ed com as ACLs exigiria que os sinalizadores de permissão de arquivo fossemrwxrwxrwx
na maioria dos casos, o que poderia confundir os muitos aplicativos Unix que reclamam quando veja o que eles acham que é algo que pode ser escrito em um mundo.Um sistema em que os bits de permissão eram separados e
or
ed com as ACLs teria o problemachmod(…,000)
mencionado antes.
-
Outras leituras
- Winfried Trümper (1999-02-28). Resumo sobre Posix.1e
- Comitê de Padrões de Aplicações Portáteis da IEEE Computer Society (outubro de 1997). Versão preliminar para tecnologia da informação - Interface de sistema operacional portátil (POSIX) - Parte 1 : Interface do Programa de Aplicação do Sistema (API) - Alteração Nº: Interfaces de Proteção, Auditoria e Controle [Linguagem C] IEEE 1003.1e. Rascunho 17.
- Craig Rubin (1989-08-18). Justificativa para a seleção de recursos de lista de controle de acesso para o sistema Unix . NCSC-TG-020-A. Publicação DIANE. ISBN 9780788105548.