Gostaria de ter a conta root em segurança, mesmo que meu usuário não privilegiado esteja comprometido.
No Ubuntu, você só pode usar o sudo por "razões de segurança" por padrão. No entanto, não tenho certeza de que seja mais seguro do que usar o login em um console em modo de texto. Há muitas coisas que podem dar errado se um invasor pode executar o código como meu usuário normal. Por exemplo, adicionando aliases, adicionando coisas ao meu PATH, configurando os keyloggers LD_PRELOAD e X11 apenas para mencionar alguns. A única vantagem que vejo é o tempo limite, para que nunca me esqueça de sair.
Eu tenho as mesmas dúvidas sobre su, mas ele nem tem limite de tempo. Algumas operações (especialmente o redirecionamento de E / S) são mais convenientes com su, mas em termos de segurança, isso parece ser pior.
O login em um console em modo de texto parece ser o mais seguro. Como é iniciado pelo init, se um invasor pode controlar PATH ou LD_PRELOAD, ele já é root. Os eventos de pressionamento de tecla não podem ser interceptados por programas em execução no X. Não sei se os programas em execução no X podem interceptar [ctrl] + [alt] + [f1] (e abrir uma janela de tela cheia que se parece com um console) ou é seguro como [ctrl] + [alt] + [del] no Windows. Além disso, o único problema que vejo é a falta de tempo limite.
Então, estou perdendo alguma coisa? Por que os caras do Ubuntu decidiram permitir apenas o sudo? O que posso fazer para melhorar a segurança de qualquer um dos métodos?
E o SSH? Tradicionalmente, o root não pode efetuar login através do SSH. Mas usar a lógica acima não seria a coisa mais segura a fazer:
- permitir root através do SSH
- mudar para o modo de texto
- faça login como root
- ssh para a outra máquina
- logar como root?
Respostas:
Segurança é sempre fazer trocas. Assim como o servidor proverbial que está em um local seguro e desconectado, no fundo do oceano,
root
seria mais seguro se não houvesse maneira de acessá-lo.Os ataques LD_PRELOAD e PATH como os que você descreve assumem que já existe um invasor com acesso à sua conta, ou pelo menos aos seus arquivos de ponto. O Sudo não protege muito bem disso - se eles tiverem sua senha, afinal, não há necessidade de tentar enganá-lo para mais tarde ... eles podem usar
sudo
agora .É importante considerar o que o Sudo foi projetado originalmente: delegação de comandos específicos (como aqueles para gerenciar impressoras) a "subadministradores" (talvez alunos de graduação em um laboratório) sem abrir mão da raiz completamente. Usar o sudo para fazer tudo é o uso mais comum que vejo agora, mas não é necessariamente o problema que o programa deveria solucionar (daí a sintaxe ridiculamente complicada do arquivo de configuração).
Mas, sudo-para-irrestrito-raiz faz abordar outro problema de segurança: gerenciamento de senhas de raiz. Em muitas organizações, elas tendem a ser repassadas como doces, escritas em quadros brancos e deixadas iguais para sempre. Isso deixa uma grande vulnerabilidade, pois revogar ou alterar o acesso se torna um grande número de produção. Mesmo controlar qual máquina tem qual senha é um desafio - quanto mais rastrear quem sabe qual.
Lembre-se de que a maioria dos "crimes cibernéticos" vem de dentro. Com a situação da senha root descrita, é difícil rastrear quem fez o quê - algo que o sudo com registro remoto lida muito bem.
No seu sistema doméstico, acho que é mais uma questão de conveniência de não ter que lembrar duas senhas. É provável que muitas pessoas simplesmente as definam como iguais - ou pior, as definem como iguais inicialmente e, em seguida, deixando-as fora de sincronia, deixando a senha de root apodrecer.
O uso de senhas em tudo para SSH é perigoso, uma vez por senha sniffing daemons ssh cavalo de Tróia são postas em prática em algo como 90% dos compromissos do sistema do mundo real que eu vi. É muito melhor usar chaves SSH, e esse também pode ser um sistema viável para acesso remoto à raiz.
Mas o problema agora é que você passou do gerenciamento de senhas para o gerenciamento de chaves, e as chaves ssh não são realmente muito gerenciáveis. Não há como restringir cópias, e se alguém fizer uma cópia, ele terá todas as tentativas que deseja para forçar a senha com força bruta. Você pode fazer uma política dizendo que as chaves devem ser armazenadas em dispositivos removíveis e montadas apenas quando necessário, mas não há como impor isso - e agora você introduziu a possibilidade de um dispositivo removível ser perdido ou roubado.
A segurança mais alta será obtida através de chaves únicas ou tokens criptográficos baseados em tempo / contador. Isso pode ser feito em software, mas o hardware resistente a violações é ainda melhor. No mundo do código aberto, há WiKiD , YubiKey ou LinOTP e, claro, também há o RSA SecurID proprietário pesado . Se você estiver em uma organização de médio a grande porte, ou mesmo em uma pequena organização preocupada com a segurança, recomendo analisar uma dessas abordagens para obter acesso administrativo.
Provavelmente, é um exagero em casa, onde você realmente não tem problemas de gerenciamento - desde que siga práticas de segurança sensatas.
fonte
sudo
é muito semelhante ao Controle de Conta de Usuário no Windows Vista. Na verdade, ambos foram projetados para não aumentar a segurança, mas para facilitar a redução de maneira controlada. Mas como eles facilitam a elevação temporária de seus privilégios de maneira menos atrativa, você não precisa executar privilégios elevados por longos períodos de tempo, aumentando a segurança. (Esta não foi tão grande de um problema em Unix, mas no Windows Lembro-me de correr como administrador durante dias a fio, só porque a mudança foi tão dolorosa.)root
senhas da sua empresa também são mencionadas como o item final no Boletim de operações , que vale a pena ler.Esta é uma pergunta muito complexa. O mattdm já cobriu muitos pontos .
Entre su e sudo, quando você considera um único usuário, su é um pouco mais seguro, pois um invasor que encontrou sua senha não pode obter privilégios de root imediatamente. Mas basta que o invasor encontre um furo raiz local (relativamente incomum) ou instale um trojan e aguarde a execução do su.
O Sudo tem vantagens mesmo em relação ao login no console quando há vários usuários. Por exemplo, se um sistema estiver configurado com logs remotos à prova de violações, você sempre poderá descobrir quem executou o sudo pela última vez (ou cuja conta foi comprometida), mas não sabe quem digitou a senha raiz no console.
Suspeito que a decisão do Ubuntu tenha em parte o interesse pela simplicidade (apenas uma senha para lembrar) e o interesse pela segurança e facilidade de distribuição de credenciais em máquinas compartilhadas (empresa ou família).
O Linux não possui uma chave de atenção segura ou outra interface de usuário segura para autenticação. Até onde eu sei, nem o OpenBSD possui. Se você está preocupado com o acesso root, pode desabilitar completamente o acesso root de um sistema em execução: se você deseja ser root, precisará digitar algo no prompt do gerenciador de inicialização. Obviamente, isso não é adequado para todos os casos de uso. (* O nível de segurança do BSD funciona assim: em um nível de segurança alto, há coisas que você não pode fazer sem reiniciar, como diminuir o nível de segurança ou acessar diretamente os dispositivos brutos montados.)
Restringir as maneiras pelas quais alguém pode se tornar root nem sempre é um ganho de segurança. Lembre-se do terceiro membro da tríade de segurança : confidencialidade , integridade , disponibilidade . O bloqueio do sistema pode impedir que você responda a um incidente.
fonte
Os projetistas da distribuição segura OpenWall GNU / * / Linux também expressaram opiniões críticas sobre
su
(para se tornar root) esudo
. Você pode estar interessado em ler este tópico:... infelizmente, su e sudo são sutil mas fundamentalmente falhos.
Além de discutir as falhas
su
e outras coisas, o Solar Designer também visa um motivo específico para o usosu
:Em sua distribuição, eles "se livraram completamente dos programas raiz SUID na instalação padrão" (ou seja, incluindo
su
; e não usam recursos para isso):BTW, eles foram substituídos
sulogin
pormsulogin
para permitir a configuração com várias contas raiz:msulogin
permite digitar o nome do usuário também ao entrar no modo de usuário único (e preservar a "responsabilidade") (essa informação vem desta discussão em russo ) .fonte
Você parece estar assumindo que o uso
sudo
sempre preserva variáveis de ambiente, mas esse nem sempre é o caso. Aqui está um trecho da página de manual do sudo:Portanto, se
env_reset
estiver ativado (o padrão), um invasor não poderá substituir suasPATH
ou outras variáveis de ambiente (a menos que você as adicione especificamente a uma lista de permissões de variáveis que devem ser preservadas).fonte
Password:
não exibe nada quando digito, envia o que eu digitei para ele, diz que a senha está errada e depois executa o sudo real.alias /usr/bin/sudo="echo pwned"
Além disso, existem vários programas envolvidos (X, xterm, o shell), qualquer um dos quais pode roubar a senha. Foi por isso que disse que há muitos problemas com a troca com segurança.bash: alias: `/usr/bin/sudo': invalid alias name
A abordagem mais segura é o login ssh usando (pelo menos) chave longa 2048 (com o login com senha desativado) usando um dispositivo físico para armazenar a chave.
fonte
Eu só quero adicionar algo um pouco fora do tópico. (para o tópico, marque '/ bin / su -' aqui depois)
Eu acho que a "segurança" acima também deve estar vinculada aos dados reais que queremos proteger.
Será e deve ser diferente se quisermos proteger: meus_dados, minha_dadosempresa, minha_empresa.
Normalmente, se eu falo de segurança, também falo de "segurança de dados" e backup. Também podemos adicionar sistemas tolerantes a falhas e similares.
Diante disso, acho que a segurança como um todo é um equilíbrio entre a usabilidade, a "segurança de dados" e o esforço necessário para implementar um sistema seguro.
O alvo do Ubuntu era, e ainda é, o usuário final: Sudo é o padrão.
O Fedora é a versão gratuita do RedHat, que por sua vez é mais orientada a servidores: o Sudo costumava ser desativado.
Para as outras distribuições, não tenho informações diretas.
Estou usando agora, principalmente, o fedora. E como um usuário de estilo antigo, nunca digitei 'su'. Mas posso digitar "/ bin / su -" em muito pouco tempo, mesmo que eu não seja exatamente um datilógrafo. A variável PATH .. não deve ser um problema (eu digito o caminho). Além disso, o "-" (menos) em princípio deve remover minhas variáveis de ambiente do usuário e carregar apenas as raiz. isto é, evitando alguns problemas extras possíveis. Provavelmente também o LS_PRELOAD.
De resto, acho que o @mattdm foi bastante preciso.
Mas vamos colocá-lo na caixa correta. Suponha que um kit inteligente de script tenha acesso aos meus dados. O que diabos você acha que ele vai fazer com isso? - Publicar minhas fotos? meu? - Tentando descobrir o nome da minha namorada e dizer a ela que eu visito sites pornográficos?
Na imagem de usuário único, as duas piores situações são: - O garoto exclui todos os meus dados: por diversão ou por engano - O garoto usa minha máquina para criar um novo ataque a alguma outra entidade. Ou alvos semelhantes.
Para o primeiro caso, mencionei acima, colocando mais esforços em um backup do que na segurança da rede. Sim, você está salvo. Quero dizer, uma falha de hardware não é tão diferente.
O segundo caso é mais sutil. Mas há sinais sobre essas atividades. De qualquer forma, você pode fazer o possível, mas eu não configuraria meu PC doméstico para ser protegido contra ataques terroristas!
Vou pular os outros cenários.
Saúde F
fonte
Se a preocupação for que uma conta de usuário comprometida possa ser usada para detectar a senha usada para
sudo
ousu
, use uma senha única parasudo
esu
.Você pode forçar o uso de chaves para usuários remotos, mas isso pode não ser aprovado para fins de conformidade. Pode ser mais eficaz configurar uma caixa de gateway SSH que exija autenticação de dois fatores e permitir o uso de chaves a partir daí. Aqui está o documento sobre essa configuração: Proteja sua implantação SSH com a autenticação de dois fatores do WiKID .
fonte
Você também pode dar uma olhada no privacyIDEA , que não apenas fornece a possibilidade de usar o OTP para fazer login na máquina (ou para executar o su / sudo), mas também pode fazer o OTP offline.
Além disso, é capaz de gerenciar suas chaves SSH. Ou seja, se você tem muitas máquinas e vários usuários root, todas as chaves SSH são armazenadas centralmente. Portanto, é fácil "revogar" / excluir uma chave SSH, se a chave não puder mais ser confiável.
Obviamente, existem tarefas e fluxos de trabalho organizacionais para proteger o sistema.
fonte