Preciso executar o backup de um servidor no meu computador usando o Duplicity:
duplicity /etc sftp://[email protected]//home/backup
Antes que isso possa ser feito, preciso permitir acesso sem senha, fazendo o seguinte:
$ ssh-keygen
$ ssh-copy-id [email protected]
$ ssh [email protected]
Minha pergunta é: como restringir o comando apenas a essa transferência SFTP na chave pública gerada?
command="restrict to sftp",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAA…
E como estou com um endereço IP dinâmico, como supero o problema de "host conhecido ausente" toda vez que meu IP é alterado?
ssh
sftp
key-authentication
account-restrictions
Pergunta Overflow
fonte
fonte
Respostas:
Existem 2 métodos para fazer isso.
1. - Restringindo através do sshd
Este método envolve a configuração do recurso SFTP no seu daemon SSH
sshd
,. Isso é controlado através do/etc/ssh/sshd_config
arquivo de configuração. OBSERVAÇÃO: Isso restringirá o usuário,backup
que só pode receber SFTP no servidor.2. - Restringindo por meio de teclas autorizadas
Este método não envolve nenhuma alteração no
sshd_config
arquivo. Você pode limitar um usuário + uma chave SSH a um único comando através docommand=
recurso que você já mencionou na sua pergunta. O truque está em qual comando você inclui. Você pode colocar o servidor SFTP nessacommand=
linha, que tem o mesmo efeito que configurar o servidor SFTP no seusshd_config
arquivo.NOTA: se o usuário tiver acesso de gravação
~/.ssh/authorized_keys
, ele poderá lê-lo e / ou modificá-lo. Por exemplo, eles poderiam baixá-lo, editá-lo e reenviá-lo, retirando o arquivocommmand=...
, concedendo-lhe acesso irrestrito ao comando, incluindo o shell. Se o usuário tiver acesso de gravação~/.ssh
, ele também poderá simplesmente desvincular e recriar o arquivo, ouchmod
ele para acesso de gravação. Existem muitas soluções possíveis, como guardar os~/.ssh/authorized_keys
arquivos em um local não gravável pelo usuário, como:Isso é mais complicado, mas possível usando o
from=
recurso dentro doauthorized_keys
arquivo também. Aqui estamos limitando o acesso apenas do hostsomehost.dyndns.org
,.As configurações adicionais após o
command=
são igualmente importantes, pois limitarão ainda mais o uso da chave SSH.discriminação de recursos
from='hostname1,hostname2,''
- Restringe o acesso dos padrões de IP ou nome de host especificadoscommand='command'
- Executa o comando especificado após a autenticaçãono-pty
- Não aloca um pty (não permite logon interativo)no-port-forwarding
- Não permite encaminhamento de portano-X11-forwarding
- o usuário não poderá remover as GUIs da tela X11no-agent-forwarding
- o usuário não poderá encaminhar esse host para outros hosts internosPara se livrar da mensagem sobre os "hosts conhecidos ausentes", você pode adicionar esta opção SSH ao cliente quando ele se conectar da seguinte maneira:
Consulte a página do manual
ssh_config
para obter detalhes completos sobre essa opção.Restringindo o shell do usuário
Para as duas soluções acima, você provavelmente desejará bloquear o
backup
usuário limitando também o shell do usuário no/etc/passwd
arquivo. Normalmente, você deseja defini-lo comoscponly
, mas há outras opções para isso também. Veja estas perguntas e respostas da U&L intituladas: " Você precisa de um shell para o SCP? " Para saber como fazer isso.O uso de
/sbin/nologin
também pode ser usado se você optar por usar o recurso chroot,sshd_config
conforme descrito no item 1 acima. No entanto, se você optar por usar o método descrito em # 2 , provavelmente precisará usarscponly
ou algo mais para o shell do usuário/etc/passwd
.BÔNUS - Estendendo o nº 2 acima
Se você precisar expor um conjunto de comandos para esse usuário, também poderá fazê-lo. Crie um script assim
/home/backup/commands.sh
:Você então configura o
authorized_keys
arquivo da seguinte maneira:O
backup
usuário pode então executar estes comandos da seguinte maneira:Referências
fonte
/sbin/nologin
impedirá que o servidor acesse o meu computador com SFTP. Isso eu tentei.known_hosts
arquivo ssh . Marki forneceu a solução correta em seu comentário. Ofrom
parâmetro noauthorized_keys
arquivo no meu computador C restringe apenas o local a partir do qual S pode conectar-se a C./sbin/nologin
funciona se eu usar o comando force eminternal-sftp
vez do/usr/libexec/openssh/sftp-server
que você especificou no certificado. Eu acho que esses são dois subsistemas diferentes. E criar um diretório chroot para o primeiro é muito mais direto.Shell restrito
Você precisa atribuir um shell restrito como scponly ou rssh.
Quando você usa scp ou sftp, está se conectando ao site remoto pelo ssh e, em seguida, o shell remoto executa um processo scp ou processo sftp. O que você precisa é de um shell restrito que permita apenas que scp ou sftp bloqueiem o login.
fonte