Dois programas setuid /usr/bin/bar
e /usr/bin/baz
compartilham um único arquivo de configuração foo
. O modo do arquivo de configuração é 0640
, pois contém informações confidenciais. O único programa é executado como bar:bar
(ou seja, como barra de usuário , barra de grupo ); o outro como baz:baz
. Alterar usuários não é uma opção, e mesmo alterar grupos não seria preferível.
Desejo vincular o arquivo de configuração único como /etc/bar/foo
e /etc/baz/foo
. No entanto, isso falha porque o arquivo deve, tanto quanto eu saiba, pertencer a root:bar
ou a root:baz
.
Solução potencial: crie um novo grupo barbaz
cujos membros sejam bar
e baz
. Deixe foo
pertencer a root:barbaz
.
Isso me parece uma solução bastante pesada. Não existe uma maneira mais simples e simples de compartilhar o arquivo de configuração foo
entre os dois programas?
Por enquanto, estou mantendo duas cópias idênticas do arquivo. Isso funciona, mas está obviamente errado. O que seria certo?
Para informações: Tenho pouca experiência com grupos Unix e nenhuma com setgid (2).
ssl-cert
grupo é o grupo, que é praticamente o seubarbaz
grupo. O padrão é definir todas as chaves privadas que pertencem aossl-cert
grupo e colocar os UIDs associados aos programas que precisam acessá-los nesse grupo.ssl-cert
cujo script postinst, na instalação, cria o grupo do qual você fala. Eu não sabiassl-cert
. O Apache2 (instalado no meu host) recomendassl-cert
. Os vários pacotes Exim e Dovecot não, mas Postfix (não instalado no meu host) depende emssl-cert
. Devido ao Apache, meu host tem um grupo ssl-cert , mas esse grupo ainda não tem membros. Obrigado pelo conselho.Respostas:
Você pode usar ACLs para que o arquivo possa ser lido por pessoas nos dois grupos.
Agora, ambos
bar
ebaz
grupos podem ler o arquivo.Por exemplo, aqui está um arquivo de propriedade de bin: bin com o modo 640.
O
+
meio é que existe um conjunto de ACL, então vamos dar uma olhada nele.Podemos ver a linha
group:sweh:r--
: isso significa que as pessoas do gruposweh
podem lê-la.Ei, sou eu!
E sim, eu posso ler o arquivo.
fonte
Você pode reconsiderar estas declarações:
Por que é difícil criar um novo grupo? Fazer isso tem as seguintes vantagens sobre as ACLs:
/usr/bin/bar
e/usr/bin/baz
, é relevante que esses dois programas possam compartilhar um arquivo de configuração. Isso sugere que os programas estão naturalmente relacionados. Criar um novo grupo para eles parece descrever um relacionamento que realmente existe e deve desencadear um comportamento (como permissões para ler o arquivo de configuração comum).Pessoalmente, vejo as ACLs como a solução mais pesada aqui e os grupos como a maneira mais simples e tradicional do Unix.
fonte
Eu acho que esse seria um uso típico para as Listas de Controle de Acesso (ACLs). Adicione os dois usuários (ou grupos) à ACL do arquivo de configuração:
Você pode ter que instalar o pacote acl primeiro.
fonte
Crie o modo do arquivo
0660
(ou mesmo0440
se a gravação não for necessária) e a propriedadebar:baz
. Em seguida, um processo pode acessar o arquivo graças às permissões do usuário, o outro graças às permissões do grupo. Isso funciona mesmo em sistemas de arquivos onde as ACLs não.fonte
A maneira "nova" "nuvem" é ter todas as configurações tratadas por um sistema de gerenciamento de configurações (como chef , fantoche ou ansible ). Não importa, então, que você tenha dois arquivos distintos, mas idênticos, no servidor, pois ambos são uma cópia do arquivo único do sistema de gerenciamento de configuração.
As principais vantagens de fazer isso dessa maneira é que sua configuração é versionada (juntamente com todo o restante) e que a implantação de um novo servidor idêntico ou quase idêntico se torna tão fácil que a ot pode ser automatizada.
(Para constar, como você não está usando o gerenciamento de configuração, eu usaria o sistema de grupo como na resposta de @ drg).
fonte