De vez em quando, recebo uma solicitação estranha para fornecer suporte remoto, solução de problemas e / ou ajuste de desempenho em sistemas Linux.
As empresas maiores geralmente já possuem procedimentos bem estabelecidos para fornecer acesso remoto a vendedores / fornecedores, e eu só preciso cumpri-los. (Por bem ou por mal.)
Por outro lado, pequenas empresas e indivíduos invariavelmente recorrem a mim para instruí-los com o que precisam fazer para me constituir. Normalmente, seus servidores estão conectados diretamente à Internet e as medidas de segurança existentes consistem nos padrões de qualquer distribuição Linux.
Quase sempre, precisarei de acesso no nível raiz e quem quer que esteja configurando o acesso para mim não é um administrador de sistemas especializado. Não quero a senha de root e também tenho certeza de que minhas ações não serão maliciosas, mas que instruções razoavelmente simples devo dar para:
- configurar uma conta e trocar credenciais com segurança
- configurar acesso root (sudo)
- restringir o acesso à minha conta
- fornecer trilha de auditoria
(E sim, eu estou ciente e sempre aviso aos clientes que, uma vez que eu tenha acesso de administrador, ocultar qualquer ação maliciosa é trivial, mas vamos supor que não tenho nada a esconder e participar ativamente da criação de uma trilha de auditoria.)
O que pode ser melhorado nas etapas abaixo?
Meu conjunto de instruções atual:
configurar uma conta e trocar credenciais com segurança
Eu forneço um hash de senha e solicito que minha conta esteja configurada com essa senha criptografada, para que não precisemos transmitir uma senha de texto não criptografado, serei o único que conhece a senha e não começamos com uma senha fraca previsível.
sudo useradd -p '$1$********' hbruijn
Eu forneço uma chave pública SSH (par de chaves específico por cliente) e solicito que eles configurem minha conta com essa chave:
sudo su - hbruijn
mkdir -p ~/.ssh
chmod 0700 ~/.ssh
echo 'from="10.80.0.0/14,192.168.1.2" ssh-rsa AAAAB3NzaC1y***...***== hbruijn@serverfault' >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
configurar acesso root (sudo)
Peço ao cliente que configure o sudo para mim com sudo sudoedit
ou usando seu editor favorito e acrescente a /etc/sudoers
:
hbruijn ALL=(ALL) ALL
restringir o acesso à minha conta
Normalmente, o cliente ainda permite logins com base em senha e peço que eles adicionem as duas linhas a seguir /etc/ssh/sshd_config
para pelo menos restringir minha conta apenas às chaves SSH:
Match user hbruijn
PasswordAuthentication no
Dependendo do cliente, roteará todo o meu acesso SSH através de um único host bastião para sempre fornecer um único endereço IP estático (por exemplo, 192.168.1.2) e / ou fornecer o intervalo de endereços IP que meu ISP usa (por exemplo, 10.80. 0,0 / 14). O cliente pode precisar adicioná-los a uma lista de desbloqueio de firewall se o acesso SSH for restrito (o ssh, na maioria das vezes, não é filtrado).
Você já viu esses endereços IP como a from=
restrição no ~.ssh/authorized_keys
arquivo que limita os hosts a partir dos quais minha chave pode ser usada para acessar seus sistemas.
fornecer trilha de auditoria
Até agora, nenhum cliente me pediu isso, e eu não fiz nada específico além do seguinte para cobrir minha bunda:
Eu tento usar consistentemente sudo
com comandos individuais e tento impedir o uso de sudo -i
ou sudo su -
. Eu tento não usar, sudo vim /path/to/file
mas em sudoedit
vez disso.
Por padrão, todas as ações privilegiadas serão registradas no syslog (e /var/log/secure
):
Sep 26 11:00:03 hostname sudo: hbruijn : TTY=pts/0 ; PWD=/home/hbruijn ; USER=jboss ; COMMAND=sudoedit /usr/share/jbossas/domain/configuration/domain.xml
Sep 26 11:00:34 hostname sudo: hbruijn : TTY=pts/0 ; PWD=/home/hbruijn ; USER=root ; COMMAND=/usr/bin/tail -n 5 /var/log/messages
Na maioria das vezes, desisto de personalizar meus ambientes de trabalho, a única coisa que realmente faço é definir o seguinte no ~/.bash_profile
aumento do histórico do bash e incluir carimbos de data / hora:
export HISTSIZE=99999999999
export HISTFILESIZE=99999999999
export HISTIGNORE="w:ls:ls -lart:dmesg:history:fg"
export HISTTIMEFORMAT='%F %H:%M:%S '
shopt -s histappend
screen
, portanto, em casos extremos, seu cliente pode assistir ao vivo o que você está fazendo.