De vez em quando recebo o pedido estranho para fornecer suporte remoto, resolução de problemas e / ou ajuste de desempenho em sistemas Linux.
As grandes empresas geralmente já possuem procedimentos bem estabelecidos para fornecer acesso remoto a fornecedores / fornecedores e eu só preciso cumpri-los. (Para melhor ou para pior).
Por outro lado, as pequenas empresas e os indivíduos invariavelmente se voltam para mim para instruí-los com o que precisam fazer para me preparar. Normalmente, seus servidores estão diretamente conectados à Internet e as medidas de segurança existentes consistem nos padrões para qualquer que seja sua distribuição Linux.
Quase sempre preciso de acesso ao nível de raiz e quem quer que esteja configurando o acesso para mim não é um administrador de sistema especializado. Não quero a senha de root deles e também tenho certeza de que minhas ações não serão mal-intencionadas, mas que instruções razoavelmente simples eu devo dar para:
- configurar uma conta e trocar credenciais com segurança
- configurar o acesso root (sudo)
- restringir o acesso à minha conta
- fornecer trilha de auditoria
(E sim, estou ciente e sempre aviso a esses clientes que, uma vez que eu tenha acesso de administrador ocultando quaisquer ações maliciosas, isso é trivial, mas vamos supor que não tenho nada a esconder e participar ativamente na criação de uma trilha de auditoria).
What can be improved on the steps below?
Meu conjunto de instruções atual:
set up an account and securely exchange credentials
Eu forneço um hash de senha e peço que minha conta esteja configurada com essa senha criptografada. Por isso, não precisaremos transmitir uma senha de texto não criptografado, serei o único que sabe a senha e não comece com uma senha fraca previsível.
sudo useradd -p '$1$********' hbruijn
Eu forneço um SSH de chave pública (par de chaves específico por cliente) e peço 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
set up root (sudo) access
Peço ao cliente que configure o sudo para mim com sudo sudoedit
ou usando o editor favorito deles e acrescente /etc/sudoers
:
hbruijn ALL=(ALL) ALL
restrict access to my account
Normalmente, o cliente ainda permite logins baseados em senha e peço que eles adicionem as duas linhas seguintes a /etc/ssh/sshd_config
para pelo menos restringir minha conta apenas a chaves SSH:
Match user hbruijn
PasswordAuthentication no
Dependendo do cliente, rotearemos todo o meu acesso SSH através de um único host bastion 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 instância 10.80.0.0/14). O cliente pode precisar adicioná-los a uma lista de desbloqueio de firewall se o acesso SSH estiver restrito (na maioria das vezes o ssh não é filtrado).
Você já viu esses endereços IP como a restrição from=
no arquivo ~.ssh/authorized_keys
que limita os hosts dos quais minha chave pode ser usada para acessar seus sistemas.
provide audit trail
Até agora, nenhum cliente me pediu isso, e não fiz nada além do seguinte para cobrir minha bunda:
Eu tento usar sempre sudo
com comandos individuais e tento evitar o uso de sudo -i
ou sudo su -
. Eu tento não usar sudo vim /path/to/file
mas use sudoedit
.
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
Eu desisto principalmente de personalizar meus ambientes de trabalho, a única coisa que realmente faço é definir o seguinte no meu ~/.bash_profile
, aumentando o histórico do bash e incluindo os timestamps:
export HISTSIZE=99999999999
export HISTFILESIZE=99999999999
export HISTIGNORE="w:ls:ls -lart:dmesg:history:fg"
export HISTTIMEFORMAT='%F %H:%M:%S '
shopt -s histappend