Você poderia explicar por que um arquivo compilado binário (em, por exemplo /usr/sbin
) possui permissão de gravação para o root
usuário?
Para mim, isso é compilado. Significa que a gravação direta não tem utilidade e pode expor o arquivo a algum problema de segurança de alguma forma.
Um script (por exemplo, um bash
arquivo) pode ser gravável porque é basicamente um arquivo de texto, mas por que é o mesmo para um arquivo compilado em que nenhuma gravação é realmente necessária, tanto quanto eu saiba?
Agradecemos antecipadamente o seu feedback.
linux
files
permissions
root
t1m0th33
fonte
fonte
root
tem permissão de gravação em um arquivo binário? Se nada mais ajudaria ao atualizar esse pacote.memmove()
para mover a última parte até o fim e abrir um furo, depois insira um novo texto no furo. Ou você pode usar uma série depread()
/pwrite()
para fazer o mesmo.ETXTBSY
). Em vez disso, o binário antigo é removido e o novo binário é gravado em um novo arquivo com o mesmo nome. A remoção de arquivos não requer permissões de gravação, apenas no diretório que os contém (por exemplo,/usr/sbin/
).Respostas:
Realmente não importa se os arquivos
/bin
(ou qualquer outro diretório padrão em que os executáveis são mantidos) são graváveis por raiz ou não. Em um servidor Linux que estou usando, eles são graváveis por raiz, mas na minha máquina OpenBSD, não são.Contanto que não sejam graváveis pelo grupo ou por "outros"!
Não há problema de segurança tendo, por exemplo,
Se alguém quisesse sobrescrevê-lo, teria que ser root e, se é
root
e sobrescrevê-lo, então eles serãoOutra coisa a considerar é que o root pode gravar no arquivo, independentemente de estar protegido ou não, porque ... root.
Observe também que "um script" é tanto um executável quanto um arquivo binário. Um script não precisa ser gravável "porque é um arquivo de texto". Se houver, provavelmente deve ter apenas a mesma permissão que os outros executáveis no mesmo diretório.
Não altere as permissões de tudo agora! Isso pode causar todos os tipos de estragos e potencialmente confundir os gerenciadores de pacotes que podem verificar se as permissões estão definidas corretamente. Também pode tornar o sistema vulnerável se você alterar acidentalmente as permissões da maneira errada em um aplicativo crítico de segurança.
Apenas suponha que as permissões nos executáveis estejam definidas corretamente, a menos que você encontre algo realmente estranho; nesse caso, você provavelmente deve entrar em contato com o mantenedor do pacote relevante para verificar em vez de começar a mudar as coisas.
A partir dos comentários e no bate-papo , houve um chamado para um pouco de história.
O histórico das permissões nos 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 base 1 com o modo de permissão 555 por padrão (
-r-xr-xr-x
). Isso é especificado em um fragmento Makefile no/usr/share/mk/bsd.own.mk
qual é definidoBINMODE
como 555 (a menos que já esteja definido). Isso é usado posteriormente ao instalar os executáveis durante omake build
in/usr/src
.Eu dei uma olhada no log do CVS anotado para esse arquivo e descobri que essa linha no arquivo não foi alterada desde que foi importada do NetBSD em 1995.
No NetBSD, o arquivo foi colocado no CVS pela primeira vez em 1993, com
BINMODE
555.O projeto FreeBSD parece ter usado exatamente o mesmo arquivo que o NetBSD desde pelo menos 1994 e, com uma confirmação posterior, adiciona uma dica na mensagem de confirmação de que os arquivos antigos eram da versão 4.4BSD da Berkeley Software Distribution.
Além disso, o CSRG em Berkeley manteve as fontes no SCCS, mas seu repositório está disponível no formato Git no GitHub 2 . O arquivo que estamos dando o tratamento forencial aqui parece ter sido cometido por Keith Bostic (ou alguém próximo dele) em 1990.
Então essa é a história. Se você quer o porquê , acho que teremos que perguntar a Keith. Eu meio que esperava ver uma mensagem de confirmação para uma alteração dizendo " isso precisa ser 555 porque ... ", mas não.
1 Os sistemas BSD possuem uma divisão mais rígida em "sistema base" e "pacotes de terceiros" (portas / pacotes) que o Linux. O sistema base é uma unidade coerente que fornece um conjunto completo de recursos para a execução do sistema operacional, enquanto as portas ou pacotes são vistos como "software local" e instalados em
/usr/local
.2 Um repositório GitHub mais abrangente de versões do Unix a partir dos anos 70 também está disponível .
fonte
root
.chmod -R
em/usr
ou/var
, e surpresa - o seusudo
não está funcionando ou outra coisa não está funcionando.