Eu quero dar acesso não sudo a um usuário não root na minha máquina, existe um usuário dns-manager, sua única função é executar todos os comandos BIND (rndc, dnssec-keygen) etc.
Agora, toda vez que ele precisa executar um comando, ele digita,
sudo rndc reload
Existe uma maneira de me livrar desse sudo, mas apenas em um conjunto específico de comandos (e apenas no dns-manager)?
sudo
serve. Quais são as suas objeções comerciais ao uso delesudo
para isso?sudo
. Quais são as objeções?sudo
, então? Ou sudo com senha para executar a ferramenta de gerenciamento de DNS , que pode operar comnamed
privilégios de grupo ou usuário ou privilégios de root, conforme necessário.sudo
. Ao tentar expressar isso para nós, ele pode esclarecer nossa confusão ou a dele - ou as duas!Respostas:
Se entendi corretamente os seus comentários, o problema aqui é que o comando será emitido por meio de uma conexão que não tem a capacidade de inserir a senha que o sudo usa como padrão para solicitação. Além disso, em muitas distribuições de SO, o sudo assumirá o padrão de exigir um TTY - que este programa pode não ter.
No entanto, o sudo pode ter uma estrutura de permissões muito refinada, possibilitando que um ou mais usuários emitam um comando específico sem senha e TTY. Abaixo, mostrarei três maneiras de configurar isso para suas necessidades. Qualquer que você escolher, o usuário poderá emitir o comando
sudo rndc reload
sem precisar digitar uma senha.(Além disso, este pode ser desnecessário, mas ... por favor, lembre-se de fazer uma cópia de backup de seu arquivo sudoers antes de editá-lo, para manter uma concha onde você está aberto raiz no caso de você precisar reverter para o backup, e para editar -lo usando
visudo
em vez desudo vi /etc/sudoers
. Esperemos que estas precauções será desnecessária, mas ... melhor tê-los e não precisa deles do que o inverso!)1. Se você não deseja solicitar um TTY para qualquer solicitação
A maneira mais fácil de se livrar dos requisitos TTY (se houver) é garantir que a linha que começa com
Defaults
in/etc/sudoers
não contenha a palavrarequiretty
- em vez disso, deve conter!requiretty
. No entanto, se você fizer isso, significa que nenhum comando sudo exigirá um tty!Você também precisará adicionar a linha
2. Se você deseja solicitar um TTY para todos os usuários, exceto este
Isso pode ser feito definindo um padrão para esse usuário, assim:
3. Se você deseja solicitar um TTY para todos os comandos, exceto este comando por este usuário
Isso é um pouco mais complexo, devido à sintaxe do arquivo sudoers. Você precisaria criar um alias de comando para o comando e, em seguida, definir um padrão para esse alias de comando, assim:
fonte
Sim. O sudo pode ser configurado de maneira muito flexível. Mesmo assim, devo mencionar: esses tipos de soluções não devem ser considerados muito seguros e devem ser usados apenas em um ambiente cooperativo em que outros controles estão em vigor (portanto, você pode conceder esses privilégios aprimorados ao seu subordinado fiel, mas não deve fazer isso para um cliente que você conhece apenas da rede).
A configuração do sudo está presente
/etc/sudoers
na maioria dos sistemas. Você pode descobrir sua sintaxe pesquisando no Google ou por umman sudo
comando.Você não deve editar este arquivo diretamente; isso pode levar a condições de corrida de segurança. Em vez disso, use o
visudo
comando (que é um invólucro em torno de sua$EDITOR
variável de ambiente).Depois de configurar o sudo, você pode facilmente envolvê-lo nos comandos visíveis. É muito simples:
/usr/local/dnsadmin/bin
)Crie um script de wrapper para os comandos que você deseja que eles usem sem o sudo. Será um comando muito simples, por exemplo,
/usr/local/dnsadmin/bin/rndc
será:#!/bin/bash exec /usr/bin/sudo /usr/sbin/rndc "$@"
Coloque esse diretório em sua
PATH
variável de ambiente (por exemplo, por um sistema ou local.profile
).fonte
exec
no script shell em vez de simplesmente chamar o comando diretamente? (Eu não estou dizendo que é errado, eu só gostaria de saber por que você faria isso para que eu possa talvez aprender algo)exec
, o comando chamado será substituído no lugar do shell. A concha vai embora. Sem um executivo, o shell iniciará esse comando, aguardará sua finalização e sairá. Este segundo, sem exec, significa vários processos de cooperação, desnecessários. Mas não há grande diferença, sem o executivo isso funcionaria tão bem quanto com isso.Embora essa não seja uma solução geral, no caso específico de
rndc
você não precisasudo
.rndc
pode se comunicar com qualquernamed
processo por meio de um soquete local ou de uma porta remota, usando uma chave secreta para se autenticar. Por padrão (ou pelo menos para o debian, que é a distribuição que eu uso), esse arquivo pode ser encontrado/etc/bind/rndc.key
e normalmente é legível apenas para usuáriosbind
e gruposbind
.Qualquer pessoa que tenha acesso de leitura a esse arquivo de chave (ou uma cópia idêntica dele) pode usar
rndc
para controlar o servidor BIND; portanto, a solução mais fácil nesse caso específico seria adicionar o usuário aobind
grupo.Um número surpreendente de daemons comuns tem algo semelhante configurado (eu pessoalmente ainda estou descobrindo as possibilidades de powerdns a esse respeito, mas parece promissor até agora). Se você não quiser fazer
sudo
isso, deverá verificar se o que deseja realizar é possível caso a caso.fonte
Você não deseja usar o sudo para conceder root a alguns comandos. Em vez disso, você pode chmod 4750 um programa específico [que pode agrupar o comando], para elevar os direitos de um usuário normal de executá-lo como root.
fonte