Em nossa equipe, temos três administradores de sistema Linux experientes que precisam administrar algumas dezenas de servidores Debian. Anteriormente, todos trabalhamos como root usando a autenticação de chave pública SSH. Mas discutimos qual é a melhor prática para esse cenário e não conseguimos concordar com nada.
A chave pública SSH de todos é colocada em ~ root / .ssh / allowed_keys2
- Vantagem: fácil de usar, o encaminhamento de agente SSH funciona com facilidade, pouca sobrecarga
- Desvantagem: falta de auditoria (você nunca sabe qual "raiz" fez uma alteração), os acidentes são mais prováveis
Usando contas personalizadas e sudo
Dessa forma, entraríamos em contas personalizadas usando chaves públicas SSH e usaríamos o sudo para executar tarefas únicas com permissões de root . Além disso, poderíamos nos dar o grupo "adm" que nos permite exibir arquivos de log.
- Vantagem: boa auditoria, o sudo nos impede de fazer coisas idiotas com muita facilidade
- Desvantagem: o encaminhamento do agente SSH é um aborrecimento, pois quase nada pode ser feito como não raiz
Usando vários usuários do UID 0
Esta é uma proposta muito exclusiva de um dos administradores de sistema. Ele sugere criar três usuários no / etc / passwd, todos com UID 0, mas com nomes de login diferentes. Ele afirma que isso não é realmente proibido e permite que todos sejam UID 0, mas ainda possam auditar.
- Vantagem: o encaminhamento de agente SSH funciona, a auditoria pode funcionar (não testada), sem problemas com o sudo
- Desvantagem: parece bastante sujo - não foi possível encontrá-lo documentado em nenhum lugar como uma maneira permitida
O que você sugeriria?
-o
bandeira nauseradd
página de manual. Este sinalizador existe para permitir que vários usuários compartilhem o mesmo uid.Respostas:
A segunda opção é a melhor IMHO. Contas pessoais, acesso sudo. Desative completamente o acesso root via SSH. Temos algumas centenas de servidores e meia dúzia de administradores de sistema, é assim que fazemos.
Como o encaminhamento do agente é interrompido exatamente?
Além disso, se for tão complicado usar
sudo
na frente de todas as tarefas, você poderá chamar um shell sudo comsudo -s
ou alternar para um shell raiz comsudo su -
fonte
sudo -s
. Estou correto ao entender quesudo -i
não há diferença em usarsu -
ou basicamente fazer login como root, além da entrada de log adicional em comparação com o login de raiz simples? Se isso for verdade, como e por que é melhor que o login root simples?Com relação à 3ª estratégia sugerida, além da leitura das
useradd -o -u userXXX
opções recomendadas por @jlliagre, não estou familiarizado com a execução de vários usuários com o mesmo uid. (portanto, se você continuar com isso, eu estaria interessado em atualizar a postagem com quaisquer problemas (ou sucessos) que surjam ...)Acho que minha primeira observação sobre a primeira opção "A chave pública SSH de todos é colocada em ~ root / .ssh / allowed_keys2", é que, a menos que você nunca trabalhe em outros sistemas;
sudo
A segunda observação seria que, se você trabalha em sistemas que aspiram a HIPAA, conformidade com PCI-DSS ou coisas como CAPP e EAL, terá que contornar as questões do sudo porque;
Tão; Usando contas personalizadas e sudo
É lamentável que, como administrador de sistemas, quase tudo que você precise fazer em uma máquina remota exija algumas permissões elevadas, no entanto, é irritante que a maioria das ferramentas e utilitários baseados em SSH sejam bloqueados enquanto você estiver
sudo
Por isso, posso passar alguns truques que uso para contornar os aborrecimentos
sudo
mencionados. O primeiro problema é que, se o login root for bloqueadoPermitRootLogin=no
ou se você não tiver a raiz usando a chave ssh, isso tornará os arquivos SCP uma espécie de PITA.Problema 1 : Você deseja scp arquivos do lado remoto, mas eles exigem acesso root, no entanto, você não pode efetuar login diretamente na caixa remota como root.
Solução chata : copie os arquivos para o diretório inicial, o chown e o scp.
ssh userXXX@remotesystem
,sudo su -
etc,cp /etc/somefiles
para/home/userXXX/somefiles
,chown -R userXXX /home/userXXX/somefiles
use scp para recuperar arquivos do controle remoto.Muito chato mesmo.
Solução menos chata : o sftp suporta o
-s sftp_server
sinalizador, portanto, você pode fazer algo como o seguinte (se você configurou o sudo sem senha/etc/sudoers
);(você também pode usar esse hack-around com sshfs, mas não tenho certeza se é recomendado ... ;-)
Se você não possui direitos sudo sem senha ou, por algum motivo configurado, o método acima está quebrado, posso sugerir mais um método de transferência de arquivos menos chato, para acessar arquivos raiz remotos.
Método Ninja de encaminhamento de porta :
Efetue login no host remoto, mas especifique que a porta remota 3022 (pode ser qualquer coisa livre e não reservada para administradores, ou seja,> 1024) deve ser encaminhada de volta para a porta 22 no lado local.
Faça root da maneira normal ...
Agora você pode scp os arquivos na outra direção, evitando a etapa chata de fazer uma cópia intermediária dos arquivos;
Problema 2: Encaminhamento de agente SSH : Se você carregar o perfil raiz, por exemplo, especificando um shell de logon, as variáveis de ambiente necessárias para o encaminhamento de agente SSH, como
SSH_AUTH_SOCK
são redefinidas, portanto, o encaminhamento do agente SSH é "quebrado"sudo su -
.Resposta meio assada :
Qualquer coisa que carregue corretamente um shell raiz, redefinirá o ambiente corretamente, no entanto, há uma pequena solução alternativa que você pode usar quando precisar de ambas as permissões de root E a capacidade de usar o Agente SSH, AO MESMO TEMPO
Isso atinge um tipo de perfil de quimera, que realmente não deve ser usado, porque é um hack desagradável , mas é útil quando você precisa SCP arquivos do host remoto como root, para algum outro host remoto.
De qualquer forma, você pode permitir que seu usuário preserve suas variáveis ENV, definindo o seguinte em sudoers;
isso permite que você crie ambientes de login híbridos desagradáveis como esse;
faça o login normalmente;
crie um shell bash, que execute
/root/.profile
e/root/.bashrc
. mas preservaSSH_AUTH_SOCK
Portanto, este shell tem permissões de root e root
$PATH
(mas um diretório inicial com borked ...)Mas você pode usar essa chamada para fazer coisas que exijam raiz sudo remota, mas também o acesso ao agente SSH assim;
fonte
A 3ª opção parece ideal - mas você realmente experimentou para ver o que está acontecendo? Embora você possa ver os nomes de usuário adicionais na etapa de autenticação, qualquer pesquisa inversa retornará o mesmo valor.
Permitir o acesso ssh direto à raiz é uma má ideia, mesmo que suas máquinas não estejam conectadas à Internet / usem senhas fortes.
Normalmente eu uso 'su' em vez de sudo para acesso root.
fonte
root
usuário se oroot
usuário for o primeiro/etc/passwd
com o UID 0. Eu costumo concordar com o jlliagre. A única desvantagem que vejo é que cada usuário é umroot
usuário e, às vezes, pode ser confuso entender quem fez o que.Eu uso (1), mas por acaso digitei
em um dia infeliz. Posso ver que é ruim o suficiente se você tiver mais do que alguns administradores.
(2) É provavelmente mais desenvolvido - e você pode se tornar um root completo através do sudo su -. Acidentes ainda são possíveis.
(3) Eu não tocaria com um poste de barcaça. Usei-o no Suns, para ter uma conta raiz não-barebone-sh (se bem me lembro), mas nunca foi robusta - além disso, duvido que seja muito auditável.
fonte
Definitivamente responda 2.
Significa que você está permitindo o acesso SSH como
root
. Se esta máquina estiver de alguma forma voltada para o público, essa é apenas uma péssima idéia; Quando eu executei o SSH na porta 22, meu VPS recebeu várias tentativas a cada hora para se autenticar como root. Eu tinha um IDS básico configurado para registrar e banir IPs que faziam várias tentativas com falha, mas eles continuavam chegando. Felizmente, eu havia desativado o acesso SSH como usuário raiz assim que tinha minha própria conta e sudo configurados. Além disso, você praticamente não tem trilha de auditoria fazendo isso.Fornece acesso root como e quando necessário. Sim, você quase não possui privilégios como usuário padrão, mas isso é exatamente o que você deseja; se uma conta for comprometida, você deseja que ela seja limitada em suas habilidades. Você deseja que qualquer acesso de superusuário exija uma reinserção de senha. Além disso, o acesso ao sudo pode ser controlado através de grupos de usuários e restrito a comandos específicos, se você desejar, oferecendo mais controle sobre quem tem acesso a quê. Além disso, os comandos executados como sudo podem ser registrados, portanto, fornece uma trilha de auditoria muito melhor se as coisas derem errado. Ah, e não apenas execute "sudo su -" assim que você fizer login. Essa é uma prática terrível.
A ideia do seu administrador de sistemas é ruim. E ele deveria se sentir mal. Não, as máquinas * nix provavelmente não impedirão você de fazer isso, mas o sistema de arquivos e praticamente todos os aplicativos esperam que cada usuário tenha um UID exclusivo. Se você começar a seguir esse caminho, posso garantir que você terá problemas. Talvez não imediatamente, mas eventualmente. Por exemplo, apesar de exibir bons nomes amigáveis, arquivos e diretórios usam números UID para designar seus proprietários; se você se deparar com um programa que tem um problema com UIDs duplicados no final da linha, não pode simplesmente alterar um UID no arquivo de senha mais tarde, sem ter que fazer uma limpeza manual séria no sistema de arquivos.
sudo
é o caminho a seguir. Isso pode causar problemas adicionais com a execução de comandos como root, mas fornece uma caixa mais segura, tanto em termos de acesso quanto de auditoria.fonte
Definitivamente, opção 2, mas use grupos para dar a cada usuário o máximo de controle possível, sem precisar usar o sudo. O sudo na frente de cada comando perde metade do benefício, porque você está sempre na zona de perigo. Se você tornar os diretórios relevantes graváveis pelos administradores de sistema sem o sudo, retornará o sudo à exceção que faz com que todos se sintam mais seguros.
fonte
Antigamente, o sudo não existia. Como conseqüência, ter vários usuários do UID 0 foi a única alternativa disponível. Mas ainda não é tão bom, principalmente com o log baseado no UID para obter o nome de usuário.
Atualmente, o sudo é a única solução apropriada. Esqueça qualquer outra coisa.
fonte
Está documentado permitido de fato. Os departamentos do BSD têm sua conta de usuário por um longo tempo e os usuários do bashroot tendem a ser uma prática aceita em sistemas onde o csh é padrão (má prática aceita;)
fonte
Talvez eu seja esquisito, mas o método (3) é o que me veio à mente primeiro também. Prós: você teria todos os nomes de usuários nos logs e saberia quem fez o que como root. Contras: cada um deles tem raízes o tempo todo, para que os erros possam ser catastróficos.
Gostaria de questionar por que todos os administradores precisam ter acesso root. Todos os três métodos que você propõe têm uma desvantagem distinta: uma vez que um administrador executa uma coisa
sudo bash -l
ou outrasudo su -
, você perde a capacidade de rastrear quem faz o que e depois disso, um erro pode ser catastrófico. Além disso, em caso de possível mau comportamento, isso pode acabar muito pior.Em vez disso, você pode querer considerar outro caminho:
Dessa forma, martin seria capaz de lidar com segurança com o postfix e, em caso de erro ou mau comportamento, você perderia apenas o sistema postfix, não o servidor inteiro.
A mesma lógica pode ser aplicada a qualquer outro subsistema, como apache, mysql, etc.
Obviamente, isso é puramente teórico neste momento e pode ser difícil de configurar. Parece uma maneira melhor de ir embora. Pelo menos para mim. Se alguém tentar isso, informe-me como foi.
fonte