Temos imagens Linux baseadas em RH; no qual tenho que "aplicar" alguns "arquivos especiais" para atualizá-los para a versão de desenvolvimento mais recente do nosso produto.
A pessoa que criou o arquivo concluiu que dentro da nossa imagem de base, algumas permissões estão erradas; então nos disseram para correr
sudo chgrp -R nobody /whatever
Nós fizemos isso; e mais tarde, quando nosso aplicativo está sendo executado, surgiram problemas obscuros.
O que eu achei mais tarde: a chamada para chgrp irá limpar as informações bit setuid em nossos binários dentro / whatever.
E o problema real é: alguns de nossos binários devem ter esse bit setuid definido para funcionar corretamente.
Para encurtar a história: existe uma maneira de executar esse comando "chgrp" sem matar meus bits setuid?
Eu apenas executei o seguinte no meu Ubuntu local; levando ao mesmo resultado:
mkdir sticky
cd sticky/
touch blub
chmod 4755 blub
ls -al blub
-> mostra o nome do arquivo com fundo vermelho -> sim, sim, setuid
chgrp -R myuser .
ls -al blub
-> mostra o nome do arquivo sem fundo vermelho -> setuid desapareceu
4XXX
bit é chamado bit setuid (s
), não pegajoso. Pegajosa é ot
bit e seu objetivo é um pouco diferente: en.wikipedia.org/wiki/Sticky_bitsetuid
bit, não osticky
bit. (2) Não limpar osetuid
bit quando você fazchgrp
ouchown
seria um problema de segurança.Respostas:
Se você deseja implementar seu
chgrp -R nobody /whatever
enquanto retém o bit setuid, pode usar estes doisfind
comandosA
find ... -perm 04000
opção seleciona arquivos com o conjunto de bits setuid. O primeiro comando aplica oe, emchgrp
seguida, achmod
para restabelecer o bit setuid que foi eliminado. O segundo se aplicachgrp
a todos os arquivos que não possuem um bit setuid.De qualquer forma, você não deseja chamar
chgrp
ouchmod
usar links simbólicos, pois isso afetaria seus destinos, daí o! -type l
.fonte
chgrp
também limpa o bit setgid (e os recursos no Linux) que também podem precisar ser restaurados.find
find
chamada. Eu não gosto das longas linhas no SE quando você precisa rolar o texto. Minha adição do! tipo eu fiz isso ultrapassar os limitesfind
abordagem-exec +
confiável se isso acabar dividindo ochmod
/chgrp
s em várias invocações.find . ! -type l -exec chgrp nobody {} + \( -perms -6000 -exec chmod gu+s {} + -o -perms -4000 -exec chmod u+s {} + -o -perms -2000 -exec chmod g+s {} + \)
deve ficar bem. Como aschgrp
correspondências para mais arquivos, para cada arquivo, devem ser feitas antes doschmod
.A limpeza de bits SUID e SGID em
chgrp
(ouchown
) é perfeitamente razoável. É uma medida de segurança para evitar problemas de segurança. Para SGID (em executáveis, eu presumo) significa executar este programa com um grupo efetivo do proprietário do grupo .Se você alterar o proprietário do grupo, em termos de segurança e controle de acesso, isso é algo completamente diferente, ou seja, em vez de executar com o grupo efetivo,
uvw
o programa agora será executado com o grupo efetivoxyz
.Portanto, você deve restaurar o bit SUID ou SGID explicitamente na mudança de propriedade.
Adendo: sob a alegação de que chgrp (ou chown) deve apenas limpar o SGID (ou SUID, resp.)
Ao
chown
ing ouchgrp
ing, você altera a configuração de segurança de um executável, e esse é um motivo suficiente para limpar quaisquer atributos de elevação de privilégio. O poder do Unix vem da simplicidade conceitual, e a segurança do Unix já é bastante complicada. Para esse fim, remover o SUID e o SGID em qualquer mudança de propriedade é simplesmente uma rede de segurança - afinal, na história do Unix / Linux, havia algumas vulnerabilidades devido a configurações equivocadas de SUID ou SGID.Portanto, não há uma razão mais profunda pela qual o Unix se comporte dessa maneira, é apenas uma decisão de design conservadora.
fonte
uvw
o programa agora seja executado com grupo efetivoxyz
", mas isso não se aplica ao caso em discussão.chown
ouchgrp
alterar a configuração de segurança, esse é um motivo suficiente para limpar os atributos de elevação de privilégio. Há grandes chances de que isso atinja os incautos.A limpeza do bit
setuid
,setgid
(pelo menos no Linux) em não-diretórios é feita pelo kernel nachown()
chamada do sistema feita porchgrp
, não porchgrp
si só. Portanto, a única maneira é restaurá-lo posteriormente.Ele também limpa os recursos de segurança.
Então, no GNU Linux:
E execute (as
root
):para alterar o grupo enquanto tenta preservar as permissões.
Recursivamente, você pode fazer:
(tudo isso assumindo que nada está atrapalhando os arquivos ao mesmo tempo).
fonte
Como de costume na administração, existem muitos caminhos a percorrer.
A solução que eu coloquei foi assim:
fonte