Os usuários conectados ao meu servidor Linux devem poder fazer ssh em uma máquina remota específica com uma conta padrão. A autenticação na máquina remota usa chave pública, portanto, no servidor, a chave privada correspondente está disponível.
Não quero que os usuários do servidor possam realmente ler a chave privada. Basicamente, o fato de terem acesso ao servidor lhes permite o direito ssh, e removê-los do servidor também deve impedir a conexão com a máquina remota.
Como posso permitir que os usuários abram uma conexão ssh sem dar a eles acesso de leitura à chave privada?
Minha opinião até agora: obviamente, o executável ssh deve ser capaz de ler a chave privada; portanto, ele deve ser executado sob outro usuário no servidor que possui esses direitos. Depois que a conexão ssh é estabelecida, eu posso "encaminhá-la" ao usuário para que ele possa digitar comandos e interagir com a máquina remota.
- Será esta uma boa abordagem?
- Como devo implementar o encaminhamento?
- Como o usuário pode iniciar a conexão (ou seja, a execução do ssh pelo usuário que possui direitos de leitura na chave)?
- Existe uma brecha na segurança? - se os usuários podem executar um ssh como outro usuário, eles podem fazer tudo o que outro usuário poderia (incluindo ler a chave privada)?
fonte
~/.ssh/authorized_keys
arquivo?Respostas:
Essa é uma das razões que
sudo
existe. Simplesmente permita que seus usuários executem um único comando com apenas as opções de linha de comando pré-autorizadas e as evasões mais óbvias são resolvidas. por exemploconfigura
sudo
para que todos os membros do grupousers
possam executar o comando ssh como usuário some_uid sem inserir sua própria senha (ou a da conta some_uid) ao executar:Remova a
NOPASSWD:
opção para forçar os usuários a inserir suas próprias senhas antes de efetuar login no host remoto.Possivelmente configure um script de alias ou wrapper como uma conveniência para seus usuários, pois
sudo
é bastante exigente quanto ao uso dos argumentos corretos.fonte
Esse parece ser um bom caso de uso para autenticação baseada em host. Este é um método de autenticação em que o SSH não usa a chave de um usuário individual na máquina local (neste caso, seu servidor) para autenticar; em vez disso, ele usa a chave privada do host , a
/etc/ssh/
que está armazenada e que é legível apenas porroot
.Para configurar isso, você precisará criar um arquivo nomeado
.shosts
na máquina remota, no diretório inicial do usuário no qual você deseja que as pessoas efetuem login (não no~/.ssh
). O arquivo deve ter o conteúdoonde
server-hostname
é o nome do seu servidor e+
é um sinal de mais literal que serve como um curinga que significa "qualquer usuário".Você também precisará garantir que a máquina remota possa verificar a chave do host do servidor, o que significa que a chave do host do servidor precisa estar listada na máquina remota
/etc/ssh/ssh_known_hosts
ou~/.ssh/known_hosts
na máquina. Se esse ainda não é o caso, você pode configurá-lo entrando na máquina remota e executandoDepois de configurar essas etapas, você poderá excluir completamente a chave privada do servidor, se não precisar dela para mais nada. (E se o fizer, você sempre pode configurá-lo para ser legível apenas por
root
algo assim.)Você também pode facilmente fazer coisas como permitir ou negar o acesso de certos usuários à máquina remota. Veja as páginas de manual
ssh
ehosts.equiv
para detalhes.Um problema com essa configuração é que os usuários que efetuam login na máquina remota podem modificar
.shosts
. Não há nada que eles possam fazer que lhes permita efetuar login na máquina remota como um usuário diferente, mas eles podem interromper o acesso deles ou de outras pessoas à máquina remota. Se isso for uma preocupação, você poderá tornar.shosts
apenas gravávelroot
ou algo assim - não tenho certeza se isso funciona, mas você pode tentar e ver. (Outros métodos como essesudo
são suscetíveis ao mesmo risco, pois um usuário sempre pode excluir~/.ssh/authorized_keys
.)fonte
sudo
opção poderia ser melhor para um ambiente bloqueado, embora ...