De vez en cuando recibo la extraña solicitud de proporcionar asistencia remota, resolución de problemas y / o ajuste de rendimiento en sistemas Linux.
Las compañías más grandes a menudo ya tienen procedimientos bien establecidos para proporcionar acceso remoto a vendedores / proveedores y solo necesito cumplir con ellos. (Para bien o para mal.)
Por otro lado, las pequeñas empresas y los individuos siempre recurren a mí para instruirlos sobre lo que deben hacer para prepararme. Por lo general, sus servidores están conectados directamente a Internet y las medidas de seguridad existentes consisten en los valores predeterminados para cualquier distribución de Linux.
Casi siempre necesitaré acceso de nivel raíz y quien sea que configure el acceso para mí no es un administrador de sistemas experto. No quiero su contraseña de root y también estoy bastante seguro de que mis acciones no serán maliciosas, pero qué instrucciones razonablemente simples debo dar a:
- configurar una cuenta e intercambiar credenciales de forma segura
- configurar el acceso root (sudo)
- restringir el acceso a mi cuenta
- proporcionar seguimiento de auditoría
(Y sí, soy consciente y siempre advierto a esos clientes que una vez que tenga acceso de administrador, ocultar cualquier acción maliciosa es trivial, pero supongamos que no tengo nada que ocultar y participar activamente en la creación de un seguimiento de auditoría).
¿Qué se puede mejorar en los pasos a continuación?
Mi conjunto de instrucciones actual:
configurar una cuenta e intercambiar credenciales de forma segura
Proporciono un hash de contraseña y solicito que mi cuenta esté configurada con esa contraseña cifrada, por lo que no necesitaremos transmitir una contraseña de texto claro, seré el único que conoce la contraseña y no comenzamos con Una contraseña débil predecible.
sudo useradd -p '$1$********' hbruijn
Proporciono una clave pública SSH (par de claves específico por cliente) y les pido que configuren mi cuenta con esa clave:
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 el acceso root (sudo)
Le pido al cliente que configure sudo para mí con sudo sudoedit
o usando su editor favorito y agregue a /etc/sudoers
:
hbruijn ALL=(ALL) ALL
restringir el acceso a mi cuenta
Por lo general, el cliente todavía permite inicios de sesión basados en contraseña y les pido que agreguen las siguientes dos líneas para /etc/ssh/sshd_config
al menos restringir mi cuenta solo a claves SSH:
Match user hbruijn
PasswordAuthentication no
Dependiendo del cliente, enrutaré todo mi acceso SSH a través de un solo host de bastión para proporcionar siempre una única dirección IP estática (por ejemplo 192.168.1.2) y / o proporcionar el rango de direcciones IP que utiliza mi ISP (por ejemplo, 10.80). 0.0 / 14). El cliente puede necesitar agregarlos a una lista blanca de firewall si el acceso SSH está restringido (sin embargo, la mayoría de las veces, ssh no está filtrado).
Ya viste esas direcciones IP como la from=
restricción en el ~.ssh/authorized_keys
archivo que limita los hosts desde los cuales se puede usar mi clave para acceder a sus sistemas.
proporcionar seguimiento de auditoría
Hasta ahora, ningún cliente me lo había pedido, y no he hecho nada específico más allá de lo siguiente para cubrir mi trasero:
Intento usarlo constantemente sudo
con comandos individuales e intento evitar usar sudo -i
o sudo su -
. Trato de no usar, sudo vim /path/to/file
pero uso sudoedit
en su lugar.
Por defecto, todas las acciones privilegiadas se registrarán en syslog (y /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
La mayoría de las veces me doy por vencido en la personalización de mis entornos de trabajo, lo único que realmente hago es configurar lo siguiente en mi ~/.bash_profile
creciente historial de bash e incluir marcas de tiempo:
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
, por lo que, en casos extremos, su cliente puede ver en vivo lo que está haciendo.