Com relação à terceira estratégia sugerida, além da leitura das opções useradd -o -u userXXX
como recomendado por @jlliagre, não estou familiarizado com a execução de vários usuários como o mesmo uid. (portanto, se você prosseguir com isso, eu estaria interessado se você pudesse atualizar o post com quaisquer problemas (ou sucessos) que surgissem ...)
Acho que minha primeira observação sobre a primeira opção "A chave pública SSH de todo mundo é colocada em ~ root / .ssh / authorized_keys2", é que a menos que você absolutamente nunca vá trabalhar em nenhum outro sistema;
-
então pelo menos parte do tempo , você terá que trabalhar com
contas de usuário e
sudo
A segunda observação seria que, se você trabalha em sistemas que aspiram à HIPAA, à conformidade com o PCI-DSS ou a coisas como o CAPP e o EAL, você terá que contornar os problemas do sudo porque:
-
É um padrão da indústria para fornecer contas de usuário individuais não-raiz, que podem ser auditadas, desativadas, expiradas, etc., geralmente usando algum banco de dados de usuário centralizado.
Então; Uso de contas personalizadas e sudo
É lamentável que, como um administrador de sistemas, quase tudo que você precisa fazer em uma máquina remota exija algumas permissões elevadas, mas é irritante que a maioria das ferramentas e utilitários baseados em SSH sejam eliminados enquanto você está em sudo
Por isso, posso passar alguns truques que utilizo para resolver os problemas de sudo
que mencionou. O primeiro problema é que, se o login root for bloqueado usando PermitRootLogin=no
ou se você não tiver a raiz usando a chave ssh, isso fará com que os arquivos SCP sejam um pouco PITA.
Problema 1 : Você deseja scp arquivos do lado remoto, mas eles exigem acesso root, no entanto, você não pode acessar a caixa remota como root diretamente.
Solução de perfuração : copie os arquivos para o diretório home, chown e scp para baixo.
ssh userXXX@remotesystem
, sudo su -
etc, cp /etc/somefiles
a /home/userXXX/somefiles
, chown -R userXXX /home/userXXX/somefiles
, use o scp para recuperar arquivos remotos.
Muito chato mesmo.
Solução menos enfadonha : o sftp suporta o sinalizador -s sftp_server
, portanto você pode fazer algo como o seguinte (se você configurou o sudo sem senha em /etc/sudoers
);
sftp -s '/usr/bin/sudo /usr/libexec/openssh/sftp-server' \
userXXX@remotehost:/etc/resolv.conf
(você também pode usar este hack-around com o sshfs, mas não tenho certeza se é recomendado ...; -)
Se você não tem direitos sudo sem senha, ou por algum motivo configurado que o método acima está quebrado, posso sugerir um método de transferência de arquivos mais chato, para acessar arquivos raiz remotos.
Método Ninja de Encaminhamento de Portas :
Faça login no host remoto, mas especifique que a porta remota 3022 (pode ser qualquer coisa livre e não reservada para administradores, por exemplo, > 1024) deve ser encaminhada de volta para a porta 22 no lado local.
[localuser@localmachine ~]$ ssh userXXX@remotehost -R 3022:localhost:22
Last login: Mon May 21 05:46:07 2012 from 123.123.123.123
------------------------------------------------------------------------
This is a private system; blah blah blah
------------------------------------------------------------------------
Obtenha root da maneira normal ...
-bash-3.2$ sudo su -
[root@remotehost ~]#
Agora você pode scp os arquivos na outra direção, evitando o chato passo chato de fazer uma cópia intermediária dos arquivos;
[root@remotehost ~]# scp -o NoHostAuthenticationForLocalhost=yes \
-P3022 /etc/resolv.conf localuser@localhost:~
localuser@localhost's password:
resolv.conf 100%
[root@remotehost ~]#
Problema 2: encaminhamento de agentes SSH : se você carregar o perfil raiz, por exemplo, especificando um shell de login, as variáveis de ambiente necessárias para o encaminhamento do agente SSH, como SSH_AUTH_SOCK
, são reconfiguradas, portanto, o encaminhamento do agente SSH é "quebrado" em sudo su -
.
Resposta parcialmente preparada :
Qualquer coisa que carregue corretamente um shell de root, irá restabelecer corretamente o ambiente, no entanto, há um pequeno trabalho que você pode usar quando precisar de ambas as permissões de root E a habilidade de usar o Agente SSH, AO MESMO TEMPO
Isso alcança um tipo de perfil quimera, que realmente não deve ser usado, porque é um hack desagradável , mas é útil quando você precisa de arquivos SCP do host remoto como root, para alguns outro host remoto.
De qualquer forma, você pode permitir que seu usuário possa preservar suas variáveis ENV, definindo o seguinte em sudoers;
Defaults:userXXX !env_reset
isso permite que você crie ambientes de login híbridos desagradáveis como assim;
faça o login como normal;
[localuser@localmachine ~]$ ssh userXXX@remotehost
Last login: Mon May 21 12:33:12 2012 from 123.123.123.123
------------------------------------------------------------------------
This is a private system; blah blah blah
------------------------------------------------------------------------
-bash-3.2$ env | grep SSH_AUTH
SSH_AUTH_SOCK=/tmp/ssh-qwO715/agent.1971
crie um shell bash que execute /root/.profile
e /root/.bashrc
. mas preserva SSH_AUTH_SOCK
-bash-3.2$ sudo -E bash -l
Portanto, este shell tem permissões de root e root $PATH
(mas um diretório inicial borked ...)
bash-3.2# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=user_u:system_r:unconfined_t
bash-3.2# echo $PATH
/usr/kerberos/sbin:/usr/local/sbin:/usr/sbin:/sbin:/home/xtrabm/xtrabackup-manager:/usr/kerberos/bin:/opt/admin/bin:/usr/local/bin:/bin:/usr/bin:/opt/mx/bin
Mas você pode usar essa invocação para fazer coisas que exigem raiz sudo remota, mas também o acesso do agente SSH assim;
bash-3.2# scp /root/.ssh/authorized_keys ssh-agent-user@some-other-remote-host:~
/root/.ssh/authorized_keys 100% 126 0.1KB/s 00:00
bash-3.2#