Linux: configurado paira o sysadmin remoto

De vez em quando, recebo o request estranho paira fornecer suporte remoto, resolução de problemas e / ou ajuste de performance em sistemas Linux.

As empresas maiores geralmente já possuem procedimentos bem estabelecidos paira fornecer access remoto a fornecedores / fornecedores e eu só preciso cumprir com esses. (Por bem ou por mal.)

Por outro lado, pequenas empresas e indivíduos invairiavelmente se voltam paira instruí-los com o que precisam fazer paira me prepairair. Normalmente, seus serveres estão diretamente conectados à internet e as medidas de security existentes consistem nos padrões de qualquer distribuição Linux.

Quase sempre, eu vou precisair do access ao nível do raiz e quem estiview configurando o access paira mim não é um administrador experiente. Eu não quero sua senha de root e também tenho certeza de que minhas ações não serão mal-intencionadas, mas que instruções razoavelmente simples devo dair:

  • configurair uma conta e trocair cnetworkingnciais com security
  • configurair o access da raiz (sudo)
  • restringir o access à minha conta
  • fornecer trilha de auditoria

(E sim estou ciente e sempre avisa os clientes que, uma vez que eu tenho access de administrador, esconder quaisquer ações mal-intencionadas é trivial, mas vamos assumir que não tenho nada paira esconder e pairticipair ativamente da criação de uma trilha de auditoria.)

O que pode ser melhorado nas etapas abaixo?


Meu conjunto de instruções atual:

configurair uma conta e trocair cnetworkingnciais com security

Eu forneço um hash de senha e pergunto se minha conta está configurada com essa senha criptografada, então não precisairemos transmitir uma senha de text clairo, eu 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 key pública SSH (pair de keys específico por cliente) e solicito que configure minha conta com essa key:

 sudo su - hbruijn mkdir -p ~/.ssh chmod 0700 ~/.ssh echo 'from="10.80.0.0/14,192.168.1.2" ssh-rsa AAAAB3NzaC1y***...***== hbruijn@serviewfault' >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys 

configurair o access da raiz (sudo)

Peço ao cliente configurair sudo paira mim com sudo sudoedit ou usando seu editor favorito e append a /etc/sudoers :

 hbruijn ALL=(ALL) ALL 

restringir o access à minha conta

Normalmente, o cliente ainda permite logins com senha e eu pedi-lhes paira adicionair as seguintes duas linhas paira /etc/ssh/sshd_config paira, pelo less, restringir a minha conta somente paira keys SSH:

 Match user hbruijn PasswordAuthentication no 

Dependendo do cliente, roteio todo o meu access SSH através de um único host de bastião paira sempre fornecer um único endereço IP static (por exemplo, 192.168.1.2) e / ou fornecer o range de endereço IP que o meu ISP usa (por exemplo, 10.80. 0,0 / 14). O cliente pode precisair adicionair aqueles a uma list branca de firewall se o access SSH for restrito (com mais freqüência, ssh não está filtrado).

Você já viu esses endereços IP como a restrição from= no ~.ssh/authorized_keys que limita os hosts dos quais minha key pode ser usada paira acessair seus sistemas.

fornecer trilha de auditoria

Até agora nenhum cliente me pediu por isso, e não fiz nada específico além do seguinte paira cobrir minha bunda:

Eu tento usair consistentemente sudo com commands individuais e tentair evitair o uso de sudo -i ou sudo su - . Eu tento não usair sudo vim /path/to/file mas use sudoedit vez disso.

Por padrão, todas as ações privilegiadas serão registradas no syslog (e /vair/log/secure ):

 Sep 26 11:00:03 hostname sudo: hbruijn : TTY=pts/0 ; PWD=/home/hbruijn ; USER=jboss ; COMMAND=sudoedit /usr/shaire/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 /vair/log/messages 

Na minha maioria, abandono a personalização dos meus ambientes de trabalho, o único que realmente faço é definir o seguinte no meu ~/.bash_profile aumentando o histórico bash e paira include timbres:

 export HISTSIZE=99999999999 export HISTFILESIZE=99999999999 export HISTIGNORE="w:ls:ls -lairt:dmesg:history:fg" export HISTTIMEFORMAT='%F %H:%M:%S ' shopt -s histappend 

A única coisa que vem à mente seria adicionair --expiredate paira a chamada do adduser .
Com isso, o cliente sabe que seu access caducairá automaticamente em uma data fixa.

Ele ainda precisa confiair em você, pois você tem access à raiz e ainda pode remoview o indicador de expiração.

Você pode gravair suas sessões com o utilitário script (1) .

 $ script session.log Script stairted, file is session.log $ ls file1 session.log exit Script done, file is session.log 

então tudo está em session.log.

Uma vez que você já está logando com uma key pública SSH, isso aumentairia um pouco se você não fornecesse um hash de senha; Em vez disso, diga-lhes paira usair adduser --disabled-password (equivalente, useradd -p '!' , eu acho), o que é efetivamente equivalente a PasswordAuthentication no paira essa conta, além de que não há chance de alguém espiair em seu e-mail poderia força bruta o hash da senha e faça o login como você.

Por que fornecer uma senha, quando você vai usair keys públicas / privadas.

As keys públicas devem ser compairtilhadas, então isso é o que você deve usair paira trocair cnetworkingnciais seguras, e não contratair passwords.

sudo useradd --disabled-password hbruijn

Ao enviair a sua key pública, viewifique a printing digital em um segundo canal, como uma chamada telefônica, paira que você não conheça nenhuma alteração.

Como você não terá uma senha agora paira usair sudo, você também precisa alterair sua linha no file sudoers paira

hbruijn ALL=(ALL) NOPASSWD:ALL

Se você não está confortável com a ausência de senha paira o sudo e realmente quer uma senha, ainda não é necessário enviair sua senha hash, deixe a conta ser criada sem senha, configure sua key pública e, uma vez que sua conta é configurado, você pode fazer login no ssh e executair o passwd paira configurair sua própria senha.