Saltar al contenido

La automatización de configuración inicial del servidor con Ubuntu 18.04

marzo 4, 2020

 

Introducción

Cuando se crea un nuevo servidor de Ubuntu 18.04, hay algunos pasos de configuración que se debe tener desde el principio como parte de la configuración básica. Esto aumentará la seguridad y la facilidad de uso de su servidor y le dará una base sólida para las acciones posteriores.

Mientras que usted puede completar estos pasos de forma manual, a veces puede ser más fácil de la escritura de los procesos para ahorrar tiempo y eliminar el error humano. Esta guía explica cómo usar un script para automatizar los pasos de la guía de configuración inicial del servidor.

Lo que hace el script Do?

Este script es una alternativa a la ejecución manual a través del procedimiento descrito en el servidor de guía de configuración inicial de Ubuntu 18.04 y la guía sobre cómo configurar las claves SSH en Ubuntu 18.04.

las siguientes variables afectan la forma en que se ejecuta la secuencia de comandos:

  • NOMBRE DE USUARIO: El nombre de la cuenta de usuario para crear y privilegios sudo subvención a.
  • COPY_AUTHORIZED_KEYS_FROM_ROOT: si desea copiar los activos claves SSH desde la cuenta root a la nueva cuenta sudo.
  • OTHER_PUBLIC_KEYS_TO_ADD: Un conjunto de cadenas que representan otras claves públicas a añadir a la cuenta sudo habilitado. Esta opcionalmente se puede utilizar además de o en lugar de copiar las claves de la cuenta raíz.

Debe actualizar estas variables según sea necesario antes de ejecutar la secuencia de comandos.

Cuando se ejecuta la secuencia de comandos, se realizan las siguientes acciones:

  • Crear una cuenta de usuario con privilegios sudo utilizando el nombre especificado por la variable NOMBRE DE USUARIO.
  • configurar el estado inicial de la contraseña para la cuenta nueva: Si el servidor se ha configurado para la autenticación de contraseña, el original, contraseña administrativa generada se mueve de la cuenta root a la nueva cuenta sudo. La contraseña de la cuenta root es entonces locked.If el servidor se ha configurado para la autenticación de claves SSH, una contraseña en blanco se establece para la cuenta de sudo.
  • Si el servidor se ha configurado para la autenticación de contraseña, la, contraseña administrativa generada original se trasladó desde la cuenta root a la nueva cuenta sudo. La contraseña de la cuenta root es entonces bloqueado.
  • Si el servidor se ha configurado para la autenticación de claves SSH, una contraseña en blanco se establece para la cuenta de sudo. contraseña
  • El sudo del usuario se marca como caducado por lo que debe ser cambiado desde el primer acceso.
  • El authorized_keys archivo de la cuenta root se copia al usuario sudo si COPY_AUTHORIZED_KEYS_FROM_ROOT se establece en true.
  • Todas las teclas definidas en OTHER_PUBLIC_KEYS_TO_ADD se añaden al archivo authorized_keys del usuario sudo.
  • autenticación SSH basada en contraseña está deshabilitada para el usuario root.
  • La UFW cortafuegos está habilitado con conexiones SSH permitido.
  • Si el servidor se ha configurado para la autenticación de contraseña, el original, contraseña administrativa generada se mueve de la cuenta root a la nueva cuenta sudo. La contraseña de la cuenta root es entonces bloqueado.
  • Si el servidor se ha configurado para la autenticación de claves SSH, una contraseña en blanco se establece para la cuenta de sudo.

cómo utilizar la secuencia de comandos

El script puede ejecutarse de dos maneras: mediante la adición al campo de datos de usuario del servidor durante la creación o por la tala como root y ejecutarlo después del aprovisionamiento.

Usando datos de usuario

Al crear un Gotita en digitalocean, puede especificar opcionalmente los datos del usuario, un script para poner en marcha durante el servidor de aprovisionamiento inicial para realizar una configuración adicional.

Si va a crear un droplet desde el panel de control , se puede seleccionar el datos de usuario casilla de verificación en la sección de opciones adicionales Seleccionar . Un cuadro de texto aparecerá donde se puede pegar el script:

Si va a crear un droplet utilizando la API digitalocean , puede pasar en la secuencia de comandos con el atributo user_data lugar.

Si va a crear un droplet con la herramienta de línea de comandos doctl , que puede pasar en el guión con la opción de archivo –user-data:

doctl compute droplet create ... --user-data-file /patho/script

  • doctl cómputo de gotas Crear … –user-data -file / ruta / a / script

Independientemente del método que se utiliza para agregar los datos de usuario, el script se ejecuta la primera vez el nuevo servidor se inicia hacia arriba. Es posible que tenga que esperar unos minutos para que el proceso completo, pero después, puede iniciar sesión en el servidor con su usuario sudo activado para que ninguna otra configuración.

La primera vez que se conecte, se le pedirá que cambie su contraseña. El servidor finalizará la sesión SSH actual una vez que usted proporciona y confirmar sus nuevas credenciales. Después, puede SSH volver de nuevo con normalidad.

Ejecución del script después del aprovisionamiento

Si no desea utilizar los datos de usuario, también puede ejecutar el script manualmente a través de SSH una vez que el servidor se arranca.

Si ha descargado la secuencia de comandos en el equipo local, que puede pasar a la secuencia de comandos directamente a SSH escribiendo:

ssh [email protected]_public_IP "bash -s" -- < /patho/script/file

  • ssh root @ servers_public_IP "fiesta -s" -

ahora debería ser capaz de iniciar sesión con su cuenta de sudo para cualquier configuración adicional.

Si usted no tiene el guión descargado en el ordenador local, inicia por la tala en la cuenta raíz en su servidor:

ssh [email protected]_public_IP

  • ssh root @ servers_public_IP

A continuación, descargar el guión prima al servidor:

curl -L https://raw.githubusercontent.com/do-community/automated-setups/master/Ubuntu-18.04/initial_server_setup.sh -o mp/initial_setup.sh

  • rizo -L https://raw.githubusercontent.com/do-community/automated-setups/master/Ubuntu-18.04/initial_server_setup.sh -o mp/initial_setup.sh

Inspeccionar el guión para asegurarse de que se descargó correctamente y actualizar las variables que desea cambiar:

nano mp/initial_setup.sh

  • nano mp/initial_setup.sh

Una vez satisfecho, ejecute la secuencia de comandos de forma manual utilizando bash:

bash mp/initial_setup.sh

  • fiesta mp/initial_setup.sh

Usted debe ser capaz de iniciar sesión con el usuario sudo habilitados para completar cualquier otra configuración. Contenido

el guión

Puede encontrar el script de configuración del servidor inicial en las configuraciones automatizadas-repositorio en la organización digitalocean Comunidad GitHub. Para copiar o descargar directamente el contenido del script, haga clic en el botón Raw hacia la parte superior de la secuencia de comandos, o haga clic aquí para ver el contenido directamente primas.

Todo el contenido también se incluyen aquí por conveniencia:

#!/bin/bash
set -euo pipefail

########################
### SCRIPT VARIABLES ###
########################

# Name of the user to create and grant sudo privileges
USERNAME=sammy

# Whether to copy over the root user's `authorized_keys` file to the new sudo
# user.
COPY_AUTHORIZED_KEYS_FROM_ROOT=true

# Additional public keys to add to the new sudo user
# OTHER_PUBLIC_KEYS_TO_ADD=(
# "ssh-rsa AAAAB..."
# "ssh-rsa AAAAB..."
# )
OTHER_PUBLIC_KEYS_TO_ADD=(
)

####################
### SCRIPT LOGIC ###
####################

# Add sudo user and grant privileges
useradd --create-home --shell "/bin/bash" --groups sudo "${USERNAME}"

# Check whether the root account has a real password set
encrypted_root_pw="$(grep root /etc/shadow | cut --delimiter=: --fields=2)"

if [ "${encrypted_root_pw}" != "*" ]; then
# Transfer auto-generated root password to user if present
# and lock the root account to password-based access
echo "${USERNAME}:${encrypted_root_pw}" | chpasswd --encrypted
passwd --lock root
else
# Delete invalid password for user if using keys so that a new password
# can be set without providing a previous value
passwd --delete "${USERNAME}"
fi

# Expire the sudo user's password immediately to force a change
chage --lastday 0 "${USERNAME}"

# Create SSH directory for sudo user
home_directory="$(eval echo ~${USERNAME})"
mkdir --parents "${home_directory}/.ssh"

# Copy `authorized_keys` file from root if requested
if [ "${COPY_AUTHORIZED_KEYS_FROM_ROOT}" = true ]; then
cp /root/.ssh/authorized_keys "${home_directory}/.ssh"
fi

# Add additional provided public keys
for pub_key in "${OTHER_PUBLIC_KEYS_TO_ADD[@]}"; do
echo "${pub_key}" >> "${home_directory}/.ssh/authorized_keys"
done

# Adjust SSH configuration ownership and permissions
chmod 0700 "${home_directory}/.ssh"
chmod 0600 "${home_directory}/.ssh/authorized_keys"
chown --recursive "${USERNAME}":"${USERNAME}" "${home_directory}/.ssh"

# Disable root SSH login with password
sed --in-place 's/^PermitRootLogin.*/PermitRootLogin prohibit-password/g' /etc/ssh/sshd_config
if sshd -t -q; then
systemctl restart sshd
fi

# Add exception for SSH and then enable UFW firewall
ufw allow OpenSSH
ufw --force enable

Conclusión

la automatización de la configuración inicial del servidor le puede ahorrar un poco de tiempo y le da una base buena para la configuración adicional. Si hay pasos adicionales que le gustaría tener, puede conectarse una vez ejecutado el script continúe manualmente, o anexar los pasos hasta el final de la secuencia de comandos para automatizar el proceso.