Realmente não importa se os arquivos em /bin
(ou qualquer outro diretório padrão onde os executáveis são mantidos) são graváveis por root
ou não. Em um servidor Linux que estou usando, eles são graváveis por root
, mas na minha máquina do OpenBSD, eles não são.
Desde que não sejam graváveis pelo grupo ou por "outros"!
Não há nenhum problema de segurança, por exemplo,
-rwxr-xr-x 1 root root 126584 Feb 18 2016 /bin/ls
Se alguém quiser substituí-lo, ele precisará ser root
e, se eles forem root
e sobrescreverem, eles serão
- instalando uma nova versão ou
- desajeitado ou
- um invasor com
root
permissões já .
Outra coisa a considerar é que root
pode gravar no arquivo independentemente de estar protegido contra gravação ou não, porque ... root
.
Note também que "um script" é tanto executável quanto um arquivo binário. Um script não precisa ser gravável "porque é um arquivo de texto". Se qualquer coisa, provavelmente deveria ter a mesma permissão que os outros executáveis no mesmo diretório.
Não vá alterar as permissões em tudo agora! Isso pode causar todo tipo de confusão e potencialmente confundir os gerenciadores de pacotes que podem verificar se as permissões estão definidas corretamente. Isso também pode tornar o sistema vulnerável se você acidentalmente alterar as permissões de maneira errada em um aplicativo de segurança crítica.
Suponha apenas que as permissões nos executáveis estejam definidas corretamente, a menos que você encontre algo que pareça realmente ímpar, caso em que você provavelmente deveria contatar o mantenedor do pacote relevante para verificar ao invés de começar a mudar o material.
Nos comentários e no bate-papo , houve uma chamada por algum histórico.
O histórico das permissões em binários no Linux não é algo que eu saiba. Pode-se especular que eles simplesmente herdaram as permissões do diretório, ou apenas do padrão umask
do Linux, mas eu realmente não sei.
O que eu sei é que o OpenBSD instala os binários no sistema básico 1 com o modo de permissão 555 por padrão ( -r-xr-xr-x
). Isso é especificado em um fragmento Makefile em /usr/share/mk/bsd.own.mk
, que define BINMODE
para 555 (a menos que já esteja definido). Isso é usado posteriormente ao instalar os executáveis durante make build
in /usr/src
.
Eu dei uma olhada no registro de CVS anotado para este arquivo , e descobriu que esta linha no arquivo é inalterada desde que foi importada do NetBSD em 1995.
No NetBSD, o arquivo era primeiro colocado no CVS em 1993, com BINMODE
definido para 555.
O projeto FreeBSD parece ter usado exatamente o mesmo arquivo que o NetBSD desde pelo menos 1994 , e com um commit posterior adiciona uma dica na mensagem de commit que os arquivos antigos eram da versão 4.4BSD do o Berkeley Software Distribution.
Além disso, o CSRG em Berkeley manteve as fontes em SCCS mas seu repositório é disponível no formulário do Git no GitHub 2 . O arquivo que estamos dando o tratamento forencista aqui parece ter sido confirmado por Keith Bostic (ou alguém próximo a ele) em 1990.
Então essa é a história. Se você quer o porquê , então eu suponho que teremos que perguntar ao Keith. Eu estava meio que esperando ver uma mensagem de commit para uma mudança dizendo " isso precisa ser 555 porque ... ", mas não.
1 Os sistemas BSD possuem uma divisão mais estrita em "sistema base" e "ports / packages" do que no Linux. O sistema básico é uma unidade coerente que fornece um conjunto completo de instalações para executar o sistema operacional, enquanto as portas ou pacotes são vistos como "software local" e são instalados em /usr/local
.
2 Um repositório GitHub mais abrangente de versões Unix dos anos 70 em diante está disponível também .