
Estou administrando um servidor RedHat onde os usuários fazem login através de SSH com autenticação baseada em chave privada/pub.
Eu gostaria de evitar que eles alterem/excluam/modifiquem acidentalmente o conteúdo de seus~/.sshpastas. Alguns deles já modificaram recursivamente 777-chmode toda a sua própria pasta pessoal porque “era mais fácil compartilhar arquivos com colegas dessa maneira” e deram um tiro no próprio pé.
Alguma ideia de como posso conseguir isso? De preferência com sistema de permissão Linux padrão.
Responder1
A resposta curta é que você não pode.
O SSH é muito exigente quanto às permissões e não brinca com arquivos que não lhe agradam. Além disso, os usuários ssh_config
são analisadosantesa configuração de todo o sistema.
Dito isto, époderiaserá possível colocar os arquivos em outro lugar e montar o diretório como um sistema de arquivos somente leitura $HOME/.ssh
para cada usuário. (É possível - mas não sei como o ssh e as ferramentas associadas tratariam isso).
Alguns deles já modificaram recursivamente 777-chmoded toda a sua própria pasta pessoal
Então você tem problemas muito maiores de SEGURANÇA e treinamento.
Responder2
É difícil proteger os usuários de sua própria ignorância e incompetência.
Mas dependendo de quanto você precisa permitir que seus usuários gerenciem a si mesmos e quanto você gerencia para eles: você pode configurar o sshd para procurar chaves em um local alternativo fora de seu diretório inicial e em outro lugar que não seja ~/.ssh/authorized_keys
.
Comando de Chaves Autorizadas
Uma solução relativamente complexa é a/etc/ssh/sshd_config
AuthorizedKeysCommand
diretiva que, em vez de depender de arquivos autorizados_keys, especifica um programa a ser usado para pesquisar as chaves públicas do usuário, por exemplo:
um serviço web (trivial)
ou quando seus nomes de usuário são idênticos aos nomes de usuário do Github, você pode permitir que os usuários se autentiquem com os pares de chaves que eles carregaram lá:
AuthorizedKeysCommand /usr/bin/curl https://github.com/%u.keys
Como mencionado emesta resposta; você precisará criar uma política SELinux adequada para AuthorizedKeysCommand, pois ela será bloqueada pelas políticas padrão.
Adoro essa abordagem, pois ela pode resolver muitos problemas relacionados ao gerenciamento de chaves autorizadas: adiciona gerenciamento centralizado, elimina o problema do ovo e da galinha de obter chaves autorizadas para servidores quando você deseja desabilitar a autenticação de senha no ssh e muito mais.
Ele aproveita o fato de que as chaves públicas não são particularmente sensíveis (ao contrário das chaves privadas associadas), portanto centralizar seu gerenciamento não adiciona risco IMHO e provavelmente até melhora seus recursos de controle e relatórios.
Arquivo de chaves autorizadas
Um pouco menos complexo é armazenar chaves em um diretório fora de seu diretório inicial. Por exemplo, use /etc/ssh/<username>
(substituindo <username>
pelo nome de usuário real). Este diretório deve ter 755 permissões e pertencer ao usuário. Mova o authorized_keys
arquivo para ele. O arquivoauthorized_keys ainda deve ter permissões 644 e pertencer ao usuário.
Em/etc/ssh/sshd_config
ajusta aAuthorizedKeysFile
contexto
AuthorizedKeysFile /etc/ssh/%u/authorized_keys
E reinicie o daemon ssh
Responder3
A melhor solução que consigo pensar é criar .ssh
e authorized_keys
ser de propriedade do root.
.ssh/authorized_keys de propriedade da raiz
O SSH é exigente com permissões, mas não sem razão. Primeiro, requer que o próprio usuário tenha acesso de leitura authorized_keys
(o que requer acesso de leitura a todos os diretórios pai). Em segundo lugar, ele nega acesso se qualquer usuário que não seja o próprio usuário ou root tiver acesso de gravação a /home
, .ssh
ou authorized_keys
. Isso não permite o+w
e g+w
para um grupo que contém outros usuários.
Esta configuração funciona para mim, o usuário pode fazer login:
drwxr-xr-x 19 root root 4096 Sep 22 11:24 /
drwxr-xr-x 3 root root 4096 Sep 22 11:19 /home/
drwx------ 14 test test 4096 Sep 22 11:44 /home/test/
drwxr-x--- 2 root test 4096 Sep 22 11:42 /home/test/.ssh/
-rw-r--r-- 1 root test 98 Sep 22 11:36 /home/test/.ssh/authorized_keys
Como .ssh
e authorized_keys
são de propriedade do root, o usuário não pode alterar as permissões deles ou removê-los. Eles também não podem editar seu próprio authorized_keys
arquivo.
Se quiser permitir que o usuário edite seus arquivos authorized_keys
, você pode adicionar permissões de gravação em grupo. Isso requer que o test
grupo não tenha outros membros além test
dele mesmo:
-rw-rw-r-- 1 root test 99 Sep 22 12:04 /home/test/.ssh/authorized_keys
Com qualquer abordagem, o usuário não poderá mais criar seus próprios arquivos em .ssh
, portanto, você também pode fornecer alguns arquivos extras para eles. Alguns que vêm à mente são: known_hosts
, config
e id_rsa{.pub,}
/ou outros tipos de chave.
Alternativa: chattr
Alguns sistemas de arquivos Linux suportamatributos de arquivo, notadamente umbandeira imutável. Arquivos/diretórios com o sinalizador imutável definido não podem ser excluídos, modificados ou ter suas permissões alteradas. Somente o root pode definir/limpar este sinalizador.
Este comando resolveria o problema, mesmo com a propriedade/permissões padrão:
# chattr +i ~test/.ssh/{authorized_keys,}
Agora .ssh
e authorized_keys
não pode ser modificado de forma alguma, nem mesmo por root. Se o root precisar atualizar esses arquivos, você precisará deles chattr -i
primeiro. Use lsattr
para verificar atributos.
Essa abordagem é mais simples, mas menos flexível. Também precisa de suporte ao sistema de arquivos; Acredito que seja compatível com pelo menos ext2/3/4, XFS e btrfs.
ACLs Posix?
Há tambémACLs Posix(Listas de controle de acesso), que permitem um controle um pouco mais refinado. Não estou muito familiarizado com eles e não tenho certeza se eles ajudam aqui.
Modos Estritos
Observação:altamente desencorajado, mas previsto para ser completo.
O servidor OpenSSHtem uma diretiva de configuraçãochamado StrictModes
, que determina o quão exigente é o SSH com as permissões:
Especifica se o sshd deve verificar os modos de arquivo e a propriedade dos arquivos e do diretório inicial do usuário antes de aceitar o login. Isso normalmente é desejável porque os novatos às vezes deixam acidentalmente seus diretórios ou arquivos graváveis. O padrão é
yes
.
Se você desabilitar essa opção, terá mais liberdade para configurar propriedade e permissões. No entanto, o SSH é rigoroso por padrão por boas razões. Um usuário 777-chmodding em seus arquivos SSH é um risco à segurança.
Responder4
Execute um cron job para corrigir permissões todas as noites.
Excluir arquivos é um pouco mais difícil. Você também pode restaurar arquivos ausentes do backup do cron. Mas parece que você pode entrar em casos estranhos com isso ... pode precisar de mais inteligência do que um script pode fornecer. Eu começaria aos poucos e adicionaria recursos com cautela a uma função de restauração.